diff -Nru gst-plugins-base1.0-1.4.3/aclocal.m4 gst-plugins-base1.0-1.6.1/aclocal.m4 --- gst-plugins-base1.0-1.4.3/aclocal.m4 2014-09-24 08:15:59.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/aclocal.m4 2015-10-30 14:20:30.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -32,10 +32,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.14' +[am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.14.1], [], +m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.14.1])dnl +[AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -103,15 +103,14 @@ # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -142,7 +141,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -333,7 +332,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -409,7 +408,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -499,8 +498,8 @@ # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl @@ -574,6 +573,9 @@ AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not @@ -603,7 +605,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -614,7 +616,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -624,7 +626,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -646,7 +648,7 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -681,7 +683,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -731,7 +733,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -768,7 +770,7 @@ fi ]) -# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -802,7 +804,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -831,7 +833,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -878,7 +880,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1113,7 +1115,7 @@ sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1132,7 +1134,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1213,7 +1215,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1273,7 +1275,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1301,7 +1303,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1320,7 +1322,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1470,7 +1472,6 @@ m4_include([common/m4/gst-platform.m4]) m4_include([common/m4/gst-plugin-docs.m4]) m4_include([common/m4/gst-plugindir.m4]) -m4_include([common/m4/gst-x11.m4]) m4_include([common/m4/gst.m4]) m4_include([common/m4/gtk-doc.m4]) m4_include([common/m4/introspection.m4]) diff -Nru gst-plugins-base1.0-1.4.3/autogen.sh gst-plugins-base1.0-1.6.1/autogen.sh --- gst-plugins-base1.0-1.4.3/autogen.sh 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/autogen.sh 2015-10-22 08:01:34.000000000 +0000 @@ -13,7 +13,6 @@ olddir=`pwd` cd "$srcdir" -DIE=0 package=gst-plugins-base srcfile=gst-plugins-base.doap @@ -56,24 +55,25 @@ autogen_options $@ printf "+ check for build tools" -if test ! -z "$NOCHECK"; then echo ": skipped version checks"; else echo; fi -version_check "autoconf" "$AUTOCONF autoconf autoconf270 autoconf269 autoconf268 " \ - "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 68 || DIE=1 -version_check "automake" "$AUTOMAKE automake automake-1.11" \ - "ftp://ftp.gnu.org/pub/gnu/automake/" 1 11 || DIE=1 -version_check "autopoint" "autopoint" \ - "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 17 || DIE=1 -version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \ - "ftp://ftp.gnu.org/pub/gnu/libtool/" 2 2 6 || DIE=1 -version_check "pkg-config" "" \ - "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1 +if test -z "$NOCHECK"; then + echo -die_check $DIE - -aclocal_check || DIE=1 -autoheader_check || DIE=1 - -die_check $DIE + printf " checking for autoreconf ... " + echo + which "autoreconf" 2>/dev/null || { + echo "not found! Please install the autoconf package." + exit 1 + } + + printf " checking for pkg-config ... " + echo + which "pkg-config" 2>/dev/null || { + echo "not found! Please install pkg-config." + exit 1 + } +else + echo ": skipped version checks" +fi # if no arguments specified then this will be printed if test -z "$*" && test -z "$NOCONFIGURE"; then @@ -87,23 +87,14 @@ toplevel_check $srcfile # autopoint -if test -d po ; then - tool_run "$autopoint" "--force" +if test -d po && grep ^AM_GNU_GETTEXT_VERSION configure.ac >/dev/null ; then + tool_run "autopoint" "--force" fi # aclocal if test -f acinclude.m4; then rm acinclude.m4; fi -tool_run "$libtoolize" "--copy --force" -tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS" -tool_run "$autoheader" - -# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -echo timestamp > stamp-h.in 2> /dev/null - -tool_run "$autoconf" -debug "automake: $automake" -tool_run "$automake" "--add-missing --copy" +autoreconf --force --install || exit 1 test -n "$NOCONFIGURE" && { echo "+ skipping configure stage for package $package, as requested." diff -Nru gst-plugins-base1.0-1.4.3/ChangeLog gst-plugins-base1.0-1.6.1/ChangeLog --- gst-plugins-base1.0-1.4.3/ChangeLog 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ChangeLog 2015-10-30 14:20:43.000000000 +0000 @@ -1,48 +1,181 @@ -=== release 1.4.3 === +=== release 1.6.1 === -2014-09-24 Sebastian Dröge +2015-10-30 Sebastian Dröge * configure.ac: - releasing 1.4.3 + releasing 1.6.1 -2014-09-23 23:12:19 +0300 Sebastian Dröge +2015-10-30 14:27:21 +0200 Sebastian Dröge - * gst/videoscale/vs_4tap.c: - videoscale Use stride instead of width in more places + * po/nl.po: + * po/zh_CN.po: + po: Update translations -2014-09-19 12:31:49 +0530 Sanjay NM +2015-10-28 11:32:57 +0100 Wim Taymans - * gst/videoscale/vs_4tap.c: - videoscale: Use width instead of stride in buffer offset calculation - https://bugzilla.gnome.org/show_bug.cgi?id=736944 + * gst/audioconvert/gstaudioquantize.c: + audioquantize: fix 8-pole noise shaping + Fix the 8-pole noise shaping error update. We were mixing errors from + different channels. -2014-08-08 20:01:20 +1000 Jan Schmidt +2015-10-27 15:44:06 +0200 Sebastian Dröge - * gst-libs/gst/video/gstvideodecoder.c: - * gst-libs/gst/video/gstvideodecoder.h: - videodecoder: Reset last_timestamp_out on new segment - Reset last_timestamp_out when applying the output segment - change, to avoid decoder confusion over new timestamp timelines when - a seamless segment change happens. - Move some locks/unlocks to later when they're actually needed. - https://bugzilla.gnome.org/show_bug.cgi?id=734617 + * gst/playback/gstdecodebin2.c: + decodebin: Send SEEK events directly to adaptive streaming demuxers + This makes sure that they will always get SEEK events, even if we're currently + in the middle of a group switch (i.e. switching to another + representation/bitrate/etc). + https://bugzilla.gnome.org/show_bug.cgi?id=606382 -2014-09-11 22:19:05 +0100 Tim-Philipp Müller +2015-10-06 15:20:51 +0200 Guillaume Desmottes - * sys/xvimage/xvcontext.c: - * sys/xvimage/xvcontext.h: - xvimagesink: only try to set XV_ITURBT_709 port attribute if it exists - Don't try to set port attribute that's not advertised by the - adaptor. Fixes videotestsrc ! xvimagesink aborting with - X Error of failed request: BadMatch (invalid parameter attributes) - Major opcode of failed request: 151 (XVideo) - Minor opcode of failed request: 13 () - on intel HD4600 graphics with kernel 3.16, xserver 1.15, - intel driver 2.21.15. + * gst/playback/gstdecodebin2.c: + decodebin: fix event leak + As stated in GST_PAD_PROBE_HANDLED's documentation, we are + supposed to unref the event before returning. + Fixes an event leak in the validate.hls.playback.play_15s.hls_bibbop + validate scenario. + https://bugzilla.gnome.org/show_bug.cgi?id=754459 -=== release 1.4.2 === +2015-10-23 12:02:28 +0300 Sebastian Dröge -2014-09-19 14:21:22 +0300 Sebastian Dröge + * gst/playback/gstplaybin2.c: + playbin: Send upstream events directly to playsink + Send event directly to playsink instead of letting GstBin iterate + over all sink elements. The latter might send the event multiple times + in case the SEEK causes a reconfiguration of the pipeline, as can easily + happen with adaptive streaming demuxers. + What would then happen is that the iterator would be reset, we send the + event again, and on the second time it will fail in the majority of cases + because the pipeline is still being reconfigured + +2015-10-22 12:07:44 +0800 Pavel Bludov + + * gst-libs/gst/video/video-overlay-composition.h: + video: overlay-composition: fix rectangle and composition cast macros + Closing parenthesis was missing in two cases. + https://bugzilla.gnome.org/show_bug.cgi?id=756893 + +2015-10-20 12:08:23 +0300 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbuffer.h: + rtp: GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING is Since 1.6.1 + +2015-10-16 10:48:50 +1100 Matthew Waters + + * win32/common/libgstrtp.def: + win32 update exports for new rtp symbols + +2015-07-22 11:31:05 +0200 Stian Selnes + + * gst-libs/gst/rtp/gstrtpbuffer.c: + * gst-libs/gst/rtp/gstrtpbuffer.h: + * tests/check/libs/rtp.c: + rtpbuffer: Add map flag to skip padding + Encrypted RTP buffers may contain encrypted padding, hence it's + necessary to have an option to relax the validation in order to + successfully map the buffer. + When the flag GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING is set + gst_rtp_buffer_map() will map the buffer like if padding is not + present. + https://bugzilla.gnome.org/show_bug.cgi?id=752705 + +2015-09-14 15:25:11 +0900 eunhae choi + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: fix issue about eos handling during flushing + If the flush-start is arrived during _eos_wait() in basesink, + the 'eos' flag is overwritten to TRUE after exiting the _eos_wait(). + To resolve the overwritten issue, + the subclass doing the _eos_wait() call should return the right value. + If the eos flag is set to TRUE again, it will cause error(enter the eos flow) + of the following state changing from PAUSED to PLAYING in basesink. + https://bugzilla.gnome.org/show_bug.cgi?id=754980 + +2015-10-17 21:47:07 +0300 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + * gst/playback/gsturidecodebin.c: + playbin/uridecodebin: Always post async-done immediately if we're a live pipeline + Not only if the base class told us, but also if one of our own elements did. + https://bugzilla.gnome.org/show_bug.cgi?id=756611 + +2015-10-17 22:25:22 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaysink.c: + * gst/playback/gstsubtitleoverlay.c: + decodebin/playbin/playsink/subtitleoverlay: Post async-done on state change failures + https://bugzilla.gnome.org/show_bug.cgi?id=756611 + +2015-10-17 22:20:31 +0300 Sebastian Dröge + + * gst/playback/gstplaysink.c: + playsink: Immediately error out if state change fails + Otherwise we chain up to the parent class' change_state function and might + override the failure with SUCCESS. + https://bugzilla.gnome.org/show_bug.cgi?id=756611 + +2015-10-17 20:36:27 +0300 Sebastian Dröge + + * gst-libs/gst/video/video.c: + video: Add out annotations to the out parameters of gst_video_calculate_display_ratio() + https://bugzilla.gnome.org/show_bug.cgi?id=754567 + +2015-10-15 10:01:38 +0900 Vineeth TM + + * gst/playback/gstplaysink.c: + playsink: Fix volume element leak + In case sink implements a streamvolume interface, volume element is being got + from the sink. But this is transfer full. So the memory should be freed before + setting it to NULL. This was resulting in major memory leaks + https://bugzilla.gnome.org/show_bug.cgi?id=755867 + +2015-10-14 00:32:11 +0300 Sebastian Dröge + + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + alsa: Use 8 bit pointer type for byte-based pointer arithmetic + Usually these loops only run once, so there's no problem here. But sometimes + they run twice, and by adding the number of bytes to a 16 bit pointer type we + would advance twice as much as we should. + Also use snd_pcm_frames_to_bytes() in alsasrc to calculate + the number of bytes to skip, same as we do in alsasink. + Thanks to Lucio A. Hernandez for reporting. + +2015-10-04 18:36:00 +0100 Sebastian Dröge + + * sys/xvimage/xvimagepool.c: + xvimagesink: Put error message into debug output instead of just throwing it away + +2015-09-29 10:12:28 +0530 Rajat Verma + + * gst/playback/gstdecodebin2.c: + decodebin: free hidden groups at time of switching groups + hidden groups should be freed at time of switching groups to avoid memory use + from balloning up. + https://bugzilla.gnome.org/show_bug.cgi?id=755770 + +2015-09-30 18:17:13 +0100 Tim-Philipp Müller + + * gst/subparse/gstsubparse.c: + subparse: detect closing tags even if there's a space after the slash + should be handled like + https://bugzilla.gnome.org/show_bug.cgi?id=755875 + +2015-09-23 11:59:22 -0400 Perry Hung + + * gst-libs/gst/app/Makefile.am: + app: pass PKG_CONFIG_PATH for gir files for libgstapp as well + gir include search directories should respect PKG_CONFIG_PATH, + just like we do everywhere else. Makes g-i pick up the right + paths when using ./configure --with-pkg-config-path= + https://bugzilla.gnome.org/show_bug.cgi?id=755494 + +=== release 1.6.0 === + +2015-09-25 23:15:20 +0200 Sebastian Dröge * ChangeLog: * NEWS: @@ -58,7 +191,6 @@ * docs/plugins/inspect/plugin-cdparanoia.xml: * docs/plugins/inspect/plugin-encoding.xml: * docs/plugins/inspect/plugin-gio.xml: - * docs/plugins/inspect/plugin-ivorbisdec.xml: * docs/plugins/inspect/plugin-libvisual.xml: * docs/plugins/inspect/plugin-ogg.xml: * docs/plugins/inspect/plugin-pango.xml: @@ -75,12 +207,13 @@ * docs/plugins/inspect/plugin-vorbis.xml: * docs/plugins/inspect/plugin-ximagesink.xml: * docs/plugins/inspect/plugin-xvimagesink.xml: + * gst-libs/gst/video/video-orc-dist.c: * gst-plugins-base.doap: * win32/common/_stdint.h: * win32/common/config.h: - Release 1.4.2 + Release 1.6.0 -2014-09-19 10:51:45 +0300 Sebastian Dröge +2015-09-25 22:50:51 +0200 Sebastian Dröge * po/af.po: * po/az.po: @@ -122,154 +255,8829 @@ * po/zh_CN.po: Update .po files -2014-09-19 09:58:48 +0300 Sebastian Dröge +2015-09-24 18:06:58 +0200 Sebastian Dröge - * po/da.po: - * po/sr.po: - po: Update translations + * gst-libs/gst/video/video-orc.orc: + video-dither: Use saturated add when adding ordered dither for > 8 bit targets + Otherwise our 16 bit integers are going to overflow in intermediate + calculations, causing video to become mostly black. + https://bugzilla.gnome.org/show_bug.cgi?id=755392 + +2015-09-24 11:33:24 +0200 Sebastian Dröge + + * gst-libs/gst/video/video-frame.c: + video-frame: Fix gst_video_frame_copy() for formats with pstride==0 + v210, UYVP and IYU1 are complex formats for which pixel stride does not really + have a meaning. If we copy width*pstride bytes per line, it's not going to do + the right thing. As a fallback, copy stride bytes per line. This might copy + uninitialized bytes at the end of each line, but at least copies the frame. + https://bugzilla.gnome.org/show_bug.cgi?id=755392 + +2015-09-10 15:08:35 +0200 Aurélien Zanelli + + * gst-libs/gst/allocators/gstfdmemory.c: + fdmemory: remove 'allow-none' annotation in gst_fd_allocator_alloc() doc + gst_fd_allocator_alloc() ensure that passed allocator is a fd memory + allocator, so that we can't pass NULL allocator. + https://bugzilla.gnome.org/show_bug.cgi?id=754833 + +2015-09-10 15:08:35 +0200 Aurélien Zanelli + + * gst-libs/gst/allocators/gstdmabuf.c: + dmabuf: remove 'allow-none' annotation in gst_dmabuf_allocator_alloc() doc + gst_dmabuf_allocator_alloc() ensure that passed allocator is a DMABuf + allocator, so that we can't pass NULL allocator. + https://bugzilla.gnome.org/show_bug.cgi?id=754833 -2014-09-18 12:29:37 +0400 Andrei Sarakeev +=== release 1.5.91 === - * gst/playback/gstplaybin2.c: - playbin: Don't leak input-selector sinkpads - https://bugzilla.gnome.org/show_bug.cgi?id=736861 +2015-09-18 19:20:00 +0200 Sebastian Dröge -2014-09-17 14:18:49 +0200 Ognyan Tonchev + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-app.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-encoding.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-videoconvert.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * gst-plugins-base.doap: + * win32/common/_stdint.h: + * win32/common/config.h: + Release 1.5.91 - * gst-libs/gst/audio/gstaudioencoder.c: - audioencoder: do not leak events when flushing them - https://bugzilla.gnome.org/show_bug.cgi?id=736796 +2015-09-18 19:19:16 +0200 Sebastian Dröge -2014-09-17 14:34:25 +0200 Ognyan Tonchev + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + Update .po files - * gst/encoding/gststreamsplitter.c: - streamsplitter: do not leak events when flushing them - https://bugzilla.gnome.org/show_bug.cgi?id=736796 +2015-09-18 17:48:49 +0200 Christophe Fergeau -2014-09-17 14:11:21 +0200 Ognyan Tonchev + * gst-libs/gst/app/gstappsink.c: + * gst-libs/gst/app/gstappsink.h: + appsink: Fix 'steaming' typo in API doc + There are several occurrences of 'steaming' where 'streaming' was meant. - * gst-libs/gst/video/gstvideodecoder.c: - videodecoder: do not leak events when flushing them - https://bugzilla.gnome.org/show_bug.cgi?id=736796 +2015-09-18 11:49:59 +0200 Sebastian Dröge -2014-09-18 12:39:48 +0300 Sebastian Dröge + * po/vi.po: + * po/zh_CN.po: + po: Update translations - * gst-libs/gst/audio/gstaudiodecoder.c: - audiodecoder: Simplify code a bit +2015-09-18 10:59:46 +0530 Ravi Kiran K N -2014-09-17 14:08:17 +0200 Ognyan Tonchev + * tests/examples/playback/playback-test.c: + playback-test: avoid critical on exit + Only free vis_entries array when not null on exit. + https://bugzilla.gnome.org/show_bug.cgi?id=755201 - * gst-libs/gst/video/gstvideoencoder.c: - videoencoder: do not leak events when flushing them - https://bugzilla.gnome.org/show_bug.cgi?id=736796 +2015-09-18 09:48:18 +0530 Prashant Gotarne -2014-09-17 12:17:53 +0200 Ognyan Tonchev + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: fix typo in debug log message + https://bugzilla.gnome.org/show_bug.cgi?id=755198 - * gst-libs/gst/audio/gstaudiodecoder.c: - audiodecoder: Don't leak events - https://bugzilla.gnome.org/show_bug.cgi?id=736788 +2015-09-17 14:27:33 +0900 Vineeth T M -2014-09-17 12:17:27 +0200 Ognyan Tonchev + * gst-libs/gst/audio/gstaudiosink.c: + * gst/tcp/gstmultisocketsink.c: + audiosink, multisocketsink: Fix error leak during failures + https://bugzilla.gnome.org/show_bug.cgi?id=755143 - * tests/check/libs/audiodecoder.c: - audiodecoder: extend flush_events test to check for event leaks - https://bugzilla.gnome.org/show_bug.cgi?id=736788 +2015-09-16 19:53:35 +0200 Sebastian Dröge -2014-09-05 13:49:46 -0300 Thiago Santos + * gst/playback/gsturidecodebin.c: + uridecodebin: Use the correct caps name for MS Smooth Streaming manifests + Thanks to John Chang for reporting. + https://bugzilla.gnome.org/show_bug.cgi?id=755098 - * ext/pango/gstbasetextoverlay.c: - basetextoverlay: Do not fail the negotiation if query fails - The allocation query failure doesn't mean that the negotiation - has failed as the element can allocate buffers itself. - Instead, only fail if the pads are flushing and the allocation - query failed. - https://bugzilla.gnome.org/show_bug.cgi?id=735844 +2015-09-15 15:26:44 +0100 Tim-Philipp Müller -2013-01-31 13:49:00 +0100 Arnaud Vrac + * gst-libs/gst/app/gstappsink.c: + appsink: minor docs fix - * ext/pango/gstbasetextoverlay.c: - basetextoverlay: get framerate from previously parsed video info +2015-09-11 23:36:47 +0100 Tim-Philipp Müller -2013-01-31 13:47:35 +0100 Arnaud Vrac + * gst-libs/gst/video/gstvideopool.c: + videopool: ensure allocation alignment is consistent with video alignment requirements + Make sure GstAllocationParams alignment is not less than + any alignment requirement specified via GstVideoAlignment. + https://bugzilla.gnome.org/show_bug.cgi?id=754120 - * ext/pango/gstbasetextoverlay.c: - basetextoverlay: do not ask for a bufferpool when checking for composition meta +2015-09-14 09:36:20 +0900 Vineeth TM -2014-09-04 15:06:31 +0200 Arnaud Vrac + * sys/xvimage/xvimagesink.c: + xvimagesink: fix error leak when context creation fails + When context creation fails, error is getting leaked. + https://bugzilla.gnome.org/show_bug.cgi?id=754973 - * ext/pango/gstbasetextoverlay.c: - basetextoverlay: schedule reconfigure on source pad when negotiation fails - The source pad might be flushing while negotiating, resulting in - set_caps or the ALLOCATION query failing. In this case set the - reconfigure flag on the source pad so that negotiation is retried on the - next buffer. +2015-09-11 23:28:37 +0200 Sebastian Dröge -2014-09-16 13:32:52 +0200 Ognyan Tonchev + * gst/playback/gstplaybin2.c: + playback: Add POINTER_TO_ULONG() macro for consistency - * gst-libs/gst/audio/gstaudiocdsrc.c: - audiocdsrc: do not leak uid after parsing TOC select event - https://bugzilla.gnome.org/show_bug.cgi?id=736739 +2015-09-11 23:48:05 +0900 Kouhei Sutou -2014-09-17 10:51:59 +0530 Ravi Kiran K N + * gst/playback/gstplaybin2.c: + playback: fix build error for 64bit Windows build by MinGW + Casting to gpointer from gulong generates the following warning with + 64bit Windows target MinGW: + gstplaybin2.c: In function 'pad_added_cb': + gstplaybin2.c:3476:7: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] + (gpointer) group_id_probe_handler); + ^ + cc1: all warnings being treated as errors + We should cast to guintptr from gulong before we cast to gpointer. + https://bugzilla.gnome.org/show_bug.cgi?id=754755 + +2015-09-09 19:00:33 -0300 Thiago Santos + + * gst-libs/gst/video/video-format.c: + video-format: add missing alpha flag for some formats + Some formats didn't have the alpha flag marked, use the correct + macro so they get it right. + https://bugzilla.gnome.org/show_bug.cgi?id=754808 + +2015-09-09 12:33:02 +0300 Sebastian Dröge + + * gst-libs/gst/app/gstappsrc.c: + appsrc: Always take the mutex before flushing the queue + Otherwise the application might push new buffers into the queue while we're + flushing, potentially causing the GQueue data structure to become inconsistent + and causing crashes soon after. + https://bugzilla.gnome.org/show_bug.cgi?id=754597 + +2015-09-08 01:35:19 +0530 Vikram Fugro + + * gst-libs/gst/app/gstappsrc.c: + * tests/check/elements/appsrc.c: + appsrc: retain the latest caps in queue when flushing + - Retain the latest caps in the internal queue, when + flushing. + - Add a unit test case for the same. + https://bugzilla.gnome.org/show_bug.cgi?id=754597 + +2015-09-07 00:19:09 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/video-format.h: + video: improve GstVideoFormatUnpack docs + https://bugzilla.gnome.org/show_bug.cgi?id=754650 + +2015-09-06 18:17:15 +0900 Kouhei Sutou + + * gst-libs/gst/video/video-dither.c: + libs: Fix build error on MinGW where "%ll" is not available + "ll" isn't available on MinGW. We can use G_GINT64_MODIFIER for portable + 64bit size data modifier. + https://bugzilla.gnome.org/show_bug.cgi?id=754630 + +2015-08-31 10:46:43 +0200 Havard Graff + + * gst-libs/gst/Makefile.am: + libs: build rtp after audio + The dependency setup does not seem to work for all systems, + causing the build to fail with: + gstrtpbaseaudiopayload.c:65:0: + fatal error: gst/audio/audio-enumtypes.h: No such file or directory + My setup: + gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 + autoconf (GNU Autoconf) 2.69 + automake (GNU automake) 1.14.1 + libtool (GNU libtool) 2.4.2 + https://bugzilla.gnome.org/show_bug.cgi?id=754344 + +2015-08-31 10:49:41 +0100 Tim-Philipp Müller + + * gst-libs/gst/Makefile.am: + libs: rtp is no longer an independent subdir + https://bugzilla.gnome.org/show_bug.cgi?id=754344 + +2015-09-03 17:55:10 +0200 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + videoscale: fix gamma-decode option + We need to use the enum to configure the option now. - * gst/typefind/gsttypefindfunctions.c: - typefind: correct the condition for irap flag - https://bugzilla.gnome.org/show_bug.cgi?id=736779 +2015-09-03 08:58:08 +0530 Prashant Gotarne -2014-09-16 21:42:46 +0300 Sebastian Dröge + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: FIX crash if padding greater than video size + Skipping rendering of textimage if overlay is completely + outside video frame. + https://bugzilla.gnome.org/show_bug.cgi?id=754429 - * gst/playback/gstplaysink.c: - playsink: Add audio/videoconvert in front of the audio/video-filters - audioresample and videoscale is something the application will have to do if - required, but we can at least help here by adding the - audioconvert/videoconvert elements. - https://bugzilla.gnome.org/show_bug.cgi?id=735748 +2015-08-31 11:09:09 +0200 Philippe Normand -2014-09-15 16:23:57 +0200 Ognyan Tonchev + * gst-libs/gst/app/gstappsrc.c: + appsrc: remove duplicate get_size vfunc assignment - * gst-libs/gst/video/gstvideodecoder.c: - videodecoder: do not leak pool and allocator in error case - https://bugzilla.gnome.org/show_bug.cgi?id=736679 +2015-08-29 21:38:52 +0200 George Kiagiadakis -2014-09-05 09:54:10 -0700 Garg + * gst-libs/gst/allocators/allocators.h: + allocators: include gstfdmemory.h in the main library header, allocators.h + +2015-08-29 10:44:28 +0100 Tim-Philipp Müller * gst-libs/gst/audio/gstaudiobasesink.c: - audiobasesink: Fix deadlock caused by holding object lock while calling clock functions - Issue: - During a PAUSED->PLAYING transition when we are rendering an audio buffer in AudioBaseSink - we make adjustments to the sink's provided clock i.e. fix clock calibration using the external - pipeline clock, within "gst_audio_base_sink_sync_latency function inside gstaudiobasesink.c". - For the calibration adjustment we need to get the sink clock time using "gst_audio_clock_get_time". - But before calling "gst_audio_clock_get_time" we acquire the Object Lock on the Sink. If sink is - a pulsesink, "gst_audio_clock_get_time" internally calls "gst_pulsesink_get_time" which needs to - acquire Pulse Audio Main Loop Lock before querying Pulse Audio for its stream time using - "pa_stream_get_time". Please see "gst_pulsesink_get_time in pulsesink.c". - So the situation here is we have acquired the Object lock on Sink and need PA Main Loop Lock. - Now Pulse Audio Main Thread itself might be in the process of posting a stream status - message after Paused to Playing transition which in turn acquires the PA Main loop lock and - needs the Object Lock on Pulse Sink. This causes a deadlock with the earlier render thread. - Fix: - Do not acquire the object Lock on Sink before querying the time on PulseSink clock. This is - similar to the way we have used get_time at other places in the code. Acquire it after the - get_time call. This way PA Main loop will be able to post its stream status message by - acquiring the Sink Object lock and will eventually release its Main Loop lock needed for - gst_pulsesink_get_time to continue. - https://bugzilla.gnome.org/show_bug.cgi?id=736071 + audiobasesink: fix misleading error message debug detail + https://bugzilla.gnome.org/show_bug.cgi?id=754260 -2014-09-12 14:27:44 +0300 Sebastian Dröge +2015-08-28 09:36:15 -0300 Thiago Santos - * gst-libs/gst/video/gstvideofilter.c: - videofilter: Unref buffers before calling the transform_frame functions - GstVideoFrame has another reference, so the buffer looks unwriteable, - meaning that we can't attach any metas or anything to it - https://bugzilla.gnome.org/show_bug.cgi?id=736118 + * gst/playback/gstplaysinkconvertbin.c: + playsinkconvertbin: implement accept-caps handler + The default one will just go through the internal elements which might + just be identity when it is in passthrough which will lead to the query + being handled by the downstream sink, ignoring all that playsinkconvertbin + could actually handle and convert. + https://bugzilla.gnome.org/show_bug.cgi?id=754235 + +2015-08-27 23:08:51 +0200 Carlos Rafael Giani + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/audio/gstaudiobasesink.h: + audiobasesink: Fix incorrect/missing custom slaving method documentation + https://bugzilla.gnome.org/show_bug.cgi?id=754199 + +2015-08-19 21:19:05 +0900 Eunhae Choi + + * gst/subparse/gstsubparse.c: + subparse: use g_clear_error instead of g_error_free + To avoid invalid pointer accees the err pointer should be set to NULL. + By using g_clear_error() it calls free and clear the pointer. + https://bugzilla.gnome.org/show_bug.cgi?id=753817 -2014-09-11 16:58:35 -0300 Thiago Santos +=== release 1.5.90 === - * gst/playback/gstdecodebin2.c: - decodebin: protect buffering message handling - Use the object lock to avoid concurrent processing which leads - to small disasters (assertions or crashes) +2015-08-19 13:10:23 +0300 Sebastian Dröge + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-app.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-encoding.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-videoconvert.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * gst-plugins-base.doap: + * win32/common/_stdint.h: + * win32/common/config.h: + * win32/common/video-enumtypes.c: + * win32/common/video-enumtypes.h: + Release 1.5.90 + +2015-08-19 12:39:17 +0300 Sebastian Dröge + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + Update .po files + +2015-08-19 11:23:09 +0300 Sebastian Dröge + + * po/cs.po: + * po/da.po: + * po/de.po: + * po/hu.po: + * po/nb.po: + * po/pl.po: + * po/ru.po: + * po/uk.po: + * po/zh_CN.po: + po: Update translations + +2015-08-19 08:37:46 +0900 Vineeth TM + + * tools/gst-discoverer.c: + tools: discoverer: When info is NULL just print error and return + In case discover_uri returns NULL info, passing the info to discoverer APIs + result in critical assertion errors. Hence instead of passing NULL info along, + print the error and return. + https://bugzilla.gnome.org/show_bug.cgi?id=753701 + +2015-08-18 18:47:22 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: Handle the preroll multi-queue size" + This reverts commit 5c8ef0ea05123506dfc35c70c8b165bca7435dad. + +2015-08-18 18:47:21 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: Store extra_buffer_required per group, not globally" + This reverts commit 1ea81114ea6bd48b581f19002018680933aa7a12. + +2015-08-18 18:47:18 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: If extra buffers are going to be required, we're still prerolling" + This reverts commit a3b24f0241bd55a005a072ba8ddcd53e0fdbf827. + +2015-08-18 16:28:42 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + video(en|de)coder: Return TRUE when we consumed a tag event without creating a new event + Fixes spurious flow errors that especially break gst-validate. + +2015-08-18 16:01:28 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: If there are no tags, don't try to do event handling on a NULL event + Fixes some crashes. + +2015-08-18 15:58:57 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: If there are no tags, don't try to do event handling on a NULL event + Fixes some crashes. + +2015-08-18 13:50:17 +0300 Vivia Nikolaidou + + * tools/gst-play.c: + tools: gst-play: Use g_build_filename instead of g_strconcat + When running gst-play against a directory name, and suffix the path with a + directory separator (e.g. tab completion), gst-play was printing two directory + separators in a row. g_build_filename fixes this, and additionally allows for + both '/' and '\' as separators on Windows. + +2015-08-18 15:16:25 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: If extra buffers are going to be required, we're still prerolling + +2015-08-18 15:01:33 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Store extra_buffer_required per group, not globally + It's only relevant for each group, and by storing it in the group + we have locking and everything else like for the other buffering-related + variables. Locking looks a bit fishy still, but it was like that for a long + time already so shouldn't be worse than before. + +2015-07-30 10:33:25 +0900 Myoungsun Lee + + * gst/playback/gstdecodebin2.c: + decodebin: Handle the preroll multi-queue size + Overview: + There are some of interleaved streams which has long-term location of audio data. + It mean the audio data is located far away more than multiqueue size. + In this case, because of multiqueue overrun, the pipeline is stopped. + To prevent hanging-like state, the decodebin needs to handle the queue size. + Caused: + The multiqueue size is not enough, the pipeline will stay being stalled status + and decodebin cannot complete to build decode chain. + In this issue file, decodebin did not receive no_more_pads signal or audio data yet. + Steps to Reproduce: + play the high-resolution(4K file) files or some streaming media(push mode). + Actual Results: + There is no audio or subtitle. + We can see only video or infinite loading. + Resolution: + Decodebin detect this problem, and add extra buffer size to multiqueue. + The multiqueue is larger than before, the next data can be pushed the downstream element. + Additional Information: + The max-preroll extra buffer size is set 8MB. + We can use total pre-roll buffer 10MB. + Only first overrun callback can handle multiqueue size. + https://bugzilla.gnome.org/show_bug.cgi?id=733235 + +2015-08-18 12:29:29 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: fix tag handling + Merge upstream tags with encoder tags and update whenever + any of those changes. + https://bugzilla.gnome.org/show_bug.cgi?id=679768 + +2015-08-18 11:45:24 +0100 Tim-Philipp Müller + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: fix tag handling + Merge upstream tags with encoder tags and update whenever + any of those changes. + https://bugzilla.gnome.org/show_bug.cgi?id=679768 + +2015-08-18 12:56:33 +0300 Sebastian Dröge + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: Add typefinder for TTML+XML + Used in DASH among other things, as SMPTE Timed Text. + +2015-08-18 09:06:39 +0900 Vineeth TM + + * gst-libs/gst/pbutils/gstdiscoverer.c: + pbutils: discoverer: Set GError when NULL info is being returned. + When discovering the URI, if info is NULL, then instead of just returning NULL, + set the GError, so the error can be printed and notified. + https://bugzilla.gnome.org/show_bug.cgi?id=753701 + +2015-08-17 11:18:25 +0900 Vineeth TM + + * tools/gst-discoverer.c: + discoverer: free context and error during failures + When g_option_context_parse or gst_discoverer_new fails, then there will + be memory leaks for ctx and err variables. Free'ing the same. + https://bugzilla.gnome.org/show_bug.cgi?id=753701 + +2015-08-16 18:28:09 +0100 Tim-Philipp Müller + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: try harder to avoid sending unnecessary tag updates + +2015-08-16 17:55:22 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: fix tag handling + Before we just merged everything in pretty much random ways + ad-hoc instead of keeping state properly. In 0.10 that was + how it worked, but in 1.x the tag events sent should always + reflect the latest state and replace any previous tags. + So save the upstream (stream) tags, and save the tags set + by the decoder subclass with merge mode, and then update + the merged tags whenever either of those two changes. + This slightly changes the behaviour of gst_video_decoder_merge_tags() + in case it is called multiple times, since now any call replaces + the previously-set tags. However, it leads to much more predictable + outcomes, and also we are not aware of any subclass which sets this + multiple times and expects all the tags set to be merged. + If more complex tag merging scenarios are required, we'll have + to add a new vfunc for that or the subclass has to intercept + the upstream tags itself and send merged tags itself. + https://bugzilla.gnome.org/show_bug.cgi?id=679768 + +2015-08-14 17:59:29 +0100 Tim-Philipp Müller + + * tests/check/libs/audiodecoder.c: + tests: audiodecoder: add unit test for tag handling + https://bugzilla.gnome.org/show_bug.cgi?id=679768 + +2015-08-14 17:44:59 +0100 Tim-Philipp Müller + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: fix tag handling + Before we just merged everything in pretty much random ways + ad-hoc instead of keeping state properly. In 0.10 that was + how it worked, but in 1.x the tag events sent should always + reflect the latest state and replace any previous tags. + So save the upstream (stream) tags, and save the tags set + by the decoder subclass with merge mode, and then update + the merged tags whenever either of those two changes. + This slightly changes the behaviour of gst_audio_decoder_merge_tags() + in case it is called multiple times, since now any call replaces + the previously-set tags. However, it leads to much more predictable + outcomes, and also we are not aware of any subclass which sets this + multiple times and expects all the tags set to be merged. + If more complex tag merging scenarios are required, we'll have + to add a new vfunc for that or the subclass has to intercept + the upstream tags itself and send merged tags itself. + https://bugzilla.gnome.org/show_bug.cgi?id=679768 + +2015-08-15 22:23:15 -0300 Thiago Santos + + * ext/vorbis/gstvorbisenc.c: + vorbisenc: use template subset check for accept-caps + It is faster than doing a query that propagates downstream and + should be enough + +2015-08-16 12:20:51 -0300 Thiago Santos + + * ext/vorbis/gstvorbisenc.c: + vorbisenc: use more accurate sink pad template caps + Removes the need for custom caps query handling and makes it more + correct from the beginning on the template. It is a bit uglier + to read because there is 1 entry per channel but makes code easier + to maintain. + +2015-08-15 22:22:41 -0300 Thiago Santos + + * ext/theora/gsttheoraenc.c: + theoraenc: use template subset check for accept-caps + It is faster than doing a query that propagates downstream and + should be enough + +2015-08-16 08:12:01 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/audio/gstaudioencoder.h: + audioencoder: add src and sink query methods + Allows subclasses to do their own handling of GstQuery and still + chain up to the parent class to handle the ones that they don't want + to handle + +2015-08-16 12:53:02 +0200 Edward Hervey + + * gst/playback/gstdecodebin2.c: + decodebin: Fix list iteration + We were using the wrong variable ... + CID #1316477 + +2015-05-04 11:19:28 +0200 Edward Hervey + + * gst/playback/gstdecodebin2.c: + decodebin2: Handle flushing with multiple decode groups + When an upstream element wants to flush downstream, we need to take + all chains/groups into consideration. + To that effect, when a FLUSH_START event is seen, after having it + sent downstream we mark all those chains/groups as "drained" (as if + they had seen a EOS event on the endpads). + When a FLUSH_STOP event is received, we check if we need to switch groups. + This is done by checking if there are next groups. If so, we will switch + over to the latest next_group. The actual switch will be done when + that group is blocked. + https://bugzilla.gnome.org/show_bug.cgi?id=606382 + +2015-04-29 15:56:39 +0200 Edward Hervey + + * gst/playback/gstdecodebin2.c: + decodebin2: Forward event/queries for unlinked groups + When upstream events/queries reach sinkpads of unlinked groups (i.e. + no longer linked to the upstream demuxer), this patch attempts to find + the linked group and forward it upstream of that group. + This is done by adding upstream event/query probes on new group sinkpads + and then: + * Checking if the pad is linked or not (has a peer or not) + * If there is a peer, just let the event/query follow through normally + * If there is no peer, we find a pad to which to proxy it and return + GST_PROBE_HANDLED if it succeeded (allowing the event/query to be properly + returned to the initial called) + Note that this is definitely not thread-safe for the time being + https://bugzilla.gnome.org/show_bug.cgi?id=606382 + +2015-08-15 08:18:59 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + * win32/common/libgstaudio.def: + Revert "audiodecoder: expose default query handling function" + Apparently I forgot how gobject works, there is no need to expose + it directly as one can call it from the parent_class pointer + This reverts commit 8a64592481dab985ca520a5b1cb394a609275c60. + +2015-08-15 08:14:00 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + * win32/common/libgstvideo.def: + Revert "videodecoder: expose default query handling function" + Apparently I forgot how gobject works, there is no need to expose + it directly as one can call it from the parent_class pointer + This reverts commit ea9b6a7e3c4eea512650adf530b7f1acb0eccd84. + +2015-08-15 07:41:24 -0300 Thiago Santos + + * ext/vorbis/gstvorbisdec.c: + vorbisdec: use default pad accept-caps handling + Avoids useless check of downstream caps when handling an + accept-caps query + +2015-08-15 07:40:55 -0300 Thiago Santos + + * ext/theora/gsttheoradec.c: + theoradec: use default pad accept-caps handling + Avoids useless check of downstream caps when handling an + accept-caps query + +2015-08-15 07:31:54 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + * win32/common/libgstaudio.def: + audiodecoder: add option to use default pad accept-caps handling + Add gst_audio_decoder_set_use_default_pad_acceptcaps() to allow + subclasses to make videodecoder use the default pad acceptcaps + handling instead of resorting to the caps query that is, usually, + less efficient and unecessary + API: gst_audio_decoder_set_use_default_pad_acceptcaps + +2015-08-15 07:20:25 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + * win32/common/libgstvideo.def: + videodecoder: add option to use default pad accept-caps handling + Add gst_video_decoder_set_use_default_pad_acceptcaps() to allow + subclasses to make videodecoder use the default pad acceptcaps + handling instead of resorting to the caps query that is, usually, + less efficient and unecessary + API: gst_video_decoder_set_use_default_pad_acceptcaps + +2015-08-15 23:33:14 +1000 Jan Schmidt + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: Make stats creation threadsafe, fix a CRITICAL + Use the object lock to protect the internal segment when updating + against access from getting the stats property. + Fix a critical in gst-inspect or when retrieving the stats + before any segment has arrived by checking whether the + segment has been initted.. + +2015-08-12 03:00:15 +1000 Jan Schmidt + + * gst/typefind/gsttypefindfunctions.c: + typefind: Make the H.264 typefind a tiny bit more lenient. + When we see prefix NALs before a Subset SPS has been spotted, + it might just be because the stream was truncated at the + start, so don't count those as either 'bad' or 'good' packets. + +2015-08-14 18:43:03 +0200 George Kiagiadakis + + * gst-libs/gst/app/gstappsink.c: + appsink: unref the preroll buffer and cleanup the segments on stop() + Just for consistency. No need to keep data around. + +2015-08-14 18:35:22 +0200 George Kiagiadakis + + * gst-libs/gst/app/gstappsink.c: + appsink: do not update preroll_caps unless the sink is prerolling + Just for consistency with the preroll_segment + +2015-08-14 18:06:03 +0200 George Kiagiadakis + + * tests/check/elements/appsink.c: + tests/appsink: add test to ensure that the segment returned by pull-preroll/sample is correct + https://bugzilla.gnome.org/show_bug.cgi?id=751147 + +2015-06-18 12:30:24 +0200 George Kiagiadakis + + * gst-libs/gst/app/gstappsink.c: + appsink: put the correct segment in the preroll sample + last_segment is only being updated in dequeue_buffer(), + which is only called from _pull_sample(). _pull_preroll() + simply re-uses an old or dummy segment while the actual + one sits and waits in the queue. + https://bugzilla.gnome.org/show_bug.cgi?id=751147 + +2015-08-14 08:59:51 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + * win32/common/libgstvideo.def: + videodecoder: expose default query handling function + Subclasses can use it to select what queries they want to handle + and forward the rest to the default handling function. + API: gst_video_decoder_sink_query_default + https://bugzilla.gnome.org/show_bug.cgi?id=753623 + +2015-08-14 08:58:58 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + * win32/common/libgstaudio.def: + audiodecoder: expose default query handling function + Subclasses can use it to select what queries they want to handle + and forward the rest to the default handling function. + API: gst_audio_decoder_sink_query_default + https://bugzilla.gnome.org/show_bug.cgi?id=753623 + +2015-08-14 11:11:10 +0200 Edward Hervey + + * tests/check/generic/states.c: + check: Rename states unit test + Makes it easier to differentiate from other modules states unit test + +2015-08-14 05:48:31 -0300 Thiago Santos + + * gst/playback/gstplaysinkconvertbin.c: + playsinkconvertbin: remove accept-caps handling + Just let the internal element of the bin do it instead of forcing a + caps query to do it. + +2015-08-13 13:52:17 -0300 Thiago Santos + + * gst/videorate/gstvideorate.c: + videorate: fixate the pixel-aspect-ratio + If the pixel-aspect-ratio is not fixed, try to get it as close + to 1/1 as possible + https://bugzilla.gnome.org/show_bug.cgi?id=748635 + +2015-08-11 15:09:10 +0100 Tim-Philipp Müller + + * ext/theora/gsttheoraenc.c: + theoraenc: mention videorate is often needed in docs + https://bugzilla.gnome.org/show_bug.cgi?id=748877 + +2015-08-11 14:10:57 +0200 Sebastian Dröge + + * gst-libs/gst/Makefile.am: + rtp: Depend on the audio library + +2015-07-01 16:25:13 +0200 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbaseaudiopayload.c: + rtpbaseaudiopayload: Copy metadata in the (de)payloader, but only the relevant ones + The payloader didn't copy anything so far, the depayloader copied every + possible meta. Let's make it consistent and just copy all metas without + tags or with only the audio tag. + https://bugzilla.gnome.org/show_bug.cgi?id=751774 + +2015-08-10 22:03:48 +0200 Joan Pau Beltran + + * gst/videorate/gstvideorate.c: + videorate: add support for bayer formats + Since the videorate element just duplicates or drops frames + to achieve the desired framerate, it can accept video/x-bayer media + (in any format), which are not present in the current caps. + Just add "video/x-bayer(ANY);" to the caps of the static pad template + (fixing line style to pass the indent commit hook). + https://bugzilla.gnome.org/show_bug.cgi?id=753483 + +2015-08-05 15:32:54 -0400 Nicolas Dufresne + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + basedepayloader: Don't re-timestamp with running-time + There was a confusion, six depayloaders where passing through the + timestamp while the base class was re-timestamping to running + time. This inconstancy has been unnoticed has in most use cases + the incoming segment is [0, inifnity] in which case timestamps are + the same as running time. With DTS/PTS shifting added (to avoid + negative values) and pcapparse sending a different segment this + started being an issue. + https://bugzilla.gnome.org/show_bug.cgi?id=753037 + +2015-08-10 09:49:19 -0300 Thiago Santos + + videoencoder: remove empty line to make g-i-scanner happy + gstvideoencoder.h:228: Warning: GstVideo: "@transform_meta" + parameter unexpected at this location: + * @transform_meta: Optional. Transform the metadata on ... + +2015-08-10 08:17:09 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: documentation cleanup + Remove some whitespace and break lines longer than 80 columns + +2015-08-10 00:21:42 -0300 Thiago Santos + + * tests/check/libs/audiodecoder.c: + tests: audiodecoder: add test to make sure gap is pushed before segment + https://bugzilla.gnome.org/show_bug.cgi?id=753360 + +2015-08-09 23:23:05 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + * tests/check/libs/videodecoder.c: + videodecoder: push pending events before gap + Push all pending events before pushing the gap. This ensures the + segment is pushed before the gap so it can be properly translated + to the running time + Includes unit test. + https://bugzilla.gnome.org/show_bug.cgi?id=753360 + +2015-07-30 16:39:03 -0400 Olivier Crête + + * ext/ogg/gstoggdemux.c: + oggdemux: Set chain pointers to NULL + Otherwise, they will refer to freed memory + https://bugzilla.gnome.org/show_bug.cgi?id=753078 + +2015-07-31 13:31:56 +0900 Vineeth TM + + * gst/playback/gstdecodebin2.c: + decodebin: fix deadend_details string leak + deadend_details need not be returned when the pad is not a deadend. + Hence checking if res value is TRUE and clearing the string instead of + passing it on + https://bugzilla.gnome.org/show_bug.cgi?id=753088 + +2015-08-04 14:41:10 -0400 Nicolas Dufresne + + * gst/videotestsrc/gstvideotestsrc.c: + videotestsrc: Don't set DTS on buffer + DTS is for encoded data and have no meaning for raw. It better to not + set it, as it's confusing. + https://bugzilla.gnome.org/show_bug.cgi?id=752791 + +2015-07-30 18:43:19 -0400 Olivier Crête + + * ext/ogg/gstoggdemux.c: + oggdemux: Return FLUSHING if pad if flushing + If the initial seek fails because the pad is + flushing, then return GST_FLOW_FLUSHING instead + of an error. + +2015-07-30 15:16:57 +0100 Brian Peters + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtpbuffer: avoid accessing NULL buffer even more + Previous commit was incompletely applied. + https://bugzilla.gnome.org/show_bug.cgi?id=753001 + +2015-07-30 14:30:44 +0100 Brian Peters + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtp: buffer: don't access NULL buffer pointer + unmap will set rtpbuffer->buffer to NULL, so we need to + save the pointer to access it while the RTP buffer is + unmapped. + https://bugzilla.gnome.org/show_bug.cgi?id=753001 + +2015-07-30 12:50:56 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: fix leaks in error code paths + This was introduced when reshuffling the buffer unmaps + in commit bc14cdf529e21356ea7b2c8f34614958a91f7260 + rtp: rtpbasedepayload: add process_rtp_packet() vfunc + Fixes make check-valgrind. + https://bugzilla.gnome.org/show_bug.cgi?id=750235 + +2015-07-28 13:57:20 +0300 Sebastian Dröge + + * ext/pango/gstbasetextoverlay.c: + textoverlay: Query downstream caps for checking if caps features are supported, not just accept-caps + accept-caps is not recursive and might stop at the next downstream element, + while caps queries are generally recursive. The next element might accept any + capsfeatures we want, but that doesn't mean that further downstream it will + also work. + Additionally for the future: + We should probably check if downstream *prefers* the + overlay meta, and only enforce usage of it if we can't handle + the format ourselves and thus would have to drop the overlays. + Otherwise we should prefer what downstream wants here. + +2015-07-23 15:28:42 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetextoverlay: Use the extents rectangle for positioning + the extents rectangle is what you need to know to properly position + a buffer that has been rendered in a surface of the ink rectangle + size. This patch make the placement on par with the placement we had + before without having to over allocate. + This patch also enable placement for vertical rendering. Note that + the halginement, valighment and line-alignment default are set to + the previous default when this property is set. This is for backward + compatibility, you can change the value after setting vertical render. + https://bugzilla.gnome.org/show_bug.cgi?id=728636 + +2015-07-23 15:19:47 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Fix clipping issues + This patch uses the ink rectangle in order to compute the size + of the surface require to render. It also correctly compute the + transformation matrix as the ink_rect position might not be at + 0, 0. Additionally, shadow_offset and outline_offset (which is + in fact the diameter of a dot, not a really an offset) is now + taken into account. Redundant matrix operation has been removed + for the vertical rendering. + Take note that the matrix operation in cairo are excuted in + reverse order. + https://bugzilla.gnome.org/show_bug.cgi?id=728636 + +2015-07-24 10:15:21 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + tools: gst-play: seek at least in steps of a second + In case of very short files we might end up seeking in + steps of a fraction of a second, which is silly and gives + the impression that seeking doesn't actually work. Make + minimum seek step a second instead. + +2015-07-22 16:19:48 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Improve further the negotiation function + * Only send the caps event once if the query had support for the + overlay composition meta. + * Only do the allocation query if it is supported through caps. + * Send overlay_caps before doing allocation query rather then normal + caps + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-22 20:50:10 +0200 Rico Tzschichholz + + * ext/pango/Makefile.am: + basetextoverlay: Add missing linking against -lm + +2015-07-21 18:40:59 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetextoverlay: Ensure meta coordinate are in stream scale + The GstVideoOverlayComposition meta coordinates should always be + in stream scale, regardless of the window size downstream. This + way the sink can always scale the composition if the window size + have changed after a buffer (with his meta) was rendered before. + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-21 14:12:41 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetextoverlay: Reorder and cleanup class attribute + Also add a minimum amount of comment so we can understand what + is doing what. + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-15 21:56:17 +0300 Ville Skyttä + + * gst/typefind/gsttypefindfunctions.c: + typefind: Treat *.umx (Unreal Music Package) as audio/x-mod + https://bugzilla.gnome.org//show_bug.cgi?id=752436 + +2015-07-20 16:25:10 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Fix upstream composition handling + We need to update the render when upstream composition changes + or if it was removed. + http://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-20 16:20:24 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Clear reconfigure flags before negotation + This avoids negotiating twice. Current the _setcaps() patch does + not clear the initial reconfigure flags, which lead to systematic + double renegotiation. + http://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-20 15:55:07 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetestoverlay: Always query window dimension + Remove the optimization to skip allocation query so we can + always have the latest window size information. Also, correctly + deal with the case where there is no window size information. + http://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-20 15:11:06 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Send caps before doing allocation query + This is currently a limitation of BaseTransform base class. Which means + pretty much every filters out there. + http://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-06-18 06:31:00 +0200 Lubosz Sarnecki + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Log GstVideoOverlayComposition negotiation + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-03-25 14:10:10 +0100 Lubosz Sarnecki + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetextoverlay: Receive window size event and adjust rendering + * cache window size event and update handle ratio + * init width with 1, don't use 0 + * don't update overlay when receiving same window size + * receive window size from allocation query + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-03-19 17:59:16 +0100 Lubosz Sarnecki + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetestoverlay: Pass down meta buffers from upstream that supports GstVideoOverlayComposition + This makes pipelines with multiple textoverlay elements possible. + The meta data is collected from the upstream textoverlay element, + merged into a new GstVideoOverlayComposition and passed down downstream. + https://bugzilla.gnome.org/show_bug.cgi?id=751157 + +2015-07-10 12:49:01 -0400 Nicolas Dufresne + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + depayloader: Use input segment start + When there is no clock_base provided, the start position is + set to 0 instead of the original segment start value. This + would break synchronization if start was not 0. + https://bugzilla.gnome.org/show_bug.cgi?id=752228 + +2015-07-16 21:26:30 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: add DASH MPD typefinder + Moved from dashdemux plugin in -bad. + +2015-07-16 10:07:45 +0900 Vineeth T M + + * tests/examples/seek/jsseek.c: + jsseek: fix memory leaks + ctx, list and visual_entries are not being freed + resulting in memory leaks + https://bugzilla.gnome.org/show_bug.cgi?id=752454 + +2015-07-16 17:15:33 +0100 Tim-Philipp Müller + + * ext/ogg/gstogmparse.c: + * ext/pango/gsttextrender.c: + * gst/subparse/gstsubparse.c: + * gst/videoconvert/gstvideoconvert.c: + Update mailing list address from sourceforge to freedesktop + +2015-07-16 10:54:29 +0100 Tim-Philipp Müller + + * tools/gst-device-monitor.c: + tools: gst-device-monitor: fix props leak + CID 1311942 + +2015-07-15 18:22:28 +0200 Wim Taymans + + * tools/gst-device-monitor.c: + device-monitor: print device properties + +2015-07-15 12:45:10 +0200 Wim Taymans + + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/gstvideopool.c: + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-resampler.c: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/videooverlay.c: + * gst/videoscale/gstvideoscale.c: + * gst/videotestsrc/videotestsrc.c: + video: improve logging + Add logging categories for most video objects. + Remove some useless debug lines in video-info and videotestsrc. + Add a performance debug line in the video scaler. + +2015-07-15 12:46:07 +0900 Vineeth TM + + * tests/examples/seek/jsseek.c: + jsseek: fix tag list leak + tags are being leaked while updating the streams in jsseek + https://bugzilla.gnome.org/show_bug.cgi?id=752400 + +2015-07-15 10:50:46 +0900 Vineeth TM + + * tests/examples/playback/playback-test.c: + playback-test: fix tag list leak + tags are being leaked while updating the streams in playback-test + https://bugzilla.gnome.org/show_bug.cgi?id=752397 + +2015-07-14 17:17:34 -0400 Olivier Crête + + * gst-libs/gst/rtsp/gstrtsptransport.h: + rtsp: Include generated enum types in gstrtsptransport.h + GST_TYPE_RTSP_LOWER_TRANS used to be defined in there, not + including the generated file makes older gst-p-good fail to build, + so it constitues an API break. + +2015-07-14 15:58:43 +0200 Wim Taymans + + * gst/tcp/gstsocketsrc.c: + * gst/tcp/gstsocketsrc.h: + socketsrc: add caps property + Add caps property that allows the src to easily negotiate a format. + +2015-07-14 13:00:03 +0900 Vineeth T M + + * tests/examples/playback/playback-test.c: + playback-test: fix memory leak + context during main and filter list during init + visualization are not being freed resulting in memory leak + and app->vis_entries + https://bugzilla.gnome.org/show_bug.cgi?id=752359 + +2015-07-14 00:03:10 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: only try to expose complete groups + When switching to a new chain it might be that this new chain + is not yet ready to be exposed so check it before exposing. + Can happen with mpegts that might delay adding pads or pushing data + until it has found the PMT/PAT/PCR and that may take a while depending + on the stream. + It happened frequently with HLS: + http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch1/appleman.m3u8 + +2015-07-14 00:02:40 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: fix typo + Hided -> hid + +2015-05-27 18:55:20 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * gst-libs/gst/rtp/gstrtpbasedepayload.h: + rtp: rtpbasedepayload: add process_rtp_packet() vfunc + Add process_rtp_packet() vfunc that works just like the + existing process() vfunc only that it takes the GstRTPBuffer + that the base class has already mapped (with MAP_READ), + which means that the subclass doesn't have to map it again, + which allows more performant processing of input buffers + for most RTP depayloaders. + https://bugzilla.gnome.org/show_bug.cgi?id=750235 + +2015-07-10 11:53:24 +0300 Sebastian Dröge + + * gst/playback/gstplaysink.c: + playsink: Require the streamvolume interface on the sink when using the sink's volume/mute properties + If the sink has properties named volume and mute, we have no idea about their + meaning. The streamvolume interface standardizes the meaning. + In the case of osxaudiosink for example, the current volume property has a + range of 0.0 to 1.0, but we need 0.0 to 10.0 or similar. Also osxaudiosink + has no mute property. As such, the volume element should be used here instead. + https://bugzilla.gnome.org/show_bug.cgi?id=752156 + +2015-07-09 10:47:20 -0400 Nicolas Dufresne + + * gst-libs/gst/video/video-frame.h: + doc/build: Fix doc typos + This minor update should workaround a build system bug. While the + makefile has been updated to generate more enum type, there is nothing + that updates the header and would lead to the generated code to be + produced again. This minor doc fix should ensure no one get a build with + missing symbols. + +2015-07-09 17:20:55 +0300 Sebastian Dröge + + * win32/common/libgstvideo.def: + Revert "win32 def: Remove video flags symbol that don't exist" + This reverts commit b20cc6a02a007521eabceeceb60356e5a252f38a. + They are actually there in the autogenerated enum header/source file. + +2015-07-09 10:15:11 -0400 Nicolas Dufresne + + * win32/common/libgstvideo.def: + win32 def: Remove video flags symbol that don't exist + There has been a some refactoring and these symbols don't exist anynmore. + So remove it from the win32 def. This should fix distcheck. + +2015-07-07 19:56:52 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: fix typo in comment + +2015-07-07 15:05:59 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasepayload: fix possible segment event leak + Need to clear it when shutting down, not when starting up. + Fixes leak in rtp-payloading unit test. + +2015-07-07 22:23:57 +0900 Hyunjun Ko + + * gst-libs/gst/audio/gstaudiometa.c: + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/video-overlay-composition.c: + video/audio meta: transform_func: return FALSE if not supported or failed + https://bugzilla.gnome.org/show_bug.cgi?id=751778 + +2015-07-07 19:55:44 +0900 Vineeth T M + + * sys/xvimage/xvimagesink.c: + xvimagesink: refactor to use gst_pad_push_event + Right now navigation events are being sent via gst_pad_send_event + after getting the peer pad of the sinkpad. + But the same functionality can be done using gst_pad_push_event + without need of getting peer pad in xvimagesink. + https://bugzilla.gnome.org/show_bug.cgi?id=752059 + +2015-07-07 14:32:25 +0300 Sebastian Dröge + + * gst-libs/gst/video/Makefile.am: + * win32/common/libgstvideo.def: + video: Add some more GTypes for enums + +2015-07-02 07:36:12 +0200 Tobias Mueller + + * gst-libs/gst/video/video-scaler.c: + GstVideoScaler: Initialised scaling functions to get rid of compiler messages + E.g. + video-scaler.c: In function 'gst_video_scaler_horizontal': + video-scaler.c:1332:3: error: 'func' may be used uninitialized in this function [-Werror=maybe-uninitialized] + func (scale, src, dest, dest_offset, width, n_elems); + ^ + video-scaler.c: In function 'gst_video_scaler_vertical': + video-scaler.c:1373:3: error: 'func' may be used uninitialized in this function [-Werror=maybe-uninitialized] + func (scale, src_lines, dest, dest_offset, width, n_elems); + ^ + GCC's analyses seem to be correct, for the simple fact that if you pass + get_functions a known format, but no hscale or vscale, it'll return + True without having done anything. + Some callers check for the scale values to be not NULL, but then + hscale->resampler.max_taps could return 0. + A different approach to the one presented in this patch is to check + for those max_taps, too, before calling get_functions. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=752051 + +2015-07-07 19:45:43 +0900 Vineeth T M + + * sys/ximage/ximagesink.c: + ximagesink: Post navigation events as message on the bus + post unhandled events to bus, so that + application can utilise the same if needed + https://bugzilla.gnome.org/show_bug.cgi?id=752043 + +2015-07-07 19:35:40 +0900 Vineeth T M + + * sys/ximage/ximagesink.c: + ximagesink: fix navigation event leak + Create event only when pad is created + and send the event to pad. + https://bugzilla.gnome.org/show_bug.cgi?id=752041 + +2015-07-07 09:31:01 +0900 Vineeth TM + + * sys/xvimage/xvimagesink.c: + xvimagesink: fix pad memory leak + pad is not being freed when xwindow is not created + https://bugzilla.gnome.org/show_bug.cgi?id=752042 + +2015-07-07 08:53:09 +0900 Vineeth TM + + * tools/gst-play.c: + gst-play: fix memory leak + In gst-play, for GST_MESSAGE_ELEMENT bus message, + event is being allocated through + gst_navigation_message_parse_event, but not freed. + https://bugzilla.gnome.org/show_bug.cgi?id=752040 + +2015-07-03 21:48:52 +0200 Stefan Sauer + + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * sys/ximage/ximage.c: + * sys/ximage/ximagepool.c: + * sys/ximage/ximagepool.h: + * sys/ximage/ximagesink.c: + * sys/ximage/ximagesink.h: + * sys/xvimage/xvcontext.c: + * sys/xvimage/xvimage.c: + * sys/xvimage/xvimagepool.c: + * sys/xvimage/xvimagesink.c: + * sys/xvimage/xvimagesink.h: + x/xv_image_sink: rename for consitency + Insert '_' to match the CamelCase. This is needed so that the plugin docs can + guess the names from the type name. + +2015-07-03 21:35:32 +0200 Stefan Sauer + + * docs/plugins/gst-plugins-base-plugins-docs.sgml: + docs: update master doc for plugins + +2015-07-06 10:05:53 -0300 Thiago Santos + + * gst/typefind/gsttypefindfunctions.c: + typefind: also check moof to recognize video/quicktime + Helps recognizing fragmented files with the right type + +2015-07-06 15:36:07 +0300 Sebastian Dröge + + * docs/libs/gst-plugins-base-libs-sections.txt: + * win32/common/libgstvideo.def: + docs: Add new symbols to the docs and .def files + +2015-07-06 12:53:15 +0300 Sebastian Dröge + + * gst-libs/gst/audio/audio-info.h: + * gst-libs/gst/video/video-info.h: + {audio,video}info: Add GST_TYPE_{AUDIO,VIDEO}_INFO macros + +2015-07-06 11:36:58 +0200 Marcin Kolny + + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + video-info: implement GstVideoInfo as boxed type + GstVideoInfo usually is created on the stack, but boxed type can be useful + for bindings. + https://bugzilla.gnome.org/show_bug.cgi?id=752011 + +2015-07-02 20:50:00 +0200 Stian Selnes + + * gst-libs/gst/rtp/gstrtcpbuffer.c: + * tests/check/libs/rtp.c: + rtcpbuffer: Fix validation of packets with padding + The padding (if any) is included in the length of the last packet, see + RFC 3550. + Section 6.4.1: + padding (P): 1 bit + If the padding bit is set, this individual RTCP packet contains + some additional padding octets at the end which are not part of + the control information but are included in the length field. The + last octet of the padding is a count of how many padding octets + should be ignored, including itself (it will be a multiple of + four). + Section A.2: + * The padding bit (P) should be zero for the first packet of a + compound RTCP packet because padding should only be applied, if it + is needed, to the last packet. + * The length fields of the individual RTCP packets must add up to + the overall length of the compound RTCP packet as received. + https://bugzilla.gnome.org/show_bug.cgi?id=751883 + +2015-07-01 17:09:35 +0200 Stian Selnes + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Fix setting default pixel-aspect-ratio + It's needed to check if pixel-aspect-ratio exists before fixating. + It does not exist if input caps is not set yet and allowed caps + does not contain pixel-aspect-ratio (e.g. when using GST_VIDEO_CAPS_MAKE) + https://bugzilla.gnome.org/show_bug.cgi?id=751932 + +2015-07-03 21:58:04 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From f74b2df to 9aed1d7 + +2015-07-03 21:16:27 +0200 Stefan Sauer + + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * ext/cdparanoia/gstcdparanoiasrc.h: + * gst/adder/gstadder.h: + * gst/tcp/gstmultisocketsink.h: + docs: order and canonicalize the -sections.txt file + Have all sections in alphabetical order. Also make the macro order consistent. + This is a preparation for generating the file. Remove GET_CLASS macro for + some elements, since it is not used and the header is not installed. + +2015-07-03 21:09:29 +0200 Stefan Sauer + + * ext/cdparanoia/gstcdparanoiasrc.h: + cdparanoiasrc: remove unused defines + +2015-07-03 21:08:03 +0200 Stefan Sauer + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/gstvideoscale.h: + videoscale: fix debug categories + Use a local category for the default category and fix the import for the + performance category. + +2015-07-02 10:47:45 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Fix bug with unused upstream_has_meta + The intention was to skip the allocation query if upstream has decided + to use the overlay meta feature in the caps. We can safely assume that + upstream have done that query already before making this decision. This + is an optimization since doing allocation queries is relatively + expensive. + CID #1308943 + +2015-07-02 10:27:39 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + Revert "basetextoverlay: remove dead code" + This reverts commit e863e5f8a98ceec0ec0bd24274bbae8795e0ab75. + +2015-07-02 14:52:47 +0100 Luis de Bethencourt + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: remove dead code + upstream_has_meta is set to FALSE and never changed. The two checks for if + upstream_has_meta will never go to the true branch. Removing the boolean + and the true branches of these checks. + CID #1308943 + +2015-07-02 13:15:58 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: Don't try to get buffers from an empty adapter + +2015-07-01 10:58:07 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + {audio,video}{en,de}oder: Also copy POOL metas and make sure to copy over metas when creating subbuffers + POOL meta just means that this specific instance of the meta is related to a + pool, a copy should be made when reasonable and the flag should just not be + set in the copy. + +2015-06-29 18:00:17 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + audiodecoder: Add transform_meta() vfunc with default implementation + The default implementation copies all metadata without tags, and metadata + with only the audio tag. Same behaviour as in GstAudioFilter. + https://bugzilla.gnome.org/show_bug.cgi?id=742385 + +2015-06-29 17:38:38 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/audio/gstaudioencoder.h: + audioencoder: Add transform_meta() vfunc with default implementation + The default implementation copies all metadata without tags, and metadata + with only the audio tag. Same behaviour as in GstAudioFilter. + https://bugzilla.gnome.org/show_bug.cgi?id=742385 + +2015-06-29 15:58:38 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Add transform_meta() vfunc with default implementation + The default implementation copies all metadata without tags, and metadata + with only the video tag. Same behaviour as in GstVideoFilter. + This currently does not work if the ::parse() vfunc is implemented as all + metas are getting lost inside GstAdapter. + https://bugzilla.gnome.org/show_bug.cgi?id=742385 + +2015-06-29 13:59:25 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/gstvideoencoder.h: + videoencoder: Add transform_meta() vfunc with default implementation + The default implementation copies all metadata without tags, and metadata + with only the video tag. Same behaviour as in GstVideoFilter. + https://bugzilla.gnome.org/show_bug.cgi?id=742385 + +2015-06-30 10:37:27 +0200 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbaseaudiopayload.c: + rtpbaseaudiopayload: Don't copy memory if not needed, just append payload to the RTP buffer + +2015-06-30 07:26:00 +0900 danny song + + * gst/playback/gstplaybin2.c: + playbin: remove unnecessary break + https://bugzilla.gnome.org/show_bug.cgi?id=751690 + +2015-06-29 16:16:06 +0100 Luis de Bethencourt + + * gst-libs/gst/video/video-scaler.c: + videoscaler: remove check for below zero for unsigned value + CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative + number since it is a division of an unsigned integer (i). Removing that check + and only checking if it is bigger than max and setting it appropriately. + CID #1308950 + +2015-06-29 13:06:59 +0200 Sebastian Dröge + + * gst/audioresample/gstaudioresample.c: + audioresample: Also copy metas if their API has no tags attached to it + This is the default basetransform behaviour, being more strict than that + is not really useful. + +2015-06-29 13:06:49 +0200 Sebastian Dröge + + * gst/audioconvert/gstaudioconvert.c: + audioconvert: Also copy metas if their API has no tags attached to it + This is the default basetransform behaviour, being more strict than that + is not really useful. + +2015-06-29 13:06:33 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiofilter.c: + audiofilter: Also copy metas if their API has no tags attached to it + This is the default basetransform behaviour, being more strict than that + is not really useful. + +2015-06-29 13:05:54 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideofilter.c: + videofilter: Also copy metas if their API has no tags attached to it + This is the default basetransform behaviour, being more strict than that + is not really useful. + +2015-06-25 00:04:11 +0200 Sebastian Dröge + + * configure.ac: + Back to development + +=== release 1.5.2 === + +2015-06-24 23:24:01 +0200 Sebastian Dröge + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-app.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-encoding.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-videoconvert.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * gst-plugins-base.doap: + * win32/common/_stdint.h: + * win32/common/config.h: + * win32/common/video-enumtypes.c: + * win32/common/video-enumtypes.h: + Release 1.5.2 + +2015-06-24 22:49:29 +0200 Sebastian Dröge + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + Update .po files + +2015-06-24 11:14:21 +0200 Sebastian Dröge + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + po: Update translations + +2015-06-17 18:03:09 +0800 Song Bing + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Unblock EOS wait when track switching. + sink_event () will blocked on EOS event. which will cause can't + send event when switch EOS track to non-EOS one. + https://bugzilla.gnome.org/show_bug.cgi?id=750761 + +2015-06-22 20:54:18 +0200 Sebastian Dröge + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Don't wait for sparse streams when doing stream switches + Their stream-start event might come a bit later, like just before the first + buffer... and queues might run full before that happens. + +2015-06-22 20:29:52 +0200 Sebastian Dröge + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Add some more debug output + +2015-06-22 20:17:56 +0200 Sebastian Dröge + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Reset group start time when flushing + We reset the group start time to the running time of the start of the other + streams that are not flushed. This fixes seeking in gapless mode after the + first track has played. + https://bugzilla.gnome.org/show_bug.cgi?id=750013 + +2015-06-22 19:51:32 +0200 Sebastian Dröge + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: Only drop everything after the ; of a session header in requests + For responses it is actually allowed and used to signal the timeout to the + client! + https://bugzilla.gnome.org/show_bug.cgi?id=736267 + +2015-06-18 17:38:09 +0800 Lyon Wang + + * gst-libs/gst/audio/gstaudioringbuffer.c: + audioringbuffer: Fix alaw/mulaw channel positions + For alaw/mulaw we should also try to initialize the channel positions in the + ringbuffer's audio info. This allow pulsesink to directly use the channel + positions instead of using the default zero-initialized ones, which doesn't + work well. + https://bugzilla.gnome.org/show_bug.cgi?id=751144 + +2015-06-22 16:53:06 +0200 Wim Taymans + + * tests/check/libs/libsabi.c: + tests: fix cpp directives + +2015-06-22 15:59:42 +0200 Wim Taymans + + * tests/check/Makefile.am: + * tests/check/libs/libsabi.c: + * tests/check/libs/struct_ppc64.h: + tests: add PPC64 abi struct sizes + +2015-06-22 14:51:07 +0200 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Reset suburi also when receiving an error message from the sub uridecodebin + http://bugzilla.gnome.org/show_bug.cgi?id=751118 + +2015-06-17 10:20:54 -0500 Brijesh Singh + + * gst/playback/gstplaybin2.c: + playbin: free group->suburi on failure + If suburidecodebin is failed to negotiate (e.g file does not exist) + then free internal suburi variable so that 'current-suburi' property + returns correct status. + https://bugzilla.gnome.org/show_bug.cgi?id=751118 + +2015-06-15 16:08:10 +0200 Guillaume Desmottes + + * ext/ogg/gstoggdemux.c: + oggdemux: set building_chain to NULL when deactivating chain + The chain is about to be invalidated so we shouldn't keep it around. + Prevent a double free crash when the demuxer is being finalized. + https://bugzilla.gnome.org/show_bug.cgi?id=751000 + +2015-06-19 19:51:25 +0900 Vineeth T M + + * tools/gst-play.c: + tools: gst-play: fix seeking issue + For positive seeking segment.stop value will be -1, + when we change rate to -1, then the stop value will be udpated + with the current position. And then again if we change rate to 1, + the segment.stop value does not get updated and remains as position + where we last changed rate to -1. Hence playback stops at that point. + In case of positive rates, call gst_element_new_seek with correct values + https://bugzilla.gnome.org/show_bug.cgi?id=751213 + +2015-06-18 21:02:48 -0400 Nicolas Dufresne + + * gst-libs/gst/rtp/gstrtphdrext.c: + doc: Fix gsttrtphdrext section name + +2015-06-18 18:23:45 -0400 Nicolas Dufresne + + * win32/common/libgstvideo.def: + video: Add missing new symbol to win32 def file + Fixes make distcheck + +2015-06-19 02:19:12 +1000 Jan Schmidt + + * docs/libs/gst-plugins-base-libs-sections.txt: + Add gst_video_multiview_guess_half_aspect() to the docs + +2015-06-15 16:04:55 +1000 Jan Schmidt + + * gst-libs/gst/video/video-multiview.c: + * gst-libs/gst/video/video-multiview.h: + multiview: Add gst_video_multiview_guess_half_aspect() + Add a utility function that, given a video size and a + packed stereoscopic mode, attempts to guess if the video + is packed at half resolution per view or not, since + very few videos provide the information. + +2015-06-17 17:09:46 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: make sure we draw enough border for YUY2 formats + Round width up to 2 so that we draw all border pixels for YUY2 formats + +2015-06-17 16:43:03 +0200 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix scaling of odd width for YUY2 formats + We need to scale groups of 4 bytes for YUY2 formats so round up to 4. + It's possible that there is no Y byte for the last pixel so make sure + we clamp correctly. + +2015-06-17 10:02:08 +0200 Thibault Saunier + + * gst-libs/gst/pbutils/gstdiscoverer-types.c: + discoverer: Fix a wrong naming in the documentation + gst_discoverer_stream_get_missing_elements_installer_details does not + exist, one should use gst_discoverer_info_get_missing_elements_installer_details + +2015-06-16 18:04:57 -0400 Nicolas Dufresne + + * gst-libs/gst/app/Makefile.am: + * gst-libs/gst/audio/Makefile.am: + * gst-libs/gst/pbutils/Makefile.am: + * gst-libs/gst/riff/Makefile.am: + * gst-libs/gst/rtp/Makefile.am: + * gst-libs/gst/rtsp/Makefile.am: + * gst-libs/gst/tag/Makefile.am: + * gst-libs/gst/video/Makefile.am: + gi: Use INTROSPECTION_INIT for --add-init-section + This new define was added to common. The new init section fixed + compilation warning found in the init line that was spread across + all files. + +2015-06-16 17:47:24 -0400 Nicolas Dufresne + + * common: + Automatic update of common submodule + From 6015d26 to f74b2df + +2015-06-16 22:32:49 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + tools: gst-play: error out instead of crashing if there's no playbin element + +2015-06-16 16:08:39 -0400 Nicolas Dufresne + + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-dither.c: + * gst-libs/gst/video/video-scaler.c: + gi: Skip Scaler, Chroma, Conveter, Dither constructor + Please box these types before removing the skip mark. + +2015-06-16 16:07:27 -0400 Nicolas Dufresne + + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/video-overlay-composition.c: + gi: Add (transfer none) for various video meta + These method chains gst_buffer_add_meta() which is also transfer + none. + +2015-06-16 15:50:13 -0400 Nicolas Dufresne + + * gst-libs/gst/rtsp/gstrtspconnection.c: + gi: Fix warnings in GstRtsp + * The custom GSource is not boxed (skip for now) + * The comment block has wrong name for _read_socket() + +2015-06-16 15:16:33 -0400 Nicolas Dufresne + + * gst-libs/gst/riff/Makefile.am: + gi: Don't produce gir and typlib for GstRiff + The API does not follow the type naming convention. Re-enable + only if one take the time to box and rename (see (rename-to SYMBOL) + annotation) all types. + +2015-06-16 14:36:44 -0400 Nicolas Dufresne + + * gst-libs/gst/fft/gstfftf32.c: + * gst-libs/gst/fft/gstfftf64.c: + * gst-libs/gst/fft/gstffts16.c: + * gst-libs/gst/fft/gstffts32.c: + gi: Skip fft constructor for now + These types have never been boxed, hence cannot be used + safely in interpreted languages. This fixes warnings. + +2015-06-16 14:34:04 -0400 Nicolas Dufresne + + * gst-libs/gst/audio/audio-info.c: + * gst-libs/gst/audio/gstaudiobasesink.h: + * gst-libs/gst/audio/gstaudiometa.c: + gi: Fix warnings in libgstaudio + * Duplicate section + * Miss-named parameter + * Missing transfer none annotation for meta + +2015-05-27 12:20:19 +0300 Lazar Claudiu + + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstbasetextoverlay.h: + basetextoverlay: add "draw-shadow" and "draw-outline" properties + https://bugzilla.gnome.org/show_bug.cgi?id=749823 + +2015-06-13 13:41:35 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: fix gtk-doc chunk for new function + +2015-05-12 14:12:52 -0400 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Rewrite negotiation method + This cleanup the negotiation function by properly splitting the probe + and the decisions. This allow handling correctly pipeline where upstream + caps have special memory type. An example pipeline is: + gltestsrc ! textoverlay text=bla ! fakesink + The upstream caps will be memory:GLMemory, which isn't supported by the + blitter. + https://bugzilla.gnome.org/show_bug.cgi?id=749243 + +2015-06-05 14:30:12 -0400 Nicolas Dufresne + + * sys/xvimage/xvimagesink.c: + xvimagesink: Don't share internal pool + Sharing the internal pool results in situation where the pool may have + two upstream owners. This creates a race upon deactivation. Instead, + always offer a new pool, and keep the internal pool internal in case + we absolutely need it. + https://bugzilla.gnome.org/show_bug.cgi?id=748344 + +2015-06-05 14:28:41 -0400 Nicolas Dufresne + + * sys/ximage/ximagesink.c: + ximagesink: Don't share internal pool + Sharing the internal pool results in situation where the pool may have + two upstream owners. This create a race upon deactivation. Instead, + always offer a new pool, and keep the internal pool internal in case + we absolutely need it. + https://bugzilla.gnome.org/show_bug.cgi?id=748344 + +2014-11-26 21:06:57 +0100 Matej Knopp + + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/gstvideoencoder.h: + * win32/common/libgstvideo.def: + videoencoder: Add gst_video_encoder_set_min_pts() + For streams with reordered frames this can be used to ensure that there + is enough time to accomodate first DTS, which may be less than first PTS + https://bugzilla.gnome.org/show_bug.cgi?id=740575 + +2015-06-12 19:58:34 +0100 Tim-Philipp Müller + + * win32/common/libgstvideo.def: + Update .def file for new API + +2015-06-13 01:35:52 +1000 Jan Schmidt + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Copy multiview-mode, flags and view count from ref info + When copying info from the reference input state, duplicate + all the fields of the video info. The sub-class will have the + chance to override them later. + +2015-06-12 16:57:39 +0200 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: enforce same taps when combining scalers + +2015-06-12 16:52:27 +0200 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: make sure to clamp to max width + When estimating the area that should first be vertically scaled, make + sure we clamp to the max input size or else we get invalid reads. + +2015-06-12 16:47:03 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + video-scaler: Enforce same taps on Y and UV scalers for merged formats + Make sure we have the same number of taps for the Y and UV scalers so + that the scalers can be merged correctly. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=749764 + +2015-06-12 12:50:35 +0530 Arun Raghavan + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtsp: Add a FIXME 2.0 for gst_rtsp_connection_create_from_socket() + There's a couple of redundant arguments from the pre-GIO days. + +2015-06-11 23:32:55 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefinding: check for full UTF-8 BOM in MSS typefinder + https://bugzilla.gnome.org/show_bug.cgi?id=750802 + +2015-06-11 18:14:47 +0200 Philippe Normand + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: UTF-8 MSS Manifest detection support + Check if the first bytes of data contain an UTF-8 BOM. + https://bugzilla.gnome.org/show_bug.cgi?id=750802 + +2015-06-11 16:18:51 +0200 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Check in autoplug_continue against the subtitle factory caps correctly + 6a2f017bfa9cb73c6db65eea0b84b1d5b56febb7 changed it to check the subtitle + factory caps if there is a text-sink but we fail to get its sinkpad. What + actually should be done here is to use the factory caps if there is no + text-sink at all. + https://bugzilla.gnome.org/show_bug.cgi?id=750785 + +2015-06-11 23:01:48 +1000 Jan Schmidt + + * gst/playback/gstplaybin2.c: + playbin: Fix some warnings with clang around multiview enums + There is the GstVideoMultiviewMode enum and the + GstVideoMultiviewFramePacking, which is a subset of the + multiview modes, with the same values as the corresponding + types from the full enum. Do some casts and use the right + times to avoid implicitly using/passing GstVideoMultiviewFramePacking + when a GstVideoMultiviewMode is needed. + +2015-06-11 12:21:08 +1000 Jan Schmidt + + * tests/check/libs/video.c: + tests: Fix video libs test for multiview GstVideoInfo change + The GstVideoInfo struct was changed late in integrating the + multiview changes, and I forgot to run and fix the unit test. + +2015-06-11 11:12:39 +1000 Jan Schmidt + + * gst/playback/gstplaybin2.c: + playbin: Implement multiview frame-packing overrides + Add GstVideoMultiviewFramePacking enum, and the + video-multiview-mode and video-multiview-flags + properties on playbin. + Use a pad probe to replace the multiview information in + video caps sent out from uridecodebin. + This is a part implementation only - for full + correctness, it should also modify caps in caps events, + accept-caps and allocation queries. + https://bugzilla.gnome.org/show_bug.cgi?id=611157 + +2015-06-11 11:12:39 +1000 Jan Schmidt + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/video-frame.h: + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + * gst-libs/gst/video/video-multiview.c: + * gst-libs/gst/video/video-multiview.h: + * gst-libs/gst/video/video.h: + * tests/check/libs/video.c: + * win32/common/libgstvideo.def: + video: Add multiview/stereo support + Add flags and enums to support multiview signalling in + GstVideoInfo and GstVideoFrame, and the caps serialisation and + deserialisation. + videoencoder: Copy multiview settings from reference input state + Add gst_video_multiview_* support API and GstVideoMultiviewMeta meta + https://bugzilla.gnome.org/show_bug.cgi?id=611157 + +2015-06-10 14:33:01 +0200 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbaseaudiopayload.c: + rtpbaseaudiopayload: Use GST_BUFFER_PTS() instead of GST_BUFFER_TIMESTAMP() + +2015-06-10 12:26:38 +0200 Víctor Manuel Jáquez Leal + + * gst/playback/gstplaysink.c: + playsink: fix the channel of color balance element + When traversing the color balance element channel list to find the one that + matches with the playsink proxy, the assignation was set to iterator of the + playsink proxy, not the balance element. Thus, the mapping to the values of + the balance element channel was wrong. + This patch fixes the assignation of the color balance element channel, so the + mapping to the channel of the color balance element is fixed. + https://bugzilla.gnome.org/show_bug.cgi?id=750691 + +2015-06-10 15:50:12 +0900 Vineeth TM + + * gst/playback/gstplaysink.c: + playsink: cannot enable text flag while playing + when text playbin is not enabled in the beginning, then + video_srcpad_stream_synchronizer gets linked to videochain->sinkpad + and when we try to enable text bin during play, since it is already linked to videochain, + text chain does not get linked properly. Hence unlinking the same + before linking to text chain + https://bugzilla.gnome.org/show_bug.cgi?id=748908 + +2015-06-10 09:59:49 +0200 Edward Hervey + + * win32/common/libgstrtsp.def: + win32: Update defs file + +2015-06-05 22:04:24 -0400 Xavier Claessens + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/rtsp/gstrtspconnection.c: + * gst-libs/gst/rtsp/gstrtspconnection.h: + GstRTSPConnection: Add GTlsInteraction support + https://bugzilla.gnome.org/show_bug.cgi?id=750471 + +2015-06-09 21:24:07 +0300 Vivia Nikolaidou + + * tools/gst-play.c: + tools: gst-play: don't print 64 whitespaces next to the time indication + Printing 64 whitespaces to erase the "Paused" message (after \r) would make + it wrap to the next line on shorter terminals. Instead we only print the + amount of spaces needed. Also mark the "Paused" string for translation + while we're at it. + +2015-06-09 14:31:15 +0200 Stefan Sauer + + * Makefile.am: + cruft: add the obsolete tmpl dir to cruft-dirs + +2015-06-09 22:03:37 +1000 Jan Schmidt + + * win32/common/libgstaudio.def: + Update win32 exports + +2013-12-09 18:46:14 +0100 Carlos Rafael Giani + + * ext/alsa/gstalsasink.c: + alsa: report recoverable device failures to base class + This gives custom slave methods in the base class a chance to + resynchronize themselves + Signed-off-by: Carlos Rafael Giani + https://bugzilla.gnome.org/show_bug.cgi?id=708362 + +2013-12-09 17:08:15 +0100 Carlos Rafael Giani + + * gst-libs/gst/audio/gstaudiobasesink.c: + * gst-libs/gst/audio/gstaudiobasesink.h: + audiobasesink: added custom clock slaving method + This new clock slaving method allows for installing a callback that is + invoked during playback. Inside this callback, a custom slaving + mechanism can be used (for example, a control loop adjusting a PLL or an + asynchronous resampler). Upon request, it can skew the playout pointer + just like the "skew" method. This is useful if the clocks drifted apart + too much, and a quick reset is necessary. + Signed-off-by: Carlos Rafael Giani + https://bugzilla.gnome.org/show_bug.cgi?id=708362 + +2015-06-09 11:30:15 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From d9a3353 to 6015d26 + +2015-06-09 10:16:34 +0100 Tim-Philipp Müller + + * tools/gst-play-1.0.1: + * tools/gst-play.c: + tools: gst-play: add shortcuts to switch audio/subtitle/video tracks + +2014-11-05 09:41:36 +0200 Sreerenj Balachandran + + * gst/playback/gstplaybackutils.c: + playback: Skip 'ANY' capsfeature while finding the count of common capsfeatures + https://bugzilla.gnome.org/show_bug.cgi?id=687182 + +2014-11-05 09:40:43 +0200 Sreerenj Balachandran + + * gst/playback/Makefile.am: + * gst/playback/gstplaybackutils.c: + * gst/playback/gstplaybackutils.h: + * gst/playback/gstplaybin2.c: + playback: Add gstplaybackutils.{h,c} to deploy the common subroutines + Bring some of the helper functions in gstplaybin2.c to new files + gstplaybackutils.{h,c} which can be utilized by other files + in gst/playback too. + https://bugzilla.gnome.org/show_bug.cgi?id=687182 + +2015-06-08 23:07:47 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From d37af32 to d9a3353 + +2015-06-08 20:32:02 +0300 Vivia Nikolaidou + + * tools/gst-play.c: + tools: gst-play: sort directory entries + When adding a directory to the playlist, the order would be whatever + g_dir_read_name returned. Sorting these using natural sort order. + https://bugzilla.gnome.org/show_bug.cgi?id=750585 + +2015-06-08 20:17:07 +0100 Tim-Philipp Müller + + * sys/ximage/ximagesink.c: + * sys/xvimage/xvcontext.c: + ximagesink, xvimagesink: fix string leaks when setting class hint + https://bugzilla.gnome.org/show_bug.cgi?id=750455 + +2015-06-08 13:01:43 -0400 Nicolas Dufresne + + * gst-libs/gst/video/video-color.c: + video: Allow using bt2020 by name in colorimetry + As the lookup stops at the first element in the array with a NULL + name, bt2020 could not be used by name. Moving up this entry + fixes the issue. + +2015-06-05 16:01:05 +0100 Luis de Bethencourt + + * sys/ximage/ximagesink.c: + ximagesink: set WM_CLASS of window + Set WM_CLASS of the ximagesink window so window managers can apply rules + based on xprop filtering. + +2015-06-05 15:58:39 +0100 Luis de Bethencourt + + * sys/xvimage/xvcontext.c: + xvimagesink: set WM_CLASS of window + Set WM_CLASS of the xvimagesink window so window managers can apply rules + based on xprop filtering. + +2015-06-07 23:06:08 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From 21ba2e5 to d37af32 + +2015-06-07 18:49:48 +0100 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + libvisual: clean dereferences of private structures + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-06-07 18:23:23 +0100 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + * ext/libvisual/gstaudiovisualizer.h: + libvisual: make private all variable subclasses don't need + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-06-07 17:31:55 +0200 Stefan Sauer + + * common: + Automatic update of common submodule + From c408583 to 21ba2e5 + +2015-06-07 17:00:05 +0200 Stefan Sauer + + * docs/libs/Makefile.am: + * docs/plugins/Makefile.am: + docs: remove variables that we define in the snippet from common + This is syncing our Makefile.am with upstream gtkdoc. + +2015-06-07 17:16:13 +0200 Stefan Sauer + + * autogen.sh: + * common: + Automatic update of common submodule + From 241fcb7 to c408583 + +2015-06-07 16:44:31 +0200 Sebastian Dröge + + * configure.ac: + Back to development + +=== release 1.5.1 === + +2015-06-07 10:04:41 +0200 Sebastian Dröge + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/gst-plugins-base-plugins.hierarchy: + * docs/plugins/gst-plugins-base-plugins.signals: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-app.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-encoding.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-videoconvert.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * gst-plugins-base.doap: + * win32/common/_stdint.h: + * win32/common/config.h: + * win32/common/gstrtsp-enumtypes.c: + * win32/common/gstrtsp-enumtypes.h: + * win32/common/pbutils-enumtypes.c: + * win32/common/pbutils-enumtypes.h: + * win32/common/video-enumtypes.c: + * win32/common/video-enumtypes.h: + Release 1.5.1 + +2015-06-07 09:35:03 +0200 Sebastian Dröge + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + po: Update translations + +2015-06-05 16:44:08 +0200 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtpbasepayload: Always prefer downstream's ssrc suggestion if any + Otherwise ssrc changes via rtpsession's (deprecated!) internal-ssrc property + are not possible anymore. rtpsession was now patched to only suggest an ssrc + if it makes sense to do so. + In 2.0 we should get rid of all the properties that are also negotiated via + caps, the code and behaviour is too confusing otherwise. + https://bugzilla.gnome.org/show_bug.cgi?id=749581 + +2015-06-05 10:16:56 +0200 Sebastian Dröge + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/rtp/gstrtcpbuffer.c: + * win32/common/libgstrtp.def: + rtcpbuffer: Improve documentation of new functions a bit + Also actually add them to the documentation. + +2015-06-03 11:20:35 +0200 Jose Antonio Santos Cadenas + + * gst-libs/gst/rtp/gstrtcpbuffer.c: + * gst-libs/gst/rtp/gstrtcpbuffer.h: + * tests/check/libs/rtp.c: + rtcpbuffer: Update package validation to support reduced size rtcp packets + According to this section of the rfc. + https://tools.ietf.org/html/rfc5506#section-3.4.2 + The validation should be updated to accept more types of RTCP + packages, with this mask change feedback packages will be also + accepted. + Change-Id: If5ead59e03c7c60bbe45a9b09f3ff680e7fa4868 + +2015-06-04 19:03:51 +0200 Mathieu Duponchelle + + * gst/audioresample/gstaudioresample.c: + audioresample: copy metadata that only has the "audio" tag. + https://bugzilla.gnome.org/show_bug.cgi?id=750406 + +2015-06-04 19:00:45 +0200 Mathieu Duponchelle + + * gst-libs/gst/audio/gstaudiofilter.c: + audiofilter: copy metadata that only has the "audio" tag. + https://bugzilla.gnome.org/show_bug.cgi?id=750406 + +2015-06-04 17:59:17 +0200 Mathieu Duponchelle + + * gst/audioconvert/gstaudioconvert.c: + audioconvert: copy metadata that only has the "audio" tag. + https://bugzilla.gnome.org/show_bug.cgi?id=750406 + +2015-05-20 18:16:07 +0200 Mathieu Duponchelle + + * gst-libs/gst/pbutils/gstdiscoverer.c: + discoverer: Serialize the top level DiscovererInfo + Which contains fields such as duration, uri and tags. + https://bugzilla.gnome.org/show_bug.cgi?id=749673 + +2015-06-04 16:31:12 +0200 Sebastian Dröge + + * gst-libs/gst/pbutils/codec-utils.c: + codec-utils: Add AAC channel configurations 11, 12 and 14 and levels 6 and 7 + +2015-06-02 16:14:39 +0200 Edward Hervey + + * tests/check/generic/clock-selection.c: + * tests/check/libs/allocators.c: + * tests/check/libs/audio.c: + * tests/check/libs/fft.c: + * tests/check/libs/navigation.c: + * tests/check/libs/rtp.c: + * tests/check/libs/rtsp.c: + * tests/check/libs/rtspconnection.c: + * tests/check/libs/tag.c: + * tests/check/libs/xmpwriter.c: + * tests/check/pipelines/basetime.c: + * tests/check/pipelines/capsfilter-renegotiation.c: + * tests/check/pipelines/gio.c: + * tests/check/pipelines/simple-launch-lines.c: + * tests/check/pipelines/theoraenc.c: + * tests/check/pipelines/vorbisdec.c: + * tests/check/pipelines/vorbisenc.c: + check: Use GST_CHECK_MAIN () macro everywhere + Makes source code smaller, and ensures we go through common initialization + path (like the one that sets up XML unit test output ...) + +2015-06-02 12:47:50 +0100 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: add description for video/x-cavs caps + https://bugzilla.gnome.org/show_bug.cgi?id=727731 + +2015-06-02 12:28:19 +0200 Edward Hervey + + * win32/common/libgstpbutils.def: + win32: Update def file for new encoding API + +2015-05-29 14:15:31 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtpbuffer: optimise payload mapping for buffers with one memory + Micro-optimisation: if the buffer consist of just one memory, we + know we have already mapped that memory to read the headers, so + no need to map it another time to get to the payload data, we + can just set up the payload data details right there and then + and avoid another map call in gst_rtp_buffer_get_payload(). + Adds up when receiving RTP-payloaded raw video which can easily + be thousands of packets per frame. + +2015-05-21 13:59:55 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * gst-libs/gst/rtp/gstrtpbasedepayload.h: + rtpbasedepayload: provide chain_list function on sink pad + Implement a chain_list function, which avoids lots of locking + compared to the default fallback implementation in GstPad. + We may also want to do some more sophisticated timestamp + tracking here at some point, but for now leave it up to the + jitterbuffer and/or subclasses (in case buffers in the + buffer list have no timestamp set on them, there may only + be a timestamp for the whole list on the first buffer). + This provides the exact same behaviour as the default + fallback implementation. + +2015-05-07 10:26:47 +0200 Thibault Saunier + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/pbutils/encoding-profile.c: + * gst-libs/gst/pbutils/encoding-profile.h: + * gst/encoding/gstencodebin.c: + encodebin: Add a way to enable/disabled a GstEncodingProfile + Summary: + So that the user can easily use the same encoding profile to render + with/without audio/video stream. + API: + gst_encoding_profile_is_disabled + gst_encoding_pofile_set_enabled + https://bugzilla.gnome.org/show_bug.cgi?id=749056 + +2015-05-30 15:34:51 +0100 Luis de Bethencourt + + * tools/gst-play.c: + tools: gst-play: remove unnecessary variable + The second assignment of sret is never used. We can remove the first assignment + and use the value directly instead. + +2015-05-30 08:12:03 +0200 Sebastian Dröge + + * gst-libs/gst/tag/id3v2frames.c: + id3v2frames: Fix compiler warnings + id3v2frames.c:951:20: error: unused variable 'utf16enc' [-Werror,-Wunused-const-variable] + static const gchar utf16enc[] = "UTF-16"; + ^ + id3v2frames.c:952:20: error: unused variable 'utf16leenc' [-Werror,-Wunused-const-variable] + static const gchar utf16leenc[] = "UTF-16LE"; + ^ + id3v2frames.c:953:20: error: unused variable 'utf16beenc' [-Werror,-Wunused-const-variable] + static const gchar utf16beenc[] = "UTF-16BE"; + ^ + +2015-05-30 01:03:46 +1000 Jan Schmidt + + * docs/design/part-stereo-multiview-video.markdown: + part-stereo-multiview-video: Add a section of open design questions + +2015-05-30 00:58:38 +1000 Jan Schmidt + + * gst-libs/gst/video/video-format.h: + video-format: Fix minor docs typo + +2015-03-16 19:37:26 +1100 Jan Schmidt + + * gst/videotestsrc/gstvideotestsrc.h: + videotestsrc: Document the solid-color pattern + +2015-03-16 19:28:35 +1100 Jan Schmidt + + * gst/playback/gstplay-enum.h: + playback: Document GST_PLAY_FLAG_SOFT_COLORBALANCE + +2014-10-09 01:13:29 +1100 Jan Schmidt + + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/gstvideometa.h: + * win32/common/libgstvideo.def: + video: Make gst_buffer_get_video_meta() a real function, Return lowest id + Instead of returning the first video meta found on a buffer, return the + one with the lowest id (which is usually the same thing, except on + multi-view buffers) + +2015-05-29 15:30:41 +0100 Tim-Philipp Müller + + * gst-libs/gst/pbutils/gstdiscoverer.c: + discoverer: don't crash on unknown info types when deserializing + Handle unknown info types when deserializing instead of + dereferencing NULL pointers. + Coverity CID 1302394 + +2015-05-29 13:15:59 +0200 George Kiagiadakis + + * gst-libs/gst/sdp/gstsdpmessage.c: + sdp: prevent the sdp message parser from reading past the end of the buffer + Otherwise, a malformed SDP message could crash the application, + or even maliciously gather data from the memory located after + this buffer... + https://bugzilla.gnome.org/show_bug.cgi?id=750096 + +2015-05-28 19:49:31 +0200 George Kiagiadakis + + * tests/check/elements/videorate.c: + tests: add test for videorate caps renegotiation after a framerate has been calculated and added to caps + The original 0/1 framerate must still be allowed to be configured + on the upstream side of videorate, otherwise future caps renegotiation + is going to fail. + https://bugzilla.gnome.org/show_bug.cgi?id=750032 + +2015-05-28 12:51:35 +0200 George Kiagiadakis + + * gst/videorate/gstvideorate.c: + videorate: update the caps framerate only in the GST_PAD_SINK transform_caps direction + When a stream has a variable framerate, videorate calculates it and + forces it on the output caps. However, the code in _transform_caps() + currently also does that if the transform is going in the opposite + direction (GST_PAD_SRC), so during a renegotiation it tries to force + upstream to use the calculated framerate and it fails. + https://bugzilla.gnome.org/show_bug.cgi?id=750032 + +2015-05-26 08:06:50 -0300 Thiago Santos + + * gst/playback/gstplaysink.c: + playsink: use queue to avoid lock in audiotee audio branches + This part of pipeline is: + tee name=t ! visualizationbin ! streamsynchronizer name=s + t. ! s. + streamsynchronizer might block and it could starve the visualization + branch of the pipeline when it is enabled. + The visualization bin has queues internally but the other branch + that links the audiotee directly to the synchronizer is vulnerable + to block. Adding a queue between "t. ! s." fixes deadlocks. + https://bugzilla.gnome.org/show_bug.cgi?id=749676 + +2015-05-26 13:11:00 +0300 Claudiu Florin Lazar + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: make deltax and deltay properties controllable + This will be more useful once we have absolute direct + control bindings. + https://bugzilla.gnome.org/show_bug.cgi?id=749824 + +2015-05-05 18:01:46 +0200 Guillaume Desmottes + + * ext/ogg/gstoggdemux.c: + oggdemux: fix chain leak + Don't leak the building_chain when destroying. + Fix leaks with the validate.http.playback.reverse_playback.vorbis_theora_1_ogg + scenario. + https://bugzilla.gnome.org/show_bug.cgi?id=748964 + +2015-05-25 22:37:56 +0100 Tim-Philipp Müller + + * gst-libs/gst/tag/id3v2frames.c: + tag: id3v2: fix parsing of UTF-16 text on systems with crippled iconv + Use g_utf16_to_utf8() instead of the more generic g_convert(), so + that we can extract text in UTF-16 format even on embedded systems + with crippled iconv support. + This code path is exercised by the id3demux test_unsync_v23 + check in gst-plugins-good. + https://bugzilla.gnome.org/show_bug.cgi?id=741144 + +2015-05-25 22:37:06 +0100 Tim-Philipp Müller + + * .gitignore: + Add new generated rtp enum files to .gitignore + +2015-05-24 18:58:21 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + tools: gst-play: keep configured playback rate and trick mode when seeking + Instead of resetting rate to 1.0 + +2015-05-24 18:47:25 +0100 Tim-Philipp Müller + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hr.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/lt.po: + * po/lv.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + po: update for new translatable strings + +2015-05-24 18:46:21 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + tools: gst-play: mark more strings for translation + +2015-05-23 01:50:11 +0900 danny song + + * tools/gst-play.c: + tools: gst-play: add keyboard shortcut help + https://bugzilla.gnome.org/show_bug.cgi?id=749740 + +2015-05-23 12:02:26 +0100 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: add back videoscale unit test + Has been removed in 835422b2 as part of porting + things over to the new videoscale API. + +2015-05-21 12:10:40 +0100 Tim-Philipp Müller + + * tools/gst-play-1.0.1: + * tools/gst-play.c: + tools: gst-play: enable interative mode by default + And change --interactive option to --no-interactive. + +2015-05-21 13:07:50 +0300 Sebastian Dröge + + * gst-libs/gst/rtp/Makefile.am: + rtp: Clean G-I files on make clean too + +2015-05-20 16:23:46 +0300 Sebastian Dröge + + * gst-libs/gst/rtp/Makefile.am: + rtp: Add builddir to the include path for gobject-introspection + And also add missing headers/sources + https://bugzilla.gnome.org/show_bug.cgi?id=749632 + +2015-05-20 15:40:53 +0300 Sebastian Dröge + + * win32/common/libgstrtp.def: + * win32/common/libgstrtsp.def: + win32: Update exports + +2015-05-20 13:36:30 +0300 Sebastian Dröge + + * gst-libs/gst/rtp/Makefile.am: + * gst-libs/gst/rtp/gstrtpdefs.h: + * gst-libs/gst/rtp/rtp.h: + rtp: Add GstRTPProfile enum + +2015-05-20 13:35:13 +0300 Sebastian Dröge + + * gst-libs/gst/rtsp/gstrtsptransport.h: + rtsp: Add FIXME 2.0 comment about GstRTSPTransport being an enum instead of flags + +2015-05-20 13:33:42 +0300 Sebastian Dröge + + * gst-libs/gst/rtsp/Makefile.am: + * gst-libs/gst/rtsp/gstrtsptransport.c: + * gst-libs/gst/rtsp/gstrtsptransport.h: + rtsp: Use glib-mkenums to generate GstRTSPProfile and GstRTSPLowerTrans GTypes + +2015-05-20 10:22:48 +0100 Tim-Philipp Müller + + * ext/ogg/gstoggdemux.c: + Revert "oggdemux: Prevent seeks when _SCHEDULING_FLAG_SEQUENTIAL is set" + This reverts commit 76647f2710d718e27f207b005956b7dba72c2d19. + Avoiding pull mode activation is a feature regression, and + demuxers should always use pull mode where that is possible, + e.g. if there's an upstream queue2 with a ring buffer or + a download buffer. + This patch made reverse playback no longer possible over http. + If the goal is to minimise seeks, then that can still be done + by making the demuxer behave differently in pull mode if + the SEQUENTIAL flag is set. If there are bugs, like the demuxer + needlessly scanning the entire file on start-up in pull mode, + then those should be fixed instead. + https://bugzilla.gnome.org/show_bug.cgi?id=746010 + +2015-05-19 19:48:54 +0100 Tim-Philipp Müller + + * win32/common/libgstpbutils.def: + win32: update .def file for new API + +2014-10-24 17:49:37 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtsp: don't use soon-to-be-deprecated g_cancellable_reset() + From the API documentation: "Note that it is generally not + a good idea to reuse an existing cancellable for more + operations after it has been cancelled once, as this + function might tempt you to do. The recommended practice + is to drop the reference to a cancellable after cancelling + it, and let it die with the outstanding async operations. + You should create a fresh cancellable for further async + operations." + https://bugzilla.gnome.org/show_bug.cgi?id=739132 + +2014-10-24 17:49:23 +0100 Tim-Philipp Müller + + * gst/gio/gstgiobasesink.c: + * gst/gio/gstgiobasesrc.c: + gio: don't use soon-to-be-deprecated g_cancellable_reset() + From the API documentation: "Note that it is generally not + a good idea to reuse an existing cancellable for more + operations after it has been cancelled once, as this + function might tempt you to do. The recommended practice + is to drop the reference to a cancellable after cancelling + it, and let it die with the outstanding async operations. + You should create a fresh cancellable for further async + operations." + https://bugzilla.gnome.org/show_bug.cgi?id=739132 + +2014-10-24 17:48:54 +0100 Tim-Philipp Müller + + * gst/tcp/gstmultioutputsink.c: + * gst/tcp/gstmultisocketsink.c: + * gst/tcp/gsttcpclientsink.c: + * gst/tcp/gsttcpclientsrc.c: + * gst/tcp/gsttcpserversrc.c: + tcp: don't use soon-to-be-deprecated g_cancellable_reset() + From the API documentation: "Note that it is generally not + a good idea to reuse an existing cancellable for more + operations after it has been cancelled once, as this + function might tempt you to do. The recommended practice + is to drop the reference to a cancellable after cancelling + it, and let it die with the outstanding async operations. + You should create a fresh cancellable for further async + operations." + https://bugzilla.gnome.org/show_bug.cgi?id=739132 + +2015-05-19 18:53:09 +0200 Mathieu Duponchelle + + * gst-libs/gst/pbutils/gstdiscoverer.h: + gstdiscoverer: Add since annotation. + Forgot to add the since annotation to the + GstDiscovererSerializeFlags in the previous commit. + +2015-05-03 03:18:28 +0200 Mathieu Duponchelle + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/pbutils/gstdiscoverer.c: + * gst-libs/gst/pbutils/gstdiscoverer.h: + * tests/check/libs/discoverer.c: + * win32/common/libgstpbutils.def: + discoverer: Add serialization methods. + [API] gst_discoverer_info_to_variant + [API] gst_discoverer_info_from_variant + [API] GstDiscovererSerializeFlags + + Serializes as a GVariant + + Adds a test + + Does not serialize potential GstToc (s) + https://bugzilla.gnome.org/show_bug.cgi?id=748814 + +2015-05-19 16:32:38 +0300 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbasepayload.c: + rtpbasepayload: Try harder to reuse previously configured caps values and give more preference to anything set as properties + This affects the pt, ssrc, seqnum-offset and timestamp-offset properties. If + they were set from a property, or we configured caps before, we try to use + that value for them. Even if the first structure of the downstream caps + specifies a different value, we check if the value is supported by other + structures. + Only if all this fails, we use the values given by downstream in the first + structure, i.e. if no properties were set and these are the first caps we + negotiate or downstream does not support our values. + By doing this we ensure that we don't spuriously change ssrcs or other fields + in the middle of the stream (and also consider property values more). Ssrc + changes would currently happen after sending an RTX packet (thus creating a + new internal source inside the rtpsession), and then renegotiating the + payloader (which then gets the RTX ssrc from rtpsession). + https://bugzilla.gnome.org/show_bug.cgi?id=749581 + +2015-05-18 21:09:25 +0200 Stefan Sauer + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/video-scaler.c: + docs: a random set of trivial fixes for the library docs + Warnings down to 35, unused symbols doen to 112. + +2015-05-18 20:56:28 +0200 Stefan Sauer + + * docs/libs/gst-plugins-base-libs-docs.sgml: + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/allocators/gstfdmemory.c: + * gst-libs/gst/allocators/gstfdmemory.h: + docs: add fdmemory to docs + +2015-05-18 20:45:45 +0200 Stefan Sauer + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/allocators/gstfdmemory.h: + * gst-libs/gst/video/colorbalance.h: + * gst-libs/gst/video/video-scaler.c: + docs: a random set of trivial fixes for the library docs + All those where super straight forward from the warnings gtkdoc prints. It kind + of makes sense to apply them before the list of warnings is >100 and people + complain that gtkdoc is noisy. + +2015-05-18 20:31:30 +0200 Stefan Sauer + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/sdp/gstmikey.h: + mikey: fix a bunch of doc warnings + Rename header/source mismatch of parameters. Update the exposed API in + sections.txt. + +2015-05-18 20:01:49 +0200 Stefan Sauer + + * gst/playback/gstplaybin2.c: + Revert "doc: Workaround gtkdoc issue" + This reverts commit df7ef3c35d34352257a28307c07d4673f239452e. + This is fixed by the gtk-doc 1.23 release. + +2015-05-18 11:23:16 +0100 Tim-Philipp Müller + + * gst-libs/gst/app/gstappsrc.c: + * tests/check/elements/appsrc.c: + appsrc: optimise caps changing when previously-set caps have not taken effect yet + Only negotiate/change caps once when setting caps twice and + the first-set caps have not been used yet. + Based on patch by Eunhae Choi. + https://bugzilla.gnome.org/show_bug.cgi?id=747517 + +2015-05-18 16:16:10 +0900 Vineeth T M + + * sys/xvimage/xvimagesink.c: + xvimagesink: fix pool leak + During set caps when config fails, the referenced newpool + is not unref ed. + https://bugzilla.gnome.org/show_bug.cgi?id=749530 + +2015-05-18 15:45:01 +0900 eunhae choi + + * gst/playback/gstplaybin2.c: + playbin: check the flags before set again + check the previous flags of playsink to avoid the reconfigure of playsink repeatedly + https://bugzilla.gnome.org/show_bug.cgi?id=749528 + +2015-05-16 23:33:55 -0400 Nicolas Dufresne + + * gst/playback/gstplaybin2.c: + doc: Workaround gtkdoc issue + With gtkdoc 1.22, the XML generator fails when a itemizedlist is + followed by a refsect2. Workaround the issue by wrapping the refsect2 + into para. + +2015-05-15 14:49:47 +0200 Stefan Sauer + + * gst/playback/gstplaybin2.c: + * gst/playback/gstsubtitleoverlay.c: + playback: use the new gst_object api + Use gst_object_has_as_anchestor instead of the now deprecated _has_ancestor. + +2015-05-10 11:42:21 +0100 Tim-Philipp Müller + + * ext/ogg/gstoggmux.c: + docs: fix up example pipeline + +2015-05-09 22:33:26 +0100 Tim-Philipp Müller + + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + * ext/ogg/gstoggdemux.c: + * ext/pango/gstbasetextoverlay.c: + * ext/pango/gstclockoverlay.c: + * ext/pango/gsttextoverlay.c: + * ext/pango/gsttextrender.c: + * ext/pango/gsttimeoverlay.c: + * ext/theora/gsttheoradec.c: + * ext/theora/gsttheoraenc.c: + * ext/theora/gsttheoraparse.c: + * ext/vorbis/gstvorbisdec.c: + * ext/vorbis/gstvorbisenc.c: + * ext/vorbis/gstvorbisparse.c: + * ext/vorbis/gstvorbistag.c: + * gst/adder/gstadder.c: + * gst/audioconvert/gstaudioconvert.c: + * gst/audiorate/gstaudiorate.c: + * gst/audioresample/gstaudioresample.c: + * gst/audiotestsrc/gstaudiotestsrc.c: + * gst/gio/gstgiosink.c: + * gst/gio/gstgiosrc.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstsubtitleoverlay.c: + * gst/tcp/gsttcpclientsink.c: + * gst/tcp/gsttcpclientsrc.c: + * gst/tcp/gsttcpserversink.c: + * gst/tcp/gsttcpserversrc.c: + * gst/videoconvert/gstvideoconvert.c: + * gst/videorate/gstvideorate.c: + * gst/videoscale/gstvideoscale.c: + * gst/videotestsrc/gstvideotestsrc.c: + * gst/volume/gstvolume.c: + * sys/ximage/ximagesink.c: + * sys/xvimage/xvimagesink.c: + docs: update element example pipelines + - gst-launch -> gst-launch-1.0 + - use autoaudiosink and audiovideosink more often + - review pipeline examples and descriptions + +2015-05-10 10:51:09 +1000 Jan Schmidt + + * win32/common/libgstvideo.def: + video: Update win32 exports for new libgstvideo API + +2015-05-08 15:21:16 +0300 Vivia Nikolaidou + + * gst/videoconvert/gstvideoconvert.c: + * gst/videoconvert/gstvideoconvert.h: + videoconvert: Expose some properties from the videoconverter API + Expose chroma resampler, alpha mode, alpha value, chroma mode, matrix mode, + gamma mode and primaries mode from the videoconverter API. + https://bugzilla.gnome.org/show_bug.cgi?id=749105 + +2015-05-08 14:57:03 +0300 Vivia Nikolaidou + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-resampler.h: + * gst/videoscale/gstvideoscale.c: + video-converter: Change some implicit string enums to real enums + GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, + GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_VIDEO_CONVERTER_OPT_GAMMA_MODE and + GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE were G_TYPE_STRING with only a few valid + options. Changed those to real enums. + https://bugzilla.gnome.org/show_bug.cgi?id=749104 + +2015-05-08 15:06:34 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Also negotiate with downstream if needed before handling a GAP event + +2015-05-08 15:02:48 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Also negotiate with downstream if needed before handling a GAP event + +2015-05-06 12:40:48 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Try to be smarter when clipping buffers without duration/framerate to the segment + 2 second frame duration is rather unlikely... but if we don't clip + away buffers that far before the segment we can cause the pipeline to + lockup. This can happen if audio is properly clipped, and thus the + audio sink does not preroll yet but the video sink prerolls because + we already outputted a buffer here... and then queues run full. + In the worst case we will clip one buffer too many here now if no + framerate is given, no buffer duration is given and the actual + framerate is less than 0.5fps. + Fixes seeking on HLS/DASH streams, when seeking into the middle of + fragments and having no framerate/buffer duration. + +2015-05-04 17:59:30 +0200 Guillaume Desmottes + + * sys/xvimage/xvimagesink.c: + xvimagesink: fix navigation event leak when early returning + Create the event *after* the early return check so it's not leaked. + https://bugzilla.gnome.org/show_bug.cgi?id=748903 + +2015-05-04 18:00:18 +0200 Guillaume Desmottes + + * sys/xvimage/xvimagesink.c: + xvimagesink: fix navigation event leak when not handled + gst_navigation_message_new_event() is *not* consuming the event so we should + always drop our extra reference. + https://bugzilla.gnome.org/show_bug.cgi?id=748903 + +2015-05-04 17:58:38 +0200 Guillaume Desmottes + + * gst-libs/gst/video/navigation.c: + navigation: fix structure leak if subclass doesn't implement send_event() + The send_event() implementation is supposed to consume @structure. + https://bugzilla.gnome.org/show_bug.cgi?id=748903 + +2015-05-05 15:35:46 +0200 Sebastian Dröge + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Don't override segment.base from upstream with 0 + Upstream might want to use it to properly map timestamps to running/stream + times, if we just override it with 0 synchronization will be just wrong. + For this we remove some old 0.10 code related to segment accumulation, and + remove some more code that is useless now, and accumulate the group start time + (aka segment.base offset) manually now. + https://bugzilla.gnome.org/show_bug.cgi?id=635701 + +2015-05-05 13:14:12 +0200 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + rtpbasedepayload: Add some debug output + +2015-03-19 10:50:22 +0100 Aurélien Zanelli + + * docs/design/part-mediatype-video-raw.txt: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-format.h: + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-scaler.c: + video: add NV61 format support + https://bugzilla.gnome.org/show_bug.cgi?id=746466 + +2015-05-04 20:33:23 +0100 Tim-Philipp Müller + + * docs/libs/gst-plugins-base-libs-sections.txt: + docs: add new video API to docs + +2015-05-04 02:18:22 +1000 Jan Schmidt + + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + video: check colorimetry and chroma_site equality in gst_video_info_is_equal() + Add VideoInfo accessors for colorimetry and chroma_site and use them + when checking the equality of two GstVideoInfo + +2015-05-04 02:10:17 +1000 Jan Schmidt + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * win32/common/libgstvideo.def: + video-color: Add gst_video_colorimetry_is_equal() + Add a function for comparing the equality of 2 colorimetry + structures. + +2015-04-10 16:05:45 +0900 Young Han Lee + + * ext/ogg/gstoggdemux.c: + oggdemux: remove unused code + These lines have done nothing for about 10 years. + https://bugzilla.gnome.org/show_bug.cgi?id=748820 + +2015-04-10 15:24:28 +0300 Sreerenj Balachandran + + * gst-libs/gst/pbutils/codec-utils.c: + pbutils: Use more strict profile checking for hevc + Use the profile_idc value to set the profile string in caps. + Don't use compatibility flags for this purpose. + https://bugzilla.gnome.org/show_bug.cgi?id=747613 + +2015-04-30 14:55:14 +0530 Ravi Kiran K N + + * gst-libs/gst/video/video-converter.c: + video-converter: Remove unused macro + Remove unused macro GET_TMP_LINE + https://bugzilla.gnome.org/show_bug.cgi?id=748687 + +2015-04-29 15:44:59 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: add some more key navigation mappings + And don't feed multi-character key descriptors to the + event handler, it won't be what it expects. + +2015-04-29 15:30:02 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/navigation.c: + * gst-libs/gst/video/navigation.h: + * win32/common/libgstvideo.def: + navigation: sprinkle some since markers and add new API to .def file + https://bugzilla.gnome.org/show_bug.cgi?id=747245 + +2015-04-02 16:16:58 +0200 Edward Hervey + + * tools/gst-play.c: + tools: Add mouse/keyboard handling from messages + Allows the user to control playback with the window in focus + https://bugzilla.gnome.org/show_bug.cgi?id=747245 + +2015-04-02 16:10:32 +0200 Edward Hervey + + * sys/xvimage/xvimagesink.c: + xvimagesink: Post unhandled navigation events on the bus + https://bugzilla.gnome.org/show_bug.cgi?id=747245 + +2015-04-02 16:09:13 +0200 Edward Hervey + + * gst-libs/gst/video/navigation.c: + * gst-libs/gst/video/navigation.h: + video: Add a new "event" navigation message type + This will be useful for elements that wish to post unhandled navigation + events on the bus to give the application a chance to do something with + it + https://bugzilla.gnome.org/show_bug.cgi?id=747245 + +2015-04-28 12:01:02 +0200 Wim Taymans + + * gst-libs/gst/video/video-info.c: + * gst-libs/gst/video/video-info.h: + * win32/common/libgstvideo.def: + video-info: expose InterlaceMode conversion to/from string + Expose the methods used to convert a GstVideoInterlaceMode to and + from a string. + +2015-04-27 11:26:10 +0100 Luis de Bethencourt + + * gst/audioconvert/gstaudioconvert.c: + * gst/audiorate/gstaudiorate.c: + * gst/encoding/gstsmartencoder.c: + Rename property enums from ARG_ to PROP_ + Property enum items should be named PROP_ for consistency and readability. + +2015-04-27 11:06:58 +0200 Matthieu Bouron + + * gst/videoconvert/gstvideoconvert.c: + videoconvert: Keep colorimetry and chroma-site fields if passthrough + https://bugzilla.gnome.org/show_bug.cgi?id=748141 + +2015-04-27 10:08:17 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiosink.h: + * gst-libs/gst/audio/gstaudiosrc.h: + audio: Change the remaining "samples" in the ::delay() vfunc docs to "frames" + https://bugzilla.gnome.org/show_bug.cgi?id=748289 + +2015-04-26 20:13:01 +0100 Tim-Philipp Müller + + * tests/check/pipelines/tcp.c: + tests: tcp: remove SOCK_CLOEXEC which causes build problems on OS/X + It's not needed here. + https://bugzilla.gnome.org/show_bug.cgi?id=747692 + +2015-04-26 21:08:14 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioringbuffer.h: + * gst-libs/gst/audio/gstaudiosink.h: + * gst-libs/gst/audio/gstaudiosrc.h: + audio: The delay vfunc returns the number of frames, not samples + https://bugzilla.gnome.org/show_bug.cgi?id=748289 + +2015-04-26 17:49:33 +0100 Tim-Philipp Müller + + * Android.mk: + * android/NOTICE: + * android/alsa.mk: + * android/app.mk: + * android/app_plugin.mk: + * android/audio.mk: + * android/audioconvert.mk: + * android/audioresample.mk: + * android/audiotestsrc.mk: + * android/decodebin.mk: + * android/decodebin2.mk: + * android/gdp.mk: + * android/pbutils.mk: + * android/playbin.mk: + * android/queue2.mk: + * android/riff.mk: + * android/rtp.mk: + * android/rtsp.mk: + * android/sdp.mk: + * android/tag.mk: + * android/tcp.mk: + * android/typefindfunctions.mk: + * android/video.mk: + * android/videoconvert.mk: + * android/videoscale.mk: + * android/videotestsrc.mk: + * ext/ogg/Makefile.am: + * ext/vorbis/Makefile.am: + * gst-libs/gst/allocators/Makefile.am: + * gst-libs/gst/app/Makefile.am: + * gst-libs/gst/audio/Makefile.am: + * gst-libs/gst/fft/Makefile.am: + * gst-libs/gst/pbutils/Makefile.am: + * gst-libs/gst/riff/Makefile.am: + * gst-libs/gst/rtp/Makefile.am: + * gst-libs/gst/rtsp/Makefile.am: + * gst-libs/gst/sdp/Makefile.am: + * gst-libs/gst/tag/Makefile.am: + * gst-libs/gst/video/Makefile.am: + * gst/adder/Makefile.am: + * gst/app/Makefile.am: + * gst/audioconvert/Makefile.am: + * gst/audiorate/Makefile.am: + * gst/audioresample/Makefile.am: + * gst/audiotestsrc/Makefile.am: + * gst/encoding/Makefile.am: + * gst/playback/Makefile.am: + * gst/tcp/Makefile.am: + * gst/typefind/Makefile.am: + * gst/videoconvert/Makefile.am: + * gst/videorate/Makefile.am: + * gst/videoscale/Makefile.am: + * gst/videotestsrc/Makefile.am: + * gst/volume/Makefile.am: + * tools/Makefile.am: + Remove obsolete Android build cruft + This is not needed any longer. + +2015-04-26 14:37:56 +0100 Tim-Philipp Müller + + * tests/check/gst/typefindfunctions.c: + tests: typefindfunctions: add test for UTF-16 MSS manifest typefinding + +2015-04-26 14:44:33 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefinding: don't read more data than needed in MSS typefinder + +2015-04-26 14:27:30 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefinding: detect MSS manifests without using g_convert() + Embedded systems often have limited charset conversion + functionality, so don't rely on g_convert() (i.e. iconv) + for UTF-16 to UTF-8 conversions, we can easily enough do + that ourselves by converting to native endianness and + then using GLib's helper functions. + +2015-04-25 18:45:50 +0200 Stefan Sauer + + * ext/libvisual/gstaudiovisualizer.c: + * ext/libvisual/gstaudiovisualizer.h: + audiovisualizer: fix the license from GPL to LGPL + This was a copy'n'paste buf in the initial commit done by myself. + +2015-04-24 14:59:21 +0200 Guillaume Desmottes + + * gst-libs/gst/tag/gstxmptag.c: + xmptag: fix invalid reads in GST_DEBUG statement + Don't try to print a string that is not NUL-terminated. This + log line does not really seem useful so let's just drop it. + https://bugzilla.gnome.org/show_bug.cgi?id=748413 + +2015-04-24 17:10:59 +0100 Luis de Bethencourt + + * gst/audiotestsrc/gstaudiotestsrc.c: + * gst/encoding/gstencodebin.c: + * gst/playback/gstdecodebin2.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstplaysink.c: + * gst/playback/gsturidecodebin.c: + * gst/tcp/gstmultifdsink.c: + * gst/tcp/gstmultihandlesink.c: + * gst/tcp/gstmultioutputsink.c: + * gst/videotestsrc/gstvideotestsrc.c: + remove unused enum items PROP_LAST + This were probably added to the enums due to cargo cult programming and are + unused. Removing them. + +2015-04-03 00:44:12 +0900 Wonchul Lee + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + audiodecoder: Add sink and src query virtual method + API: GstAudioDecoderClass::src_query() + API: GstAudioDecoderClass::sink_query() + https://bugzilla.gnome.org/show_bug.cgi?id=747293 + +2015-04-23 15:57:37 +0100 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON + Make sure the test environment is set up. + https://bugzilla.gnome.org//show_bug.cgi?id=747624 + +2015-04-23 15:42:41 +0100 Tim-Philipp Müller + + * configure.ac: + configure: bump automake requirement to 1.14 and autoconf to 2.69 + This is only required for builds from git, people can still + build tarballs if they only have older autotools. + https://bugzilla.gnome.org//show_bug.cgi?id=747624 + +2015-04-23 15:14:07 +0100 Tim-Philipp Müller + + * .gitignore: + * tests/check/libs/.gitignore: + * tests/check/pipelines/.gitignore: + Update .gitignore + +2015-04-23 09:50:12 +0530 Ravi Kiran K N + + * gst-libs/gst/video/video-converter.c: + video-converter: n_lines member should be a guint not a boolean + https://bugzilla.gnome.org/show_bug.cgi?id=748348 + +2015-04-21 15:27:57 +0200 Guillaume Desmottes + + * ext/ogg/gstoggdemux.c: + oggdemux: fix event leaks + gst_event_replace() takes its own reference on the event so we should drop + ours after creating and storing an event using it. + This fix leaks which can be reproduced using the + validate.http.media_check.vorbis_theora_1_ogg scenario. + https://bugzilla.gnome.org/show_bug.cgi?id=748247 + +2015-04-22 10:34:09 +0200 Sebastian Dröge + + * INSTALL: + Remove INSTALL file + autotools automatically generate this, and when using different versions + for autogen.sh there will always be changes to a file tracked by git. + +2015-04-22 10:33:58 +0200 Sebastian Dröge + + * LICENSE_readme: + Remove LICENSE_readme + It's completely outdated and just confusing, better if people are + forced to look at the actual code in question than trusting this file. + +2015-04-21 13:31:44 +0200 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix YUY2 scaling some more + Take into account the different steps between Y and UV when calculating + the line size for vertical resampling or else we might not resample + enough pixels and leave bad lines. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=747790 + +2015-04-21 13:16:29 +0200 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: scale enough pixels in YUY2 (and friends) mode + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=747790 + +2015-04-17 16:21:05 +0900 Hyunjun Ko + + * tests/check/libs/rtpbasedepayload.c: + tests: rtpbasedepayload: fix crash in test when passing varargs + Need to pass 64 bits where 64 bits are expected. + https://bugzilla.gnome.org/show_bug.cgi?id=748027 + +2015-04-17 11:18:22 +0530 Ravi Kiran K N + + * gst-libs/gst/video/video-converter.c: + video-converter: Remove unused variables + Remove unused variables n_taps, max_taps in setup_scale() + https://bugzilla.gnome.org/show_bug.cgi?id=748021 + +2015-04-16 10:03:05 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideoutils.h: + video: add missing part of documentation text + +2015-03-31 13:26:21 +0200 Guillaume Desmottes + + * gst-libs/gst/pbutils/gstdiscoverer.c: + discoverer: fix GstToc leak when parsing toc messages + gst_message_parse_toc() returns a reffed GstToc which is owned by the + GstDiscovererInfo. But we have to make sure we unref its previous value before + setting the new one. + https://bugzilla.gnome.org/show_bug.cgi?id=747103 + +2015-04-17 11:45:34 +0200 Edward Hervey + + * win32/common/libgstallocators.def: + win32: Update defs for new API + +2015-04-17 09:31:40 +0200 Wim Taymans + + * gst-libs/gst/allocators/gstdmabuf.c: + * gst-libs/gst/allocators/gstfdmemory.c: + * gst-libs/gst/allocators/gstfdmemory.h: + allocators: make GstFdAllocator non-abstract + Make the GstFdAllocator non-abstract because it is perfectly possible + to make memory from a generic fd. Mark the memory as simply "fd". + +2015-04-15 11:24:17 +0200 Bernhard Miller + + * gst/audioconvert/gstchannelmix.c: + audioconvert: fix mixed usage of gint and gint32 in int matrix + This is a fixup for b2db18cda2e4e7951655cb2a34108a8523b6eca9 + audioconvert: avoid float calculations when mixing integer-formatted channels + The int matrix was using gint and gint32 synonymously, which can theoretically + cause problems if gint and gint32 are actually different types. + https://bugzilla.gnome.org/show_bug.cgi?id=747005 + +2015-04-14 12:47:07 +0100 Tim-Philipp Müller + + * common: + * gst/gio/gstgio.c: + gio: fix gvfs plugin dependencies + Try harder to look for gvfs backend changes in the right + place, to make sure the plugin gets reloaded when backends + are removed or installed. We watch the gvfs mounts directory + because the files there contain absolute paths to the + backend executables, and those may not be in the usual gio + path. + https://bugzilla.gnome.org/show_bug.cgi?id=747841 + +2015-04-14 15:08:09 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: disconnect scale callback in scrubby + When the position slider's button is released, disconnect the "value_changed" + callback to avoid triggering false seek callbacks. + +2015-04-13 17:35:36 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: keep scrubby command consistent + scrubby has two options, wav and playbin. Wav takes a file location so make + the playbin option take a file location as well instead of an uri. This also + means the usage help string will be correct for the playbin option. + +2015-04-13 17:28:45 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: no need to set intermediate states + +2015-04-13 16:09:26 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: wavparse doesn't need dynamic linking + In scrubby, there is no need to link wavparse with the sink dynamically. + The pad is available when the element is generated. + Change video and audio sinks to the automatically detected sinks. + +2015-04-11 19:51:54 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Break instead of return if default negotiation on GAP events fails + Otherwise we're going to leak the event. + +2015-04-11 00:03:29 +0100 Tim-Philipp Müller + + * gst/app/Makefile.am: + * gst/videorate/Makefile.am: + app, videorate: fix CFLAGS and LIBADD order + Make sure local headers are included before installed -base. + +2015-04-10 14:30:36 +0100 Luis de Bethencourt + + * tests/examples/playrec/playrec.c: + examples: remove reference to 0.10 in playrec + +2015-04-10 13:41:39 +0100 Luis de Bethencourt + + * tests/examples/overlay/gtk-videooverlay.c: + examples: remove deprecated function in gtk-videooverlay + gtk_widget_set_double_buffered () has been deprecated since GTK 3.14. + Also, widgets are realized automatically and gtk_wiget_realize () is only + meant to be used in widget implementations. + +2015-04-09 17:03:11 +0200 Guillaume Desmottes + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: fix buffer leak in chain function + If we don't consume the buffer by passing its reference to + overlay->text_buffer then we need to unref it. + Fix a leak with validate.file.playback.fast_forward.test5_mkv + when running inside Valgrind. + https://bugzilla.gnome.org/show_bug.cgi?id=747602 + +2015-04-08 18:32:29 +0300 Ilya Konstantinov + + * gst-libs/gst/app/gstappsrc.c: + appsrc: docs grammar fixes + https://bugzilla.gnome.org/show_bug.cgi?id=747516 + +2015-04-09 16:49:44 +0100 Luis de Bethencourt + + * tests/examples/gio/giosrc-mounting.c: + examples: add example description to giosrc-mounting + Also, use GST_MESSAGE_TYPE instead of accessing the GstMessage structure + +2015-04-09 13:00:02 +0100 Vincent Penquerc'h + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: fix ring buffer leak on open failure + +2015-04-09 12:59:38 +0100 Vincent Penquerc'h + + * gst-libs/gst/audio/gstaudiobasesrc.c: + audiobasesrc: fix ring buffer leak on open failure + +2015-04-09 11:23:25 +0100 Luis de Bethencourt + + * tests/examples/encoding/encoding.c: + examples: reuse variables in encoding example + +2015-04-08 20:49:24 -0700 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Don't post error messages while holding the stream lock + +2015-04-08 20:48:39 -0700 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Don't get and parse the current srcpad caps + We only get here if we don't have any srcpad caps, and we're going + to override the GstAudioInfo a few lines below anyway without ever + using it if for whatever reason we get caps here. + +2015-04-08 20:45:58 -0700 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Try to invent default caps instead of setting none at all when getting a GAP event before CAPS + Otherwise we would forward the GAP event without ever providing any caps, + which then would make decodebin expose a srcpad without any caps set. That's + confusing for applications and can lead to all kinds of interesting bugs. + Instead do the same as already is done in GstAudioDecoder, and try to invent + caps based on the sinkpad caps and the caps allowed by downstream and the + srcpad template caps. + https://bugzilla.gnome.org/show_bug.cgi?id=747190 + +2015-04-08 20:44:15 -0700 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Also log the pointer value of sticky events in debug output + Makes it easier to follow them in the debug logs. + +2015-04-08 17:12:22 +0100 Luis de Bethencourt + + * tests/examples/dynamic/addstream.c: + examples: remove unused return value in addstream + Removing unused return value of pause_play_stream (). + Fixing code style to satisfy the git hook. + +2015-04-08 15:31:39 +0100 Luis de Bethencourt + + * tests/examples/dynamic/sprinkle.c: + examples: avoid sprinkle running endlessly + Quit sprinkle when there are no more frequencies to remove. + Also rename for readability the check for linking elements. + +2015-04-08 16:15:43 +0200 Edward Hervey + + * common: + * tests/check/Makefile.am: + tests: Use AM_TESTS_ENVIRONMENT + Needed by the new automake test runner + +2015-04-07 16:43:59 +0100 Tim-Philipp Müller + + * gst-libs/gst/rtp/gstrtcpbuffer.h: + rtp: rtcpbuffer: fix typo in enum + and in docs. Spotted by Rob Swain. + +2015-04-07 15:32:35 +0100 Luis de Bethencourt + + * tests/examples/app/appsink-src2.c: + tests: remove unused filename string from appsink-src2 + +2015-04-07 15:30:30 +0100 Luis de Bethencourt + + * tests/examples/app/appsink-src.c: + tests: check file exists before running appsink-src + +2015-04-07 15:16:41 +0100 Luis de Bethencourt + + * tests/examples/app/appsink-src.c: + * tests/examples/app/appsink-src2.c: + * tests/examples/app/appsrc_ex.c: + tests: add missing license headers for example apps + +2015-04-06 19:20:00 -0700 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + {audio,video}decoder: Forward SEGMENT_DONE events immediately and drain decoders + Otherwise we're going to wait with draining until the next data comes, which + is a bit suboptimal and might take a long time... or maybe never happens. + +2015-04-05 13:53:38 +0100 Tim-Philipp Müller + + * tests/check/elements/appsrc.c: + tests: appsrc: clean up block_deadlock test and make it work in valgrind + Remove all the bus watch and main loop code from the block_deadlock + test, it's not needed: neither pipeline will ever post an EOS or ERROR + message on the bus, and we're the only ones posting an error, from a + timeout. Might just as well just sleep for a bit and then do whatever + we want to do. + Don't gratuitiously set tcase timeout, just use whatever is the + default (or set via the environment). + Make individual pipeline runs shorter. + Check for valgrind and only do a handful iterations when running + in valgrind, not 100 (each iteration takes about 4s on a core i7). + Make videotestsrc output smaller buffers than the default resolution, + we don't care about the buffer contents here anyway. + Fixes test timeouts when run in valgrind. + +2015-04-05 12:30:39 +0100 Tim-Philipp Müller + + * tests/check/elements/multisocketsink.c: + tests: multisocketsink: fix flaky unit test + On slower systems, or under high system load (e.g. check-valgrind), + the sending_buffers_with_9_gstmemories test would sometimes fail, + because the read call only returns 32 bytes instead of the full + 36 bytes expected. This is because multisocketsink might end up + doing a partial write of 32 bytes first, and then write the + missing 4 bytes later, but since we don't wait for all of data + to be written, there's a short window where our read call in the + unit test might then only receive the 32 bytes written so far, + which makes it deeply unhappy. + Instead, make sure we loop to read all bytes. + +2015-04-04 21:38:40 +0100 Tim-Philipp Müller + + * gst/tcp/gstmultisocketsink.c: + tcpserversink: don't error out if clients send us something, just ignore it + We don't expect clients to send us any data, but if they do, just + ignore it. Web browsers might send us an HTTP request for example, + but some will still be happy if we just send them data without + a proper HTTP response. + There was a bug in the reading code path. We only have a small + read buffer and would provoke an EWOULDBLOCK trying to read + because we don't bail out of the loop early enough. + https://bugzilla.gnome.org/show_bug.cgi?id=743834 + +2015-04-04 01:23:48 +0100 Tim-Philipp Müller + + * tests/check/pipelines/basetime.c: + tests: basetime: fix timeouts when running under valgrind + This test sets a rather short timeout, increase this when + we run under valgrind. Also add a short sleep to the + fakesrc ! fakesink pipeline to avoid thrashing the CPU, + which would often not stop the main loop when it should. + Also fix wrong (0.10) return value from pad probe callback. + +2015-04-04 00:46:46 +0100 Tim-Philipp Müller + + * gst/videorate/gstvideorate.c: + videorate: downgrade left-over ERROR debug message + +2015-04-04 00:42:52 +0100 Tim-Philipp Müller + + * gst/videorate/gstvideorate.c: + * tests/check/elements/videorate.c: + videorate: fix a couple of memory leaks + tests: videorate: fix leak in unit test + +2015-04-03 18:18:32 -0400 Nicolas Dufresne + + * docs/libs/gst-plugins-base-libs-sections.txt: + doc: Add gst_video_encoder_get_allocator() to doc + +2015-04-03 21:00:53 +0100 Tim-Philipp Müller + + * gst-libs/gst/tag/gstexiftag.c: + tag: exiftag: don't try to convert utf-8 to latin1 if string is ASCII already + Bypass g_convert/iconv if there's nothing to convert. That way, + conversion won't fail on systems where iconv doesn't support + converting utf-8 to latin1 and there's nothing to convert. + https://bugzilla.gnome.org/show_bug.cgi?id=723252 + +2015-04-03 18:57:43 +0100 Tim-Philipp Müller + + * autogen.sh: + * common: + Automatic update of common submodule + From bc76a8b to c8fb372 + +2015-03-12 16:01:48 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + oggdemux: fix wrong duration on partial streams with a skeleton index + When a stream has a skeleton index, the stream time is taken from that + index. However, when part of the stream is captured, the index is + invalid as its offsets are now wrong. To avoid this, we ignore the index + when the last offset points beyond the end of the stream (when its + byte length is known). + https://bugzilla.gnome.org/show_bug.cgi?id=744070 + +2015-03-18 16:32:53 +0000 Vincent Penquerc'h + + * ext/pango/gstbasetextoverlay.c: + textoverlay: fix disappearing text with high deltax + When deltax is large enough to cause the text to push past the + width of the frame, it would disappear due to a bug in setting + the layout width. + While there, fix a log printing an incorrect width to set. + https://bugzilla.gnome.org/show_bug.cgi?id=739689 + +2014-12-17 12:17:09 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggmux.c: + oggmux: fix deadlock when not pulling a buffer from collectpads + oggmux keeps a cached buffer per pad, and pulls buffers from + collectpads to this cached buffer for all pads before processing + the best pad. In some cases, the move from collectpads buffer + to cached buffer is delayed till next call. However, when there + is only one pad, this can't be delayed till next call as there + will be a deadlock since collectpads has no other pad to push to. + https://bugzilla.gnome.org/show_bug.cgi?id=740565 + +2015-03-25 15:36:38 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin2: fix deadlock on chain shutdown + When shutting down the chain, we can get a deadlock when removing + a pad, if that chain was being busy streaming but blocked (eg, while + waiting for a queue to have free space). + https://bugzilla.gnome.org/show_bug.cgi?id=746480 + +2015-04-03 13:20:58 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: add license header to scrubby + +2015-03-19 10:48:15 +0000 Vincent Penquerc'h + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + audio,video: use gst_segment_is_equal instead of memcmp + memcmp will blindly compare the reserved fields, as well as any + padding the compiler may choose to sprinkle in GstSegment. + Fixes valgrind complaints in unit tests, as well as some found via + https://bugzilla.gnome.org/show_bug.cgi?id=738216 + +2014-04-04 12:32:14 +0100 Vincent Penquerc'h + + * sys/xvimage/xvimageallocator.c: + xvimagsink: fix failure to allocate large shared memory blocks + A previous patch increased allocations by 15 bytes in order to ensure + 16 byte alignment for g_malloc blocks. However, shared memory is + already block aligned, and this extra 15 bytes caused allocation + to fail when we were already allocating to the shared memory limit, + which is a lot smaller than typical available RAM. + Fix this by removing the alignment slack when allocating shared + memory. + https://bugzilla.gnome.org/show_bug.cgi?id=706066 + +2014-04-04 12:40:14 +0100 Vincent Penquerc'h + + * sys/ximage/ximagepool.c: + ximage: do not allocate extra alignment slack for shared memory + A previous patch increased allocations by 15 bytes in order to ensure + 16 byte alignment for g_malloc blocks. However, shared memory is + already block aligned, and this extra 15 bytes is not needed. Since + shared memory limits are low compared to RAM, we remove this waste. + https://bugzilla.gnome.org/show_bug.cgi?id=727236 + +2015-04-03 13:56:28 +0900 Chihyoung Kim + + * configure.ac: + tests: require Gtk+ 3.10 for examples + Fixes build of playback and seek tests when an + older Gtk+ version is present on the system. + https://bugzilla.gnome.org/show_bug.cgi?id=747283 + +2014-12-09 13:18:42 +0100 Thibault Saunier + + * gst/videorate/gstvideorate.c: + * gst/videorate/gstvideorate.h: + * tests/check/elements/videorate.c: + videorate: Detect framerate if not forced to variable downstream + In case upstream does not provide videorate with framerate information, + it will detect the current framerate from the buffer it received, + but if downstream forces the use of variable framerate (most probably + through the use of a caps filter with framerate = 0 / 1), videorate will + respect that. + And add some unit tests + https://bugzilla.gnome.org/show_bug.cgi?id=734424 + +2014-12-09 11:31:30 +0100 Thibault Saunier + + * gst/videorate/gstvideorate.c: + videorate: Do not loop forever pushing first buffer when variable framerate + In the case the framerate is variable (represented by framerate=0/1), + we currently end up loop pushing the first buffer and then recompute + diff1 and diff2 without updating the videorate->next_ts at all + leading to infinitely looping pushing that first buffer. + In the case of variable framerate, we should just compute the next_ts + as previous_pts + previous_duration. + https://bugzilla.gnome.org/show_bug.cgi?id=734424 + +2015-04-02 14:32:15 +0100 Luis de Bethencourt + + * tests/examples/playback/playback-test.c: + playback-test: update deprecated API + +2015-04-02 11:33:12 +0100 Luis de Bethencourt + + * tests/icles/test-colorkey.c: + * tests/icles/test-videooverlay.c: + tests: fix deprecated API in colorkey and videooverlay + +2015-04-02 11:14:08 +0100 Luis de Bethencourt + + * tests/examples/seek/scrubby.c: + examples: fix deprecated API in scrubby + +2015-03-19 14:34:07 +0100 Guillaume Desmottes + + * ext/ogg/gstoggdemux.c: + oggdemux: don't use GST_ERROR() for debug messages + Fix https://bugzilla.gnome.org/show_bug.cgi?id=746457 + +2015-04-01 15:58:28 +0100 Luis de Bethencourt + + * tests/examples/audio/volume.c: + tests: use elapsed label of volume example + +2015-03-30 11:24:46 +0200 Bernhard Miller + + * gst/audioconvert/audioconvert.h: + * gst/audioconvert/gstchannelmix.c: + audioconvert: avoid float calculations when mixing integer-formatted channels + The patch calculates a second channel mixing matrix from the current one. The + matrix contains the original values * (2^10) as integers. This matrix is used + when integer-formatted channels are mixed. + On a ARM Cortex-A8, single core, 800MHz this improves performance in a + testcase from 29s to 9s for downmixing 6 channels to stereo. + https://bugzilla.gnome.org/show_bug.cgi?id=747005 + +2015-04-01 15:02:13 +0100 Luis de Bethencourt + + * tests/examples/audio/volume.c: + tests: fix deprecated API in audio volume example + +2015-04-01 14:37:23 +0100 Luis de Bethencourt + + * tests/examples/seek/jsseek.c: + jsseek: update deprecated GTK API + +2015-04-01 13:50:51 +0100 Luis de Bethencourt + + * tests/examples/seek/jsseek.c: + jsseek: switch deprecated GtkTable for GtkGrid + +2015-04-01 11:01:57 +0100 Luis de Bethencourt + + * tests/examples/audio/audiomix.c: + tests: update deprecated GTK API in audiomix + +2015-03-31 11:21:25 +0200 Edward Hervey + + * gst-libs/gst/allocators/Makefile.am: + * gst-libs/gst/app/Makefile.am: + * gst-libs/gst/audio/Makefile.am: + * gst-libs/gst/fft/Makefile.am: + * gst-libs/gst/pbutils/Makefile.am: + * gst-libs/gst/riff/Makefile.am: + * gst-libs/gst/rtp/Makefile.am: + * gst-libs/gst/rtsp/Makefile.am: + * gst-libs/gst/sdp/Makefile.am: + * gst-libs/gst/tag/Makefile.am: + * gst-libs/gst/video/Makefile.am: + introspection: Don't use g-ir-scanner cache at compile time + It pollutes user directories and we don't need to cache it + https://bugzilla.gnome.org/show_bug.cgi?id=747095 + +2014-04-10 12:03:05 +0100 Vincent Penquerc'h + + * gst-libs/gst/tag/id3v2frames.c: + id3v2: ignore RVA2 tags with more than 64 peak bits + The spec for this does not say nor imply how this should be + interpreted. The previous code would try to shift by 64 bits, + which is undefined. + Coverity 1195119 + https://bugzilla.gnome.org/show_bug.cgi?id=727955 + +2015-03-30 10:50:45 +0100 Luis de Bethencourt + + * gst/playback/gstplaybin2.c: + playbin: avoid possible deference of null pointer + For safety, check the pointer playbin->curr_group is valid before + reading parameters of the structure. + CID #1291624 + +2015-03-28 16:59:23 +0100 Mark Nauwelaerts + + * ext/ogg/gstoggdemux.c: + oggdemux: resurrect some flow return handling + https://bugzilla.gnome.org/show_bug.cgi?id=744572 + +2015-03-27 20:16:28 +0100 Nicola Murino + + * gst-libs/gst/app/gstappsrc.c: + appsrc: handle a sample not having caps or a buffer more gracefully + https://bugzilla.gnome.org/show_bug.cgi?id=746908 + +2015-03-27 16:22:36 -0400 Nicolas Dufresne + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * tests/check/libs/rtpbasedepayload.c: + basedepay: Handle initial gaps and no clock-base + When generating segment, we can't assume the first buffer is actually + the first expected one. If it's not, we need to adjust the segment to + start a bit before. + Additionally, we if don't know when the stream is suppose to have + started (no clock-base in caps), it means we need to keep everything in + running time and only rely on jitterbuffer to synchronize. + https://bugzilla.gnome.org/show_bug.cgi?id=635701 + +2015-03-26 23:53:44 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: improve debug message by printing the object + Print the pad object that EOS'd too early + +2015-03-27 13:39:43 +0800 Song Bing + + * gst-libs/gst/video/gstvideoencoder.c: + 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 + +2015-03-26 18:03:12 -0700 David Schleef + + * gst-libs/gst/riff/riff-ids.h: + riff: Add FLLR tag + +2015-03-25 18:40:25 -0400 Nicolas Dufresne + + * gst-libs/gst/rtp/gstrtpbasedepayload.c: + * tests/check/libs/rtpbasedepayload.c: + basedepayload: Fix generated segment + This fixes playback position in RTSP. + https://bugzilla.gnome.org/show_bug.cgi?id=635701 + +2015-03-25 08:20:03 -0300 Thiago Santos + + * gst/playback/gstplaybin2.c: + playbin: ignore new pads if it is shutting down + If a new pad is added after playbin has been put to READY/NULL it + should ignore new pads as it is shutting down. + This can happen when the pipeline fails to preroll (is still in READY) + and the user gives up on waiting or an error that doesn't reach + the demuxer occurs (on some event handling) and it will continue to + work and exposing pads while playbin has been put to NULL. + Without this check an input-selector is created and set to PAUSED + state, preventing playbin from properly shutting down in case it + has data blocked inside it. + +2015-03-24 15:47:20 -0400 Nicolas Dufresne + + * ext/theora/gsttheoradec.c: + Revert "theoradec: Disable usage of crop meta" + This reverts commit da52868f468bd75ddb595a3eb52aaa38ecbbac41. + +2015-03-24 15:18:36 -0400 Nicolas Dufresne + + * gst/videorate/gstvideorate.c: + videorate: Don't leak the pools + gst_query_set_nth_alloction_pool() is transfer none on the pool, so we must + unref the pool when done. + +2015-03-01 11:44:22 -0500 Nicolas Dufresne + + * ext/theora/gsttheoradec.c: + theoradec: Disable usage of crop meta + This is a temporary workaround that simply disables usage of crop + meta for now. + https://bugzilla.gnome.org/show_bug.cgi?id=741030 + +2015-03-24 17:28:51 +0200 Ilya Konstantinov + + * gst/audioconvert/gstaudioquantize.c: + audioconvert: Eliminate unsigned quantizers + audio_convert_convert unpacks to default format (signed) before calling + quantize, and the unsigned variants were equivalent to signed anyway, + so we just get rid of them. + +2015-03-24 03:01:22 +0200 Ilya Konstantinov + + * gst/audioconvert/gstaudioquantize.c: + * gst/audioconvert/gstfastrandom.h: + audioconvert: Avoid int division in quantization + Since range size is always 2^n, we can simply use modulo (implemented + with a bitmask). + The previous implementation used 64-bit integer division, which is + done in software on ARMv7. Although the divisor was constant, the + division could not be transformed into "multiplication by magic number" + since the dividend was 64-bit. + The now-unused and not-so-fast gst_fast_random_(u)int32_range functions + were removed. + Also, implementing bug fixes: + 1) ADD_DITHER_TPDF_HF_I no longer discards bias. + 2) We change TPDF's noise range to be the same as RPDF's. Previously, + RPDF's noise ranged: + { bias - dither, bias + dither } + while TPDF's noise ranged: + { bias/2 - dither/2, bias/2 + dither/2 - 1 } + + { bias/2 - dither/2, bias/2 + dither/2 - 1 } = + { bias - dither, bias + dither - 2 } + Now, both range: + { bias - dither, bias + dither - 1 } + https://bugzilla.gnome.org/show_bug.cgi?id=746661 + +2015-02-16 09:25:03 +1000 Duncan Palmer + + * gst/playback/gstdecodebin2.c: + decodebin2: Set multiqueue sizes before use-buffering. + This fixes a race where the use-buffering property on a multiqueue was + set before the queue depth was changed from it's high preroll limits to + lower playback limits. This resulted in buffering messages being emitted + by the multiqueue in the short window between use-buffering being + set and the queue depth being reset. + https://bugzilla.gnome.org/show_bug.cgi?id=744308 + +2015-03-24 10:46:44 +0000 Luis de Bethencourt + + * gst-libs/gst/allocators/gstfdmemory.c: + Revert "fdmemory: freed pointer will always be 0" + This reverts commit 7fbcefb753f944a79eae6957ea2789c960eb9eea. + +2015-03-24 10:19:05 +0000 Luis de Bethencourt + + * gst-libs/gst/allocators/gstfdmemory.c: + fdmemory: freed pointer will always be 0 + +2015-03-20 17:45:03 +0900 Wonchul Lee + + * ext/ogg/gstoggdemux.c: + oggdemux: Fix compiler warning + gstoggdemux.c:1233:11: error: format specifies type 'long' but the argument has type 'ogg_int64_t' (aka 'long long') [-Werror,-Wformat] + granule); + ^~~~~~~ + https://bugzilla.gnome.org/show_bug.cgi?id=746512 + +2015-03-19 13:31:07 +0100 Wim Taymans + + * win32/common/libgstallocators.def: + defs: update + +2015-03-19 12:42:23 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-convert: fix clamping for 16 bits alpha mult + +2015-03-18 20:38:20 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-frame.c: + video-frame: fix height/width assertions + As commit 274984e8 states: + When doing CROP META it is expected that the width and/or height + in the GstVideoMeta is bigger or equal to the caps negotiated size. + https://bugzilla.gnome.org/show_bug.cgi?id=741030 + +2015-03-18 15:12:03 +0100 Wim Taymans + + * gst-libs/gst/allocators/Makefile.am: + * gst-libs/gst/allocators/gstdmabuf.c: + * gst-libs/gst/allocators/gstfdmemory.c: + * gst-libs/gst/allocators/gstfdmemory.h: + fdmemory: make a base class for allocating fd-backed memory + Make a base class that can help with allocating fd-backed memory. + Make dmabuf extend from the base class. + We can now make methods to check if memory has an fd and get the fd for + all the different types of fd-backed memory. + +2015-03-16 20:41:19 +0100 Sebastian Dröge + + * tests/check/elements/multisocketsink.c: + multisocketsink: Allocate enough memory on the stack in the test + Otherwise we just overwrite other things on the stack and cause crashes. + +2015-03-16 11:53:24 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: fix playback regression on streams with clipped data at start + The code that was calculating the start granule from packet durations + was interpreting a negative value as an error, but this is actually a + valid case, to indicate clipping of data at start. + https://bugzilla.gnome.org/show_bug.cgi?id=743900 + +2015-03-15 17:27:33 +0100 Wim Taymans + + * gst-libs/gst/allocators/gstdmabuf.c: + * gst-libs/gst/allocators/gstfdmemory.c: + * gst-libs/gst/allocators/gstfdmemory.h: + fdmemory: add flags to control behaviour + Add some flags to the GstFdMemory to control how memory is mapped and + unmapped. + +2015-03-15 16:41:21 +0100 Wim Taymans + + * tests/check/Makefile.am: + * tests/check/libs/allocators.c: + allocators: add allocators test + +2015-03-15 15:16:23 +0100 Wim Taymans + + * gst-libs/gst/allocators/Makefile.am: + * gst-libs/gst/allocators/gstdmabuf.c: + * gst-libs/gst/allocators/gstfdmemory.c: + * gst-libs/gst/allocators/gstfdmemory.h: + fdmemory: add fd backed GstMemory to separate file + Make a separate file for the code to handle the fd backed memory. + This would make it possible later to add other allocators also using + fd backed memory. + +2015-03-14 18:08:15 +0000 Thiago Santos + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: fix deadlock condition + The variables could have changed when the lock was released + to push a gap event. Streamsynchronizer needs to check them + again before going to sleep. + Bonus: fix a comment typo + +2015-03-13 18:07:12 +0000 Ramiro Polla + + * gst/playback/gstplaysink.c: + playsink: remove redundant else statements + +2015-03-13 18:23:46 +0000 Ramiro Polla + + * gst/playback/gstplaybin2.c: + playbin: don't escape percent sign in documentation code sample + +2014-11-03 12:47:18 +0000 William Manley + + * configure.ac: + * tests/check/Makefile.am: + * tests/check/pipelines/tcp.c: + Add test_that_multisocketsink_and_socketsrc_preserve_meta + This test is in a seperate commit to the previous two because it depends + on and tests the functionality in both. + +2015-03-13 16:19:28 +0000 William Manley + + * gst/tcp/gstsocketsrc.c: + socketsrc: Add support for GstNetControlMessageMeta + multisocketsink now understands the new GstNetControlMessageMeta to allow + sending control messages (ancillary data) with data when writing to Unix + domain sockets. + Thanks to glib's `GSocketControlMessage` abstraction the code introduced + in this commit is entirely portable and doesn't introduce and additional + dependencies or conditionally compiled code, even if it is unlikely to be + of much use on non-UNIX systems. + +2014-10-30 17:53:15 +0000 William Manley + + * configure.ac: + * gst/tcp/gstmultisocketsink.c: + multisocketsink: Add support for GstNetControlMessageMeta + multisocketsink now understands the new GstNetControlMessageMeta to allow + sending control messages (ancillary data) with data when writing to Unix + domain sockets. + A later commit will introduce a new socketsrc element which will similarly + understand `GstNetControlMessageMeta`. This, when used with a + `GSocketControlMessage` of type `GUnixFDMessage` will allow GStreamer to + send and receive file-descriptions in ancillary data, the first step to + using memfds to implement zero-copy video IPC. + Thanks to glib's `GSocketControlMessage` abstraction the code introduced + in this commit is entirely portable and doesn't introduce and additional + dependencies or conditionally compiled code, even if it is unlikely to be + of much use on non-UNIX systems. + +2015-03-13 13:56:13 +0000 William Manley + + * gst/tcp/gstsocketsrc.c: + * gst/tcp/gstsocketsrc.h: + * tests/check/pipelines/tcp.c: + socketsrc: Add `connection-closed-by-peer` signal + This provides notification that the socket in use was closed by the peer + and gives an opportunity to replace it with a new one which is not + closed, allowing reading from many sockets in order. + I use this in pulsevideo to implement reconnection logic to handle the + pulsevideo service dieing, such that is can be restarted without + disrupting downstream. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=739546 + +2015-03-13 13:43:59 +0000 William Manley + + * gst/tcp/gstsocketsrc.c: + socketsrc: Tidy up usage of `g_object_unref`/`g_clear_object` and locking + This is clearer, and should make future changes safer. No functional + change intended. + See https://bugzilla.gnome.org/show_bug.cgi?id=739546 + +2015-03-13 13:30:48 +0000 William Manley + + * gst/tcp/gstsocketsrc.c: + socketsrc: Refactor to simplify + * Don't bother polling, just do a blocking read, the `GCancellable` will + take care of unlocking. This should also be faster on MS Windows where + the GIO documentation for `g_socket_get_available_bytes` states: "Note + that on Windows, this function is rather inefficient in the UDP case". + * Implement `GstPushSrc.fill` rather than `GstPushSrc.create`. This means + that we will be using the downstream allocator which may be more + efficient. It also means that socketsrc is likely to respect its + "blocksize" property (assuming that there is enough data available). + See https://bugzilla.gnome.org/show_bug.cgi?id=739546 + +2014-11-03 02:47:14 +0000 William Manley + + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-base-plugins-docs.sgml: + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * docs/plugins/inspect/plugin-tcp.xml: + * gst/tcp/Makefile.am: + * gst/tcp/gstsocketsrc.c: + * gst/tcp/gstsocketsrc.h: + * gst/tcp/gsttcpplugin.c: + * tests/check/pipelines/tcp.c: + * win32/vs7/libgsttcp.vcproj: + * win32/vs8/libgsttcp.vcproj: + tcp: Add element socketsrc + `socketsrc` can be considered a source counterpart to `multisocketsink`. + It can be considered a generalization of `tcpclientsrc` and + `tcpserversrc`: it contains all the logic required to communicate over + the socket but none of the logic for creating the sockets/establishing + the connection in the first place, allowing the user to accomplish this + externally in whatever manner they wish making it applicable to other + types of sockets besides TCP. + This commit essentially copies the implementation directly from + tcpserversrc. Later patches will tidy the implementation up and + re-implement `tcpclientsrc` and `tcpserversrc` in terms of `socketsrc`. + See https://bugzilla.gnome.org/show_bug.cgi?id=739546 + +2015-03-13 23:24:23 +0530 Arun Raghavan + + * gst-libs/gst/audio/gstaudioringbuffer.c: + audioringbuffer: Log with the ringbuffer object where possible + +2015-03-13 12:49:31 +0000 William Manley + + * gst/tcp/gstmultisocketsink.c: + * tests/check/elements/multisocketsink.c: + multisocketsink: Map `GstMemory`s individually when sending + If a buffer is made up of non-contiguous `GstMemory`s `gst_buffer_map` + has to copy all the data into a new `GstMemory` which is contiguous. By + mapping all the `GstMemory`s individually and then using scatter-gather + IO we avoid this situation. + This is a preparatory step for adding support to multisocketsink for + sending file descriptors, where a GstBuffer may be made up of several + `GstMemory`s, some of which are backed by a memfd or file, but I think this + patch is valid and useful on its own. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=746150 + +2015-03-13 10:30:43 +0000 Nicolas Dufresne + + * gst-libs/gst/video/video-frame.c: + video-frame: Relax width/height assertion + When doing CROP META it is exepcted that the width and/or height in the + GstVideoMeta is bigger or equal to the caps negotiated size. + +2015-03-12 16:32:31 +0000 Nicolas Dufresne + + * gst-libs/gst/video/gstvideopool.c: + videopool: Choose the biggest buffer size + We should respect what has been negotiated. + +2015-03-12 10:06:15 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: recover from EOS when searching for chain in push mode + If we get EOS when we're trying to build a chain, we disable seeking + and continue instead of posting an error. This can happen for corner + cases such as a stream with a video that stops before the end, for + instance. + https://bugzilla.gnome.org/show_bug.cgi?id=745980 + +2015-03-11 16:46:38 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: fix seeking in files with a "missing" stream + When looking for pages when seeking, we stop looking for non sparse + streams if we don't find one within a given threshold. This fixes + seeking filling up queues and blocking in corner cases such as an + audio file with a pathological 1 frame video stream (yes, I saw one). + https://bugzilla.gnome.org/show_bug.cgi?id=745980 + +2015-03-13 01:06:57 +1100 Jan Schmidt + + * docs/libs/gst-plugins-base-libs-docs.sgml: + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/gstvideometa.c: + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-dither.c: + * gst-libs/gst/video/video-resampler.c: + * gst-libs/gst/video/video-resampler.h: + * gst-libs/gst/video/video-scaler.c: + * gst/videoscale/gstvideoscale.h: + docs: Add new video functions and objects. Cleanup a little. + Add GstVideoChroma, GstVideoDither, GstVideoScaler and friends to the docs. + Remove and clean up a few obsolete/deleted refs and typos + +2015-03-12 12:17:11 +0000 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Disconnect signals and invalidate group if it fails to activate + Otherwise playbin might move to the group directly after EOS of the next + group, and then error out again. + +2015-02-01 03:39:07 +1100 Jan Schmidt + + * ext/theora/gsttheoradec.c: + * ext/theora/gsttheoradec.h: + theoradec: Fix decoding in the presence of GstVideoCropMeta + Store the video info of the internal frame decode width/height + separate to the exposed (cropped) frame info, so that it can be + used for mapping the downstream allocated video frame buffer correctly + when using GstVideoCropMeta. + Fixes playback of files with sizes that aren't a multiple of 16-pixels + width or height. + https://bugzilla.gnome.org/show_bug.cgi?id=741030 + +2015-03-03 15:18:04 +0800 Song Bing + + * tests/check/pipelines/streamsynchronizer.c: + streamsynchronizer: Should wait state change complete before start another state change + Should wait state change complete before start another state change. + Can't ensure can received async-done message when state change from PLAYING to PAUSED. + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-02-27 16:40:23 +0800 Song Bing + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Remove unnecessary ERROR message. + Remove unnecessary ERROR message. + Push GAP will fail as flushing. Needn't ERROR message. + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-03-05 17:42:53 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + oggdemux: do not send seek events from the streaming thread + This will usually deadlock, despite this patch being in master for + quite some time and working fine. Nevertheless, we deem it to be + not working, disregarding facts. + As such, we fix it by keeping track of seek events, and sending + them upstream from a separate thread. Buffers are then discarded + till we get a new segment with the expected seqnum. + +2015-02-23 13:07:41 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + oggdemux: set correct seqnum on segment events after a seek in push mode + There is already a seqnum field for this, which was used to overwrite + the seqnum that was set by the push specific code. + +2015-02-23 11:30:36 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: try harder to query duration from upstream + READY->PAUSED can be too early as souphttpsrc can get the HTTP + headers after this. Try again in the chain function. + Also use seeking query to disable seeking if upstream reports + being unseekable. + +2014-10-31 10:55:14 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: add non flushing time seeking in push mode + Some resetting code has to be done in the NEW_SEGMENT + event handler, instead of the missing FLUSH_STOP one. + Segment base was also wrongly accounted for. This was hidden + by the fact that flushing resets the base. + A discontinuity is now also signalled on seeking. We have to + also ensure that the discontinuity "sticks" till a buffer + with a valid timestamp goes out, or the audio decoder base + class will ignore the discontinuity for purposes of keeping + track of the current time. + This allows using non flushing segment seeks for looping + HTML audio in particular, and more generally non flushing seeks. + https://bugzilla.gnome.org/show_bug.cgi?id=729198 + +2015-02-04 17:13:44 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: fix wrong first granule + The code was using the first nonnegative granulepos to seed the + granule tracking, which appeared to work since headers have zero + granulepos. However, this does not work for files with a hole at + start, which are common in live streaming. + The correct behavior is to look for the first granule, and subtract + the duration of all the packets finishing on this page. + The function which does this relies on the fact that the ogg_stream + structure can be duplicated by shallow copy, in order to pull the + packets from the first page(s) on the copy without affecting the + original stream state. + +2015-03-11 09:48:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix border handling of YUY2 and friends + Don't draw the border in groups of 4 pixels for YUY2 but instead in + groups of 2 with alternating U and V. This avoids a crash on odd width + borders. + +2015-03-11 09:47:23 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: force yuv conversion for border + Make sure we always do yuv conversion for the border. + +2015-03-10 17:29:51 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: fix A422 subsampling description + +2015-03-10 15:12:30 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add table based matrix8 implementation + Based on patch from Mozzhuhin Andrey + Add a table based matrix8 multiplication implementation. The algorithm + does not do any clipping so we need to make sure we never call this on + input that might need to be clipped. In general, this algorithm is + 2 times faster than the orc optimized one and would be chosen for all + RGB -> YUV conversions and some YUV->YUV and RGB->RGB conversions. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732186 + +2015-03-10 11:55:11 +0100 Wim Taymans + + * gst/videotestsrc/gstvideotestsrc.c: + * gst/videotestsrc/gstvideotestsrc.h: + * gst/videotestsrc/videotestsrc.c: + * gst/videotestsrc/videotestsrc.h: + videotestsrc: add all colors mode + +2015-03-10 10:19:22 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-format.h: + * gst-libs/gst/video/video-info.c: + video: Add support for 10 bit planar AYUV formats + +2015-03-10 09:27:08 +0000 Tim-Philipp Müller + + * ext/vorbis/gstvorbisparse.c: + * gst-libs/gst/rtsp/gstrtsprange.c: + * gst/playback/gstsubtitleoverlay.c: + * gst/volume/gstvolume.c: + * sys/xvimage/xvimagepool.c: + * tests/check/libs/rtpbasedepayload.c: + * tests/check/libs/video.c: + Fix double semicolons + +2015-03-09 21:35:59 -0400 Olivier Crete + + * gst/videorate/gstvideorate.c: + videorate: Accept any capsfeatures + +2015-03-09 16:28:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-info.c: + video-info: validate parsed colorimetry + Validate the parsed colorimetry and reset to defaults when we get RGB + with a matrix or YUV without a matrix. + +2015-03-09 16:01:19 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: detect identity matrix + Do nothing if we have an identity matrix conversion. + +2015-03-09 15:58:50 +0100 Wim Taymans + + * gst-libs/gst/video/video-info.c: + video-info: use default colorimetry on error + When we fail to parse the colorimetry property, fall back to the default + colorimetry for the format and dimension instead of leaving things + undefined. + +2015-03-09 11:25:41 +0000 Luis de Bethencourt + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: unused value + Value set in ret is immediately overwritten in the next line outside of the if + block. Run reset but don't store return. + CID #1226470 + +2015-03-09 12:13:44 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: only convert to/from rgb when needed + Only use the YUV->RGB matrix when we have YUV as input and only use the + matrix when we need to make YUV output. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745780 + +2015-03-09 11:12:46 +0100 Sebastian Dröge + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtpbuffer: Link to an explanation why the seqnum comparison function does the right thing even for wraparounds + +2015-02-22 21:13:35 +0100 Mark Nauwelaerts + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: only return EOS upon clipping if applicable + See also https://bugzilla.gnome.org/show_bug.cgi?id=709224 + +2015-02-22 21:11:50 +0100 Mark Nauwelaerts + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: only return EOS upon clipping if applicable + See also https://bugzilla.gnome.org/show_bug.cgi?id=709224 + +2015-03-07 16:49:07 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: Update orc generated C files + +2015-03-06 12:54:56 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add transfer full annotation for config + +2015-03-06 09:30:51 +0530 Ravi Kiran K N + + * gst-libs/gst/video/video-converter.c: + video-converter: correct right-border location for YUY2, YVYU, UYVY + Remove 'r_border /= 2' in convert_fill_border(). It doesn't + take the right border to correct location. + https://bugzilla.gnome.org/show_bug.cgi?id=745719 + +2015-03-05 12:31:06 +0100 Sebastian Dröge + + * gst/volume/gstvolume.c: + volume: Explicitly cast integers to doubles and then back to integers after multiplication + gcc 4.9.1 on ARM seems to have a bug that causes it to cast the float to an + integer first, resulting in a 0 scale factor for volume < 1.0. + As a side effect this change here will also improve accuracy of the result a + bit because we go via doubles instead of floats. + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65325 + https://bugzilla.gnome.org/show_bug.cgi?id=745667 + +2015-03-05 09:52:18 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: avoid scaler when size is unchanged + +2015-03-04 16:45:35 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add horizontal 2tap u16 orc function + Add slightly faster u16 horizontal resampler orc function. + +2015-03-04 12:28:47 +0100 Wim Taymans + + * tests/check/libs/video.c: + check: add another generic converter test + Run conversion and scaling with borders. + +2015-03-04 12:21:33 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * tests/check/libs/video.c: + video-converter: don't reuse the input line when adding borders + When we need to add borders, we need a writable input line, so + don't reuse the source memory directly. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745207 + +2015-03-03 16:36:20 -0500 Nicolas Dufresne + + * ext/pango/gstbasetextoverlay.c: + textoverlay: Re-render if video size changed + https://bugzilla.gnome.org/show_bug.cgi?id=745554 + +2015-03-03 22:56:37 +0530 Arun Raghavan + + * gst-libs/gst/audio/gstaudiobasesink.c: + * gst-libs/gst/audio/gstaudiosink.c: + audiobasesink: Reset audio clock if necessary + When the ringbuffer is deactivated and then acquired, if the audio clock + provided by the sink gets reset to zero, we need to add an offset to the + clock to make sure that subsequent samples are written out at the right + times. While we need to leave this to derived classes to take care of + when they provide their own clock (since that clock may or may not be + reset to zero), we can do this ourselves if we know the provided clock + is our own (which does reset to zero on a re-acquire). + +2015-03-02 16:42:23 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: avoid making scalers for outsize == 0 + +2015-03-02 16:33:09 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + video-converter: v-resample enough pixels + When we are using the fast linear resampler, use the ->inc to calculate + the first and last pixel we need so that we can do vertical resampling + on the right amount of pixels. + +2015-03-02 15:07:34 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc.orc: + video-orc: fix unpack functions for RGB/RGB15 on BE + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337 + +2015-03-02 13:27:23 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-format: more fixes for big endian + +2015-03-02 12:26:23 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-format: add big-endian versions of RGB/BGR 15/16 pack/unpack + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337 + +2015-02-28 13:31:41 +0000 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: fix compiler warning + ‘return’ with no value, in function returning non-void + +2015-02-28 12:26:21 +0000 Tim-Philipp Müller + + * tools/gst-play-1.0.1: + * tools/gst-play.c: + gst-play: add keyboard shortcut to cycle through trick modes + Make "t" activate trick modes and cycle through the various + modes. + +2015-02-28 11:37:27 +0000 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: fix indentation + Prevent gst-indent from messing up indentation, it + really doesn't like the G_GNUC_PRINTF thing here. + +2015-02-27 20:22:59 +0000 Tim-Philipp Müller + + * tests/check/libs/audiodecoder.c: + * tests/check/libs/audioencoder.c: + * tests/check/libs/videodecoder.c: + * tests/check/libs/videoencoder.c: + tests: fix crashes in {audio,video}{decoder,encoder} tests on 32-bit + Don't feed 64-bit integer variable into vararg function that expects + an unsigned integer to go with GST_TAG_TRACK_NUMBER. This would + cause crashes on 32-bit platforms, and if not that then test + failures if the comparisons fail later (at least on big endian + platforms). + +2015-02-27 15:07:36 -0500 Olivier Crête + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: description: Make static strings static + Otherwise, they're not guaranteed to still be valid when leaving the scope. + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-27 14:28:35 +0000 Tim-Philipp Müller + + * tests/check/libs/pbutils.c: + tests: pbutils: more checking of returned description strings + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-27 00:36:43 +0530 Arun Raghavan + + * gst/adder/gstadder.c: + adder: Drop custom latency querying logic + The default latency query handler now implements the same logic already. + +2015-02-26 14:47:28 +0000 Luis de Bethencourt + + * gst-libs/gst/video/video-converter.c: + video-converter: remove check for below zero for unsigned int + CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative + number since it in an unsigned integer. Removing that check and only checking + if it is bigger than max and setting it appropriately. + CID #1271606 + +2015-02-26 12:06:23 +0100 Edward Hervey + + * gst/playback/gstdecodebin2.c: + playback: Fix broken GList modification + When we modify a GList (via g_list_delete_link), always reassign the + new head to the original GList. Otherwise we end up with + filtered_errors being corrupt (the head might have been the element + removed) + +2015-02-26 11:06:35 +0000 Tim-Philipp Müller + + * tools/gst-play-1.0.1: + gst-play: add new keyboard shortcuts to man page + +2015-02-26 10:57:56 +0000 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: more fine-grained playback rate control + Use smaller steps for lower rates to allow more + fine-grained control. Handle jump across 0 properly + from both sides (just flip direction where we would + have gone down to 0 instead). Don't artificially + limit rates to +/- 10x. Print new rate. + https://bugzilla.gnome.org/show_bug.cgi?id=745174 + +2015-02-26 10:20:20 +0000 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: stash current playback rate in app structure + https://bugzilla.gnome.org/show_bug.cgi?id=745174 + +2015-02-25 18:52:11 +0100 Víctor Manuel Jáquez Leal + + * tools/gst-play.c: + gst-play: support changing the playback rate in interactive mode + It is fun to have this feature, also it is useful for testing decoders. + https://bugzilla.gnome.org/show_bug.cgi?id=745174 + +2015-02-25 17:00:34 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: we can use the scaler without scalers to copy + +2015-02-25 16:50:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: only make a scaler when we are scaling + Only make a scaler when we are actually doing any scaling. Without + scalers, the scale function will simply do a copy. + +2015-02-25 16:49:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: add support for copy + When no scalers are given, simply do a copy of the requested area. + +2015-02-25 16:15:52 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: activate scaler fastpath depending on method + Only activate the scaler fastpath for x2 up and downscale when the + scaler method is respectively nearest and linear because that is what + those fastpaths really implement. + +2015-02-25 15:33:26 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: add scaler optimization + If we are vertically downscaling, it is better to first downscale and + then do the horizontal scaling in most cases. + +2015-02-25 15:32:57 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: remove unused case + +2015-02-25 11:38:17 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: don't overwrite border alpha + Let border alpha and image alpha be independent. + +2015-02-24 17:33:57 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: use 1.0 as default alpha + +2015-02-24 17:26:31 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-converter: add alpha handling + Add support for alpha. Make it possible to copy, set and multiply the + alpha value of a frame during conversion. + Set the border alpha to 0xff by default. + Go over some of the fastpaths and add alpha handling. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745006 + +2015-02-24 17:20:53 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix chroma subsampling + Also adjust the output line number with the offset. + +2015-02-24 10:01:18 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: disable fastpath when scaling and gamma + Disable the fastpath when scaling and doing gamma remap. + +2015-02-24 09:54:18 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: don't do gamma on alpha channel + The alpha channel is not supposed to be gamma encoded. + +2015-02-24 16:06:08 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin: fix deadlock when resetting buffering + This function is static, and only ever called with the expose lock + taken. It thus has no reason to take this lock itself. + This was introduced by one of my locking fixes from 741355. + https://bugzilla.gnome.org/show_bug.cgi?id=741355 + +2015-02-24 12:38:10 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-converter.c: + video-converter: minor docs fix + +2014-05-27 13:54:06 +0000 Vincent Penquerc'h + + * gst/playback/gstplaybin2.c: + playbin: forward template and ring buffer settings to existing decodebins + https://bugzilla.gnome.org/show_bug.cgi?id=744844 + +2015-02-23 17:24:52 +0000 Luis de Bethencourt + + * gst/playback/gstdecodebin2.c: + decodebin: move null check + Check if dbin->decode_chain is NULL before running drain_and_switch_chains() + because if it is, we shouldn't run that function or it will segfault. + CID #1271074 + +2015-02-23 01:32:14 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Don't send pending events before decode + Make sure to update the output segment to track the segment + we're decoding in, but don't actually push it downstream until + after buffers are decoded. + https://bugzilla.gnome.org/show_bug.cgi?id=744806 + +2015-02-08 05:19:25 +1100 Jan Schmidt + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Add drain() vfunc + drain() is a new vfunc which does what finish() does, while + explicitly requiring the decoder be able to continue processing + data afterward. + https://bugzilla.gnome.org/show_bug.cgi?id=734617 + +2015-02-22 16:57:57 +0100 Mark Nauwelaerts + + * gst-libs/gst/video/gstvideodecoder.c: + Revert "videodecoder: drain current segment upon new one to ensure correct flow return" + This reverts commit cc1b4eaf9ebe4568f9c2c64338cef1b2edbdca3f. + See https://bugzilla.gnome.org/show_bug.cgi?id=734617 + +2015-02-22 16:57:50 +0100 Mark Nauwelaerts + + * gst-libs/gst/audio/gstaudiodecoder.c: + Revert "audiodecoder: drain current segment upon new one to ensure correct flow return" + This reverts commit 696b8cdc40f033ff0a45ebe620279130152fb2f8. + See https://bugzilla.gnome.org/show_bug.cgi?id=734617 + +2015-02-21 17:42:08 +0100 Mark Nauwelaerts + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: drain current segment upon new one to ensure correct flow return + See also https://bugzilla.gnome.org/show_bug.cgi?id=709224 + +2015-02-21 17:41:50 +0100 Mark Nauwelaerts + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: drain current segment upon new one to ensure correct flow return + See also https://bugzilla.gnome.org/show_bug.cgi?id=709224 + +2015-02-20 12:34:11 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Only consider non-parser factories for generating the post-parser capsfilter caps + Otherwise if there are multiple parsers we would most likely break negotiation + of the stream-format/alignment wanted by the decoders as parsers generally + support all possible stream-formats and alignments. + +2015-02-19 15:51:19 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + audio: video: fix a few GI annotations + transfer-full -> transfer full + @Since -> Since + +2015-02-05 12:07:50 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin: fix deadlock between downward state change and pad addition + If caps on a newly added pad are NULL, analyze_new_pad will try to + acquire the chain lock to add a probe to the pad so the chain can + be built later. This comes from the streaming thread, in response + to headers or other buffers causing this pad to be added, so the + stream lock is taken. + Meanwhile, another thread might be destroying the chain from a + downward state change. This will cause the chain to be freed with + the chain lock taken, and some elements are set to NULL here, which + can include the parser. This causes pad deactivation, which tries + to take the element's pad's stream lock, deadlocking. + Fix this by keeping track of which elements need setting to NULL, + and only do this after the chain lock is released. Only the chain + manipulation needs to be locked, not the elements' state changes. + https://bugzilla.gnome.org/show_bug.cgi?id=741355 + +2015-02-04 11:46:09 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin: guard against the decode chain going while a pad is added + https://bugzilla.gnome.org/show_bug.cgi?id=741355 + +2015-02-03 17:06:43 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin: possible fix for deadlock when spamming "next song" + There was a deadlock between a thread changing decodebin/demuxer + state from PAUSED to READY, and another thread pushing data + when starting. + From the stack trace at + https://bug741355.bugzilla-attachments.gnome.org/attachment.cgi?id=292471, + I deduce the following is happening, though I did not reproduce the + problem so I'm not sure this patch fixes it. + The streaming thread (thread 2 in that stack trace) takes the demuxer's + sink pad's stream lock in gst_ogg_demux_perform_seek_pull and will + activate a new chain. This ends up causing the expose lock being taken + in _pad_added_cb in decodebin. + Meanwhile, a state changed is triggered on thread 1, which takes the + expose lock in decodebin in gst_decode_bin_change_state, then frees + the previous chain, which ends up calling gst_pad_stop_task on the + demuxer's task, which in turn takes the demuxer's sink pad's stream + lock, deadlocking as both threads are now waiting for each other. + https://bugzilla.gnome.org/show_bug.cgi?id=741355 + +2015-02-18 20:58:15 -0300 Thiago Santos + + * gst-libs/gst/tag/gsttagdemux.c: + tagdemux: ensure tags have been fetched before pulling data + Otherwise upstream can get confused about offsets as there will + be a jump once the tags have been parsed due to the stripped area. + If upstream pulls from 0 to 100, and then tagdemux does the + tag reading and finds out that the first 200 bytes are the tag, the + next pull from upstream will have an offset of 200 bytes. So + upstream will get the following data: + 0 - 100, 300 - (EOS), as it will continue requesting from where + it has last stopped, but tagdemux will add an offset to skip the + tags. + This patch makes sure that the tags have been parsed and skipped + since the first pull range call. + https://bugzilla.gnome.org/show_bug.cgi?id=744580 + +2015-02-19 01:30:05 +0200 Sebastian Dröge + + * gst/playback/gsturidecodebin.c: + uridecodebin: Reset the default query return value when the iterator has to resync + +2015-02-19 01:21:47 +0200 Sebastian Dröge + + * gst/playback/gsturidecodebin.c: + uridecodebin: Let the latency query fail if one of the source queries fails + +2015-02-18 11:34:15 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: description: fix MPEG-2 video profiles in description + We would accidentally use the profile nick as profile name + in the description for MPEG video that's not version 4. + +2015-01-29 18:49:45 -0500 Olivier Crête + + * gst/playback/gsturidecodebin.c: + uridecodebin: Pass object, not GValue to debug print + +2015-02-16 23:54:28 +0000 Tim-Philipp Müller + + * ext/libvisual/gstaudiovisualizer.c: + audiovisualizer: don't use private GMutex implementation details + Don't use private GMutex implementation details to check + whether it has been freed already or not. Just turn dispose + function into finalize function which will only be called + once, that way we can just clear the mutex unconditionally. + +2015-02-15 13:51:36 +0800 Song Bing + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Use the same waiting function for EOS and stream switches + Also improve the waiting condition for stream switches, which was assuming + before that the condition variable will only stop waiting once when it is + signaled. But the documentation says that there might be spurious wakeups. + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-01-26 11:14:13 +0800 Song Bing + + * tests/check/Makefile.am: + * tests/check/pipelines/streamsynchronizer.c: + streamsynchronizer: Unit test for streamsynchronizer's EOS handling + Test that a pipeline can change from PLAYING to PAUSED and back in + the following scenarios: + 1. One track reach EOS after pushed some buffers while another track + still pushes buffers + 2. One track reach EOS without buffers while another track still pushes + buffers + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-01-12 17:40:25 +0800 Song Bing + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: Send GAP events from the pads' streaming threads + Change the GAP events that are currently sent from the chain function of + the current pad to all other EOS pads. They should instead be sent from + their own streaming threads. + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-01-12 16:08:33 +0800 Song Bing + + * gst/playback/gststreamsynchronizer.c: + * gst/playback/gststreamsynchronizer.h: + streamsynchronizer: Send GAP event to finish preroll when change state from PLAYING to PAUSED + Wait in the event function when EOS is received until all pads are EOS + and then forward the EOS event from each pads own event function. + Also send a new GAP event for EOS pads from the event function whenever + going from PLAYING->PAUSED by shortly waking up the GCond. This is needed + to allow sinks to pre-roll again, as they did not receive EOS yet because + we blocked that, but also will never get data again. + https://bugzilla.gnome.org/show_bug.cgi?id=736655 + +2015-02-16 09:48:03 +0200 Sebastian Dröge + + * gst-libs/gst/pbutils/codec-utils.c: + Revert "codec-utils: Handle the two rext profiles for h265" + This reverts commit 19b93566801a56e7b043a670b7edcf8f2da06619. + These two "profiles" are actually a complete set of profiles, which we will + need to handle separately. Unfortunately it seems like we need information + from the SPS to detect the exact profile. + +2015-02-15 20:08:36 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: description: move some code into utility function + +2015-02-15 20:05:13 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + * tests/check/libs/pbutils.c: + pbutils: descriptions: add H.265 profile to description if available + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-15 19:03:38 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + * tests/check/libs/pbutils.c: + pbutils: descriptions: add MPEG-4 video profile to description if available + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-15 18:37:38 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + * tests/check/libs/pbutils.c: + pbutils: descriptions: add Dirac/VC-2 profile to description if available + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-15 18:14:18 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + * tests/check/libs/pbutils.c: + pbutils: descriptions: add H.264 profile to description if available + https://bugzilla.gnome.org/show_bug.cgi?id=673976 + +2015-02-13 22:56:00 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/install-plugins.c: + install-plugins: fix indentation and add Since marker + Forgot to squash this into the actual patch before pushing. + +2015-02-13 22:49:04 +0000 Tim-Philipp Müller + + * docs/libs/gst-plugins-base-libs-sections.txt: + * win32/common/libgstpbutils.def: + install-plugins: add new API to exports .def and to docs + https://bugzilla.gnome.org/show_bug.cgi?id=744465 + +2015-02-03 10:47:11 +0100 Kalev Lember + + * gst-libs/gst/pbutils/install-plugins.c: + * gst-libs/gst/pbutils/install-plugins.h: + install-plugins: Add API to suppress confirmation before searching + The new gst_install_plugins_context_set_confirm_search() API can be used + to pass a hint to modify the behaviour of the external installer + process. + https://bugzilla.gnome.org/show_bug.cgi?id=744465 + +2015-02-02 16:16:46 +0100 Kalev Lember + + * gst-libs/gst/pbutils/install-plugins.c: + * gst-libs/gst/pbutils/install-plugins.h: + install-plugins: Add API for passing desktop ID and startup ID + The new gst_install_plugins_context_set_desktop_id() and + gst_install_plugins_context_set_startup_notification_id() API can be + used to pass extra details to the external installer process. + https://bugzilla.gnome.org/show_bug.cgi?id=744465 + +2015-02-12 12:08:16 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video-orc: update with new methods + +2015-02-12 11:38:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-orc.orc: + video-format: add orc function for RGB15/16 unpack + +2015-02-10 21:57:02 -0800 Stefan Sauer + + * gst/playback/gstplaybin2.c: + playbin: improve debug log + Log the human readable pad_link_return desc as well. + +2015-02-11 15:57:54 +0200 Sebastian Dröge + + * gst-libs/gst/pbutils/codec-utils.c: + codec-utils: Handle the two rext profiles for h265 + These values are for now taken from x265 and need to be checked against + the spec. Especially we need to check if information from other fields + need to be taken into consideration too, e.g. the bit depth and chroma + index from the SPS. + This however makes 4:4:4 output of x265enc actually work. + +2015-02-11 13:43:11 +0100 Sebastian Dröge + + * gst-libs/gst/app/gstappsrc.c: + * gst-libs/gst/audio/gstaudiobasesink.c: + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + * gst/adder/gstadder.c: + * gst/playback/gsturidecodebin.c: + Improve and fix LATENCY query handling + This now follows the design docs everywhere, especially the maximum latency + handling. + https://bugzilla.gnome.org/show_bug.cgi?id=744106 + +2015-02-11 13:32:25 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + * win32/common/libgstvideo.def: + video-scaler: add 2d scaler + Make a convenience function that combines 2 scalers to perform a 2d + scale. This removes quite a bit of overhead in method calls when doing a + typical scale and it also can reuse a piece of unused memory in the + vertical scaler. + Use the 2d scaler in video-converter and remove the other scalers and + temp memory. + +2015-02-10 16:43:03 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: Fix YUY2 formats and friends + Only merge scalers for selected formats. + Use nearest neighbour scaling for chroma when doing nearest neighbour + for the luma. + Also fastpath GRAY16_OE in nearest neighbour. + configure parameters correctly for packed fastpath. + +2015-02-10 16:40:21 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: Small performance tweaks + Small performance tweaks for RGB and friends. + Add, but ifdef out, alternative nearest neighbour scaling, it is slower + than the current table based version. + Use memcpy instead of orc_memcpy because it is measurably faster. + Fix YUY2 and friends vertical scaling. + +2015-02-10 16:44:38 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-scaler.c: + video-scaler: Guard against (impossible) bits!=16 && bits!=8 case to fix compiler warning with clang + video-scaler.c:1331:14: error: variable 'func' is used uninitialized whenever 'if' condition is false + [-Werror,-Wsometimes-uninitialized] + } else if (bits == 16) { + ^~~~~~~~~~ + video-scaler.c:1348:3: note: uninitialized use occurs here + func (scale, src_lines, dest, dest_offset, width, n_elems); + ^~~~ + video-scaler.c:1331:10: note: remove the 'if' if its condition is always true + } else if (bits == 16) { + ^~~~~~~~~~~~~~~~ + video-scaler.c:1260:27: note: initialize the variable 'func' to silence this warning + GstVideoScalerVFunc func; + ^ + = NULL + +2015-02-10 16:38:05 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Use correct enum type to fix compiler warnings with clang + video-converter.c:3406:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different + enumeration type 'GstFormat' [-Werror,-Wenum-conversion] + format = convert->fformat[plane]; + ~ ^~~~~~~~~~~~~~~~~~~~~~~ + video-converter.c:3413:44: error: implicit conversion from enumeration type 'GstFormat' to different enumeration + type 'GstVideoFormat' [-Werror,-Wenum-conversion] + gst_video_scaler_horizontal (h_scaler, format, + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + video-converter.c:3471:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different + enumeration type 'GstFormat' [-Werror,-Wenum-conversion] + format = convert->fformat[plane]; + ~ ^~~~~~~~~~~~~~~~~~~~~~~ + video-converter.c:3487:42: error: implicit conversion from enumeration type 'GstFormat' to different enumeration + type 'GstVideoFormat' [-Werror,-Wenum-conversion] + gst_video_scaler_vertical (v_scaler, format, lines, d + out_x, i, + ~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + video-converter.c:3551:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different + enumeration type 'GstFormat' [-Werror,-Wenum-conversion] + format = convert->fformat[plane]; + ~ ^~~~~~~~~~~~~~~~~~~~~~~ + video-converter.c:3569:46: error: implicit conversion from enumeration type 'GstFormat' to different enumeration + type 'GstVideoFormat' [-Werror,-Wenum-conversion] + gst_video_scaler_horizontal (h_scaler, format, + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + video-converter.c:3577:42: error: implicit conversion from enumeration type 'GstFormat' to different enumeration + type 'GstVideoFormat' [-Werror,-Wenum-conversion] + gst_video_scaler_vertical (v_scaler, format, lines, d + out_x, i, + ~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + +2015-02-10 15:25:04 +0000 Luis de Bethencourt + + * gst-libs/gst/video/video-scaler.c: + video-converter: bits variable always set + In function gst_video_scaler_vertical() the bits variable is always + set to either 8 or 16 in every possible format. No need to initialize it. + If the format isn't valid it goes to no_func, so there is no need to + handle the case of bits not being 8 or 16. + CID #1268401 + +2015-02-10 11:15:22 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: only enable backlog for interlaced video + Skip lines we don't need. + +2015-02-10 09:30:44 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add fastpath for NV formats + +2015-02-10 09:20:12 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: fix pstride of NV16 and NV24 formats + +2015-02-09 18:01:30 +0000 Tim-Philipp Müller + + * gst-libs/gst/rtsp/gstrtspmessage.c: + * tests/check/libs/rtsp.c: + rtspmessage: map headers we know that are added by string to their enum + That way we can look them up by their field enum later as well. + +2015-02-09 17:49:12 +0000 Tim-Philipp Müller + + * tests/check/libs/rtsp.c: + tests: rtsp: add some unit tests for new GstRTSPMessage API + +2015-02-09 16:24:19 +0000 Tim-Philipp Müller + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/rtsp/gstrtspmessage.c: + * gst-libs/gst/rtsp/gstrtspmessage.h: + * win32/common/libgstrtsp.def: + rtspmessage: add API to add and get custom headers + Add API to add and get custom headers that are not + covered by our header fields enum. This is backwards + compatible in that it will also work for our defined + fields, so if we ever add a new header field to the + enum, get_header_by_name() for the same header string + will still work. + API: gst_rtsp_message_add_header_by_name() + API: gst_rtsp_message_take_header_by_name() + API: gst_rtsp_message_remove_header_by_name() + API: gst_rtsp_message_get_header_by_name() + +2015-02-09 17:51:00 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-converter: Add more fastpaths + Add fastpaths for all planar conversion and scaling. + Improve gray and alpha handling. + Add option to specify the chroma resampler method and set to linear as + default. + +2015-02-09 13:20:43 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add generic planar scaler/converter + Add code to convert and scale between any planar format and use it in + the fastpaths of some planare converters. + +2015-02-09 10:20:37 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Fix compiler warnings by using the correct enum type + video-converter.c:3645:24: error: implicit conversion from enumeration type + 'GstFormat' to different enumeration type 'GstVideoFormat' + [-Werror,-Wenum-conversion] + convert->fformat = fformat; + ~ ^~~~~~~ + video-converter.c:3667:24: error: implicit conversion from enumeration type + 'GstFormat' to different enumeration type 'GstVideoFormat' + [-Werror,-Wenum-conversion] + convert->fformat = fformat; + ~ ^~~~~~~ + video-converter.c:3963:50: error: implicit conversion from enumeration type + 'const GstVideoFormat' to different enumeration type 'GstFormat' + [-Werror,-Wenum-conversion] + if (!setup_scale (convert, transforms[i].fformat)) + ~~~~~~~~~~~ ~~~~~~~~~~~~~~^~~~~~~ + +2015-02-07 03:56:05 +1100 Jan Schmidt + + * ext/ogg/gstoggmux.c: + oggmux: Don't pass GstCollectData as a GstObject to GST_DEBUG + +2015-02-06 13:39:04 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + video-converter: add more scaler fastpaths + +2015-02-06 13:25:51 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + video-orc: fix loading of param + param loading ignores the x4, loading only part of the param. + +2015-02-06 12:35:01 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add border and crop to more fastpaths + +2015-02-06 12:28:54 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix border for YUY2 and friends + Convert as many pixels as the max subsampling so that we convert a + complete group of pixels. + +2015-02-06 15:39:14 +0530 Ravi Kiran K N + + * gst-libs/gst/video/video-converter.c: + video-converter: support AYUV border + Convert the border color from ARGB to AYUV, using + colorimetry matrix when output format is YUV. + https://bugzilla.gnome.org/show_bug.cgi?id=741640 + +2015-02-06 10:57:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix swapped border width + And also do nothing when there is no border. + +2015-02-06 10:56:21 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: actually draw the border in some fastpaths + Don't forget to draw the border after doing the fastpath conversion. + +2015-02-06 10:53:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: clamp width and heigth + Clamp the width and height based on the in and out offsets. + +2015-02-06 10:50:09 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: add unaligned fallbacks + Add fallback C implementations for when we can't call the ORC function + because of bad alignment. + +2015-01-28 05:20:19 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Where possible, skip decode for GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO + If we have timestamps on input buffers and are in trickmode no-audio + mode, then don't pass anything to the subclass for decode and simply + send gap events downstream + Only for forward playback for now - reverse requires accumulating + GAP events and pushing out in reverse order. + https://bugzilla.gnome.org/show_bug.cgi?id=735666 + +2015-02-05 17:44:59 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: Re-work GAP buffer and trick-mode handling + In trickmode no-audio mode, or when receiving a GAP buffer, + discard the contents and render as a GAP event instead. + Make sure when rendering a gap event that the ring buffer will + restart on PAUSED->PLAYING by setting the eos_rendering flag. + This mostly reverts commit 8557ee and replaces it. The problem + with the previous approach is that it hangs in wait_preroll() + on a PLAYING-PAUSED transition because it doesn't commit state + properly. + https://bugzilla.gnome.org/show_bug.cgi?id=735666 + +2015-02-03 20:38:44 +1100 Jan Schmidt + + * ext/ogg/gstoggdemux.c: + oggdemux: Add a little timestamping debug output + +2015-02-03 01:19:05 +1100 Jan Schmidt + + * ext/theora/gsttheoradec.c: + theora: If no header packets in stream, look for them in the caps + Makes theora work in cases where the header packets are only in the caps + (because theoradec was connected to oggdemux late and missed the + beginning of the stream) + +2015-02-02 22:23:51 +1100 Jan Schmidt + + * ext/theora/gsttheoradec.c: + theora: Remove FIXME and return GST_CUSTOM_FLOW_DROP for header packet handling + This FIXME is easily fixed :) + +2015-01-31 05:12:10 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Remove pointless else{} around some code + +2015-01-31 05:09:46 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Fix reverse playback when there's only one gather set. + The decoder can fail to drain on EOS if there was only one gather + set, because it will never have sent the segment event downstream + and set the output segment, and fail to detect that the rate < 0.0 + Make sure to send pending events before sending all the gather data + for decode. + +2014-10-09 03:31:58 +1100 Jan Schmidt + + * gst-libs/gst/video/video-frame.h: + video: Fix simple typo in GstVideoFrameMapFlags docs + +2015-02-05 17:49:55 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add crop and border to some fastpaths + +2015-02-05 17:18:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-converter: add support for borders in scale fastpath + Add support for borders and cropping in the scaler fastpaths. + +2015-02-05 15:03:24 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: disable fastpath for crop and border + Add crop and border properties to the fastpath table and only select + fastpath functions when it can handle the cropping or borders. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=744028 + +2015-02-04 18:01:51 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + video-converter: add fastpath for some gray formats + +2015-02-04 17:44:31 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + video-converter: add fastpath for some more RGB formats + Add fastpath for RGB and BGR. + Add fastpath for nearest resampling for RGB15 and RGB16 formats. + +2015-02-04 16:37:22 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: skip lines we don't need + Make sure to skip unused lines instead of doing a useless horizontal + resampling. + +2015-02-04 12:08:21 +0000 Luis de Bethencourt + + * gst/videoscale/gstvideoscale.c: + videoscale: fix memory leak + In gst_video_scale_fixate_caps () it can goto done without freeing the memory + of the tmp GstStructure. This makes it go out of scope and leak. + CID #1265766 + +2015-02-04 11:25:54 +0000 Luis de Bethencourt + + * gst-libs/gst/video/video-resampler.c: + video-resampler: make sure params.envelope is initialized + In gst_video_resampler_init () if method is GST_VIDEO_RESAMPLER_METHOD_NEAREST + then params.envelope is not initialized but still used later in line 382. + Make sure this variable is initiliazed to avoid undefined behaviour. + CID #1256568 + +2015-02-03 12:23:06 +0100 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + video{enc,dec}oder: Don't reset latency all the time and handle max=GST_CLOCK_TIME_NONE correctly + max=NONE means that *this* element has no maximum latency. If upstream had a + maximum latency we must not override it with NONE. + +2015-02-03 12:15:25 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + audio{enc,dec}oder: Always directly post latency messages on the bus when the subclass sets the latency + Instead of doing it only in setcaps for the encoder, and never at all for the + decoder. + +2015-02-03 12:12:18 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudioencoder.c: + audio{enc,dec}oder: Handle max_latency == GST_CLOCK_TIME_NONE + And initialize the latencies with 0 and NONE. + +2015-01-28 05:26:06 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: Don't render a GAP silence buffer + Don't render out silence samples to a buffer, just + start the clock running, since any buffer with the + GAP flag will be discarded in render() now anyway. + +2015-01-28 22:42:17 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: Make sure the ringbuffer is started before waiting + Don't call the basesink wait_event implementation until we're sure + the ringbuffer is running, because it might wait on a non-running + clock. + +2015-01-27 02:04:22 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: drop GAP buffers, or all buffers in trickmode no-audio mode + Make the base audio sink throw away buffers marked GAP, or all + incoming buffers when performing a trick play with + GST_SEGMENT_TRICKMODE_NO_AUDIO flag set, and make sure to start + the ringbuffer when that happens so the clock starts running. + Preserve the timing calculations when rendering, so state is all + updated the same, but just don't render samples. + https://bugzilla.gnome.org/show_bug.cgi?id=735666 + +2015-01-29 17:58:27 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + oggdemux: do not throw a flow error on flushing + If the streaming task attempts to read a chain while the pipeline + is stopping (which can happen if the pipeline stops shortly after + start or a new URI being setup in gapless playback case), it will + see a flushing return from upstream, and should then also return + flushing to the caller, rather than emit a flow error. + https://bugzilla.gnome.org/show_bug.cgi?id=722442 + +2015-01-28 17:44:57 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Fix compiler warnings + video-converter.c:3073:48: error: implicit conversion from enumeration type 'GstFormat' to different enumeration type 'GstVideoFormat' + [-Werror,-Wenum-conversion] + gst_video_scaler_horizontal (h_scaler, format, + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + video-converter.c:3081:44: error: implicit conversion from enumeration type 'GstFormat' to different enumeration type 'GstVideoFormat' + [-Werror,-Wenum-conversion] + gst_video_scaler_vertical (v_scaler, format, lines, d, i, out_w); + ~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~ + video-converter.c:3137:24: error: implicit conversion from enumeration type 'const GstVideoFormat' to different enumeration type 'GstFormat' + [-Werror,-Wenum-conversion] + convert->fformat = GST_VIDEO_INFO_FORMAT (in_info); + ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ../../../gst-libs/gst/video/video-info.h:125:43: note: expanded from macro 'GST_VIDEO_INFO_FORMAT' + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ../../../gst-libs/gst/video/video-format.h:361:59: note: expanded from macro 'GST_VIDEO_FORMAT_INFO_FORMAT' + ~~~~~~~~^~~~~~ + video-converter.c:3157:24: error: implicit conversion from enumeration type 'GstVideoFormat' to different enumeration type 'GstFormat' + [-Werror,-Wenum-conversion] + convert->fformat = GST_VIDEO_FORMAT_GRAY8; + +2015-01-28 17:43:59 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: Update orc files + +2015-01-28 17:37:35 +0100 Wim Taymans + + * win32/common/libgstvideo.def: + defs: update + +2015-01-28 17:32:12 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + video-converter: add fast-path scaler for some packed YUV formats + Add fast path scaling for YUY2 and other packed YUV formats. Add a new + method to merge the scalers of the Y and UV components into one scaler. + Add faster horizontal 2tap scaler. + See https://bugzilla.gnome.org/show_bug.cgi?id=741987 + +2015-01-28 17:30:53 +0100 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + videoscale: don't do dithering + +2015-01-28 17:30:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.h: + video-converter: the default is BAYER dithering + +2015-01-28 17:29:45 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: don't do dither when set to NONE + +2015-01-28 11:38:16 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix taps calculation for pstride == 1 + Take pstride into consideration when calculating the scaler taps. + +2015-01-28 04:51:25 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: Make sure the ringbuffer really starts when we need it to + Some audio sink sub-classes (pulsesink) don't start their clock + when the ringbuffer starts, but always have to on EOS. When we + explicitly need to start the ringbuffer, make sure sub-classes will + do it by (ab)using the existing eos_rendering flag. + +2014-12-11 01:54:07 +1100 Jan Schmidt + + * tests/examples/playback/playback-test.c: + playback-test: Support new skip seek flags + Support the new SEEK_TRICKMODE_KEY_UNITS and SEEK_TRICKMODE_NO_AUDIO + flags added to core + https://bugzilla.gnome.org/show_bug.cgi?id=735666 + +2015-01-27 13:39:14 +0000 Luis de Bethencourt + + * gst-libs/gst/audio/gstaudiopack-dist.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst/adder/gstadderorc-dist.c: + * gst/audioconvert/gstaudioconvertorc-dist.c: + * gst/videotestsrc/gstvideotestsrcorc-dist.c: + * gst/volume/gstvolumeorc-dist.c: + orc: update orc files + +2015-01-27 10:28:35 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add fastpath for planar scaling + Add fastpaths for scaling of planar subsampled formats. + See https://bugzilla.gnome.org/show_bug.cgi?id=741987 + +2015-01-27 10:04:11 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add support for monochroma formats + Add support for scaling of images with pstride == 1. This can be used + to scale individual planes later. + Rework some of the scaling code to take the pstride as a parameter. + +2015-01-27 09:51:47 +0100 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + videoscale: disable chroma and matrix operations + Ignore chroma subsampling and color matrix transformations like the + old videoscale used to do. This is to make the performance like it was + before. + See https://bugzilla.gnome.org/show_bug.cgi?id=741987 + +2015-01-26 12:52:40 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: fix GBR unpack + +2015-01-27 01:31:50 +1100 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + audiodecoder: Fix typo in documentation + Fix a couple of harmless warnings in the gtk-doc parsing + +2015-01-23 12:46:41 +0100 Edward Hervey + + * gst-libs/gst/video/video-dither.c: + video: Fix leaked dither object in error cases + Coverity CID : 1256564 + +2015-01-21 15:22:15 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: fix caps leak + Fix leak of caps event and of caps objects when setting caps on sink and src + pads. Sync audiovisualizer class implementation to the one in gst-plugins-bad. + This commit matches c5ef1bee7318f057aa1f542d5a1474b75e85131a in that module. + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-01-21 14:46:15 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: post QoS messages when dropping frames due to QoS + https://bugzilla.gnome.org/show_bug.cgi?id=742875 + +2015-01-21 09:49:47 +0100 Sebastian Dröge + + * ext/cdparanoia/gstcdparanoiasrc.h: + * gst-libs/gst/video/video-format.c: + * gst/audioconvert/audioconvert.c: + * gst/audioconvert/gstaudioquantize.c: + * gst/audioresample/gstaudioresample.c: + * gst/audioresample/resample.c: + Constify some static arrays everywhere + +2015-01-21 09:42:21 +0100 Sebastian Dröge + + * ext/alsa/gstalsa.c: + alsa: Constify channel position table + +2015-01-21 09:41:23 +0100 Sebastian Dröge + + * ext/alsa/gstalsa.c: + alsa: Fix indention + +2015-01-21 08:33:57 +0100 Thomas Roos + + * ext/alsa/gstalsa.c: + alsa: Allow to use 8 bit samples with ALSA + 8 bit samples have no (0) as endianness, not the native endianness. + https://bugzilla.gnome.org/show_bug.cgi?id=739446 + +2015-01-21 09:39:30 +0100 Sebastian Dröge + + * gst-libs/gst/audio/audio-format.c: + audio-format: Constify the audio format table + +2015-01-21 09:37:30 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiosrc.c: + audiosrc: Fill in the correct silence + For unsigned raw formats this is not all zeroes, and for non-raw formats + we just continue to assume all zeroes for now. + https://bugzilla.gnome.org/show_bug.cgi?id=739446 + +2015-01-21 08:47:26 +0100 Thomas Roos + + * gst-libs/gst/audio/gstaudiosink.c: + audiosink: Fill in the correct silence + For unsigned raw formats this is not all zeroes, and for non-raw formats + we just continue to assume all zeroes for now. + https://bugzilla.gnome.org/show_bug.cgi?id=739446 + +2015-01-20 19:14:21 +0100 Sebastian Dröge + + * gst-libs/gst/app/gstappsink.c: + appsink: Only emit EOS signal after all buffers are consumed + Otherwise the application will possibly shut down the pipeline already + because EOS is received, while there are still some buffers pending. + +2015-01-20 15:08:24 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + dcodebin2: fix lock/unlock mismatch on multiqueue overrun + +2015-01-13 16:07:06 +0100 Jan Alexander Steffens (heftig) + + * gst/audioresample/resample.c: + audioresample: Try to prevent endless looping + Speex may decide not to consume any samples because it can't write any. I've + seen a hang during draining caused by the resample loop never terminating. + In that case, resampling happened as normal until olen was 0 but ilen was + still 1. _process_native then reduced ichunk to 0, so ilen never decreased + below 1 and the loop never terminated. + Instead of reverting 684cf44 ({audioresample: don't skip input samples), + break only if all output samples have been produced and speex refuses + to consume any more input samples. + https://bugzilla.gnome.org/show_bug.cgi?id=732908 + +2015-01-19 11:17:18 +0100 Sebastian Dröge + + * gst/videorate/Makefile.am: + videorate: Add $(GST_PLUGINS_BASE_CFLAGS) to be able to find gst/video/video.h + +2015-01-18 14:58:36 -0500 Nicolas Dufresne + + * gst/videorate/Makefile.am: + * gst/videorate/gstvideorate.c: + videorate: Implement allocation query + The videorate element keeps 1 buffer internally. This buffer need + to be requested during allocation query otherwise the pipeline may + stall. + https://bugzilla.gnome.org/show_bug.cgi?id=738302 + +2015-01-18 14:17:07 -0500 Nicolas Dufresne + + * gst/videorate/Makefile.am: + * gst/videorate/gstvideorate.c: + Revert "videorate: Implement allocation query" + This reverts commit 3c04db4a307048db70ee1d08c1d62e26ad9569d8. + +2015-01-18 11:02:00 -0500 Nicolas Dufresne + + * gst/videorate/Makefile.am: + * gst/videorate/gstvideorate.c: + videorate: Implement allocation query + VideRate keeps 1 buffer in order to duplicate base on closest buffer + relative to targeted time. This extra buffer need to be request + otherwise the pipeline may stall when fixed size buffer pool is used. + https://bugzilla.gnome.org/show_bug.cgi?id=738302 + +2015-01-17 14:51:48 +0100 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Fix compilation + +2015-01-12 14:38:09 +0100 Branislav Katreniak + + * gst/playback/gstdecodebin2.c: + decodebin: do call set_queue_size in no_more_pads_cb + Consider pipeline: gst-launch-1.0 playbin uri=http://example.com/a.ogg + Consider 128kbit audio stream. + As soon as uridecodebin detects the bitrate, it configures its input + queue2 max-size to 32000 bytes. + The 2MB buffer in multiqueue is nearly 2 orders of magnitude bigger. + This non-deterministically drives queue2 buffer anywhere from + 100% to 0% until multiqueue is filled. + This patch sets multiqueue size to 5 buffers early in no_more_pads_cb. + Partly reverts commit db771185ed750627a6a1824c42b651d739e1b4a4. + https://bugzilla.gnome.org/show_bug.cgi?id=740689 + +2015-01-16 15:21:14 +0000 Vincent Penquerc'h + + * gst/playback/gstdecodebin2.c: + decodebin: free old groups when switching groups + Old groups are freed with one switch's delay when switching groups. + They're freed in a scratch thread to avoid delaying the switch. + +2014-12-12 17:02:35 +0000 Vincent Penquerc'h + + * ext/ogg/gstoggmux.c: + oggmux: fix clipped duration determination for non 0 based segments + https://bugzilla.gnome.org/show_bug.cgi?id=740422 + +2015-01-15 10:51:37 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioutilsprivate.c: + audio: Keep caps features when building the downstream filter + Based on 5fd4e3e0b6cc4f30d7b1489a105db946b43f1a9f for video + by Alessandro Decina. + +2015-01-15 13:54:14 +1100 Alessandro Decina + + * gst-libs/gst/video/gstvideoutilsprivate.c: + videoutils: keep caps features in account when building the downstream filter + See 00c2ce6 and https://bugzilla.gnome.org/show_bug.cgi?id=741263 for reference. + +2015-01-14 10:35:34 -0300 Thiago Santos + + * tests/examples/playback/playback-test.c: + examples: playback: add labels with supported seek range + Add the supported seeking range in the advanced seek area. + Also implement seeking querying the pipeline to retrieve those + values and show to the user. It is done in a smaller frequency + compared to the position/duration querying. + +2015-01-13 19:25:52 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: disable pad link checks as it has already been done + Decodebin has already added the element to the bin and should only + select caps compatible pads. It should disable the pad link checks + to avoid doing those again. + https://bugzilla.gnome.org/show_bug.cgi?id=742885 + +2015-01-13 16:58:34 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: cleanup + Shameful fix to a silly mistake in the previous commit. Above email address for + any mockery + +2015-01-13 16:36:09 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: handle the return of the setup function + Make the baseclass future proof by handling the gboolean return of the setup + function. So if/when a child class uses this the base class is ready. + +2015-01-13 16:09:49 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + Revert "visual: remove unnecessary variable" + This reverts commit a91d521a3602f33083405467db9454d422b9da1b. + Being a base class it is better to check the value instead of ignoring it since + a child class could be created that returns valuable information. + +2015-01-13 15:07:56 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: remove unnecessary variable + klass->setup (scope) will always return TRUE since all children of this class + do so, no need to store the return. Besides, the value is overwritten a few + lines down before it is ever used. Save the unnecessary memory and instructions. + CID #1226467 + +2015-01-12 15:27:18 +0000 Luis de Bethencourt + + * ext/libvisual/gstaudiovisualizer.c: + visual: use unused value + ret is assigned but not used and in the next cycle of the loop it is overwritten + with default_prepare_output_buffer (). If there is a flow error the function + should return instead. + CID #1226475 + +2015-01-12 15:56:06 +0100 Stefan Sauer + + * common: + Automatic update of common submodule + From f2c6b95 to bc76a8b + +2015-01-08 21:20:14 +0100 Mark Nauwelaerts + + * gst-libs/gst/audio/gstaudioringbuffer.c: + audioringbuffer: start ringbuffer if needed upon commit + ... to provide for a running clock. + +2015-01-02 14:34:41 +0100 Mark Nauwelaerts + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: fix comment typo + +2015-01-09 15:38:09 +0000 Luis de Bethencourt + + * gst-libs/gst/video/video-dither.c: + video-dither: remove check for below zero for unsigned value + CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative + number since it is an unsigned integer. Removing that check and only checking if + it is bigger than max and setting it appropriately. + CID 1256559 + +2015-01-09 15:28:06 +0000 Luis de Bethencourt + + * gst-libs/gst/video/video-resampler.c: + video-resampler: remove check for below zero for unsigned value + CLAMP checks both if n_taps is '< 0' and '> max_taps'. n_taps will never be a + negative number because it is an unsigned integer. Removing that check and only + making sure it isn't set bigger than max. + CID 1256558 + +2015-01-08 10:45:46 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * gst-libs/gst/video/video-info.c: + video: Add support for BT2020 colorspace (UHD) + +2015-01-07 15:54:58 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: remove useless debug + +2015-01-07 15:52:57 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: add options to control chroma resampling + Add an option to disable chroma resampling. + Improve the matrix option values so that you can choose to use the input + or output matrix or disable conversion. + +2015-01-02 15:27:23 +0000 Tim-Philipp Müller + + * ext/ogg/gstoggmux.c: + oggmux: remove unused enum + +2014-12-31 19:40:20 +0000 Tim-Philipp Müller + + * ext/ogg/gstoggmux.c: + oggmux: fix silly GQueue iteration code + +2014-12-26 20:48:55 +0000 Sam Thursfield + + * gst-libs/gst/pbutils/gstdiscoverer-types.c: + Fix documentation that incorrectly says a return value should be freed + The gst_discoverer_info_get_missing_elements_installer_details() + documentation and annotation says that the return value should be freed + with g_strfreev(), but actually it's owned by the GstDiscovereInfo + object and should definitely not get freed by the caller as well. + https://bugzilla.gnome.org/show_bug.cgi?id=742006 + +2014-12-27 14:44:51 +0530 Nirbheek Chauhan + + * gst-libs/gst/audio/gstaudiobasesrc.c: + audiobasesrc: Explicitly document that buffer-time and latency-time may be ignored + +2014-12-26 18:55:08 -0300 Thiago Santos + + * ext/ogg/gstoggmux.c: + oggmux: only clip by duration if end of buffer is ahead of segment + It might happen that the timestamp is before the segment and the + check would succeed. In this case reducing the duration makes no + sense and would lead to broken results. + +2014-12-22 22:04:41 +0100 Sebastian Dröge + + * gst/videotestsrc/gstvideotestsrc.c: + videotestsrc: Report our latency properly in live mode + While we have no latency at all in theory, any other live source has the + duration of one buffer as minimum latency. Do the same in videotestsrc. + https://bugzilla.gnome.org/show_bug.cgi?id=741879 + +2014-12-22 22:00:26 +0100 Sebastian Dröge + + * gst/audiotestsrc/gstaudiotestsrc.c: + audiotestsrc: Report our latency properly in live mode + While we have no latency at all in theory, any other live source has the + duration of one buffer as minimum latency. Do the same in audiotestsrc. + https://bugzilla.gnome.org/show_bug.cgi?id=741879 + +2014-12-22 09:25:04 -0500 Song Bing + + * gst-libs/gst/video/gstvideopool.c: + * sys/ximage/ximagepool.c: + * sys/xvimage/xvimagepool.c: + videopool: update video alignment after applying + Video buffer pool will update video alignment to respect stride alignment + requirement. But haven't updated it to video alignment in configure. + Which will cause user get wrong video alignment. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741501 + +2014-11-28 14:36:23 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: get the internal time before the clock reset + Otherwise calls to get the clock time might change its internal state + and the internal/external time for calibration get unbalanced leading to + a clock jump + https://bugzilla.gnome.org/show_bug.cgi?id=740834 + +2014-12-22 11:45:53 +0100 Sebastian Dröge + + * MAINTAINERS: + MAINTAINERS: Update my mail address + +2014-12-22 11:38:20 +0100 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + video{en,de}coder: Call reset() before the start() vfunc + This makes sure that the element is in the same state before start() is called + the very first time and every future call after the element was used already. + Also it ensure that we always have a clean state before start(), cleaned the + same way in every case. + +2014-12-22 11:36:58 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: Call reset() before the start() vfunc to guarantee a clean state + The same was done already in the decoder, and we cleaned some state just above + manually that would also be taken care of by reset(). + This makes sure that the element is in the same state before start() is called + the very first time and every future call after the element was used already. + +2014-12-22 11:33:14 +0100 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + video{en,de}coder: Reset the codec after calling the stop() vfunc + The stop() vfunc might mess with some of our fields we have just + reset, which could cause memory leaks or invalid state taken over + to later. + Also the stop() vfunc, or anything called until it from another thread, + might want to be able to use the fields that were just resetted and + become confused because of that. + In the decoder we already had a workaround for things like this happening, + this workaround is not needed anymore. + +2014-12-22 10:45:37 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiobasesink.c: + * gst-libs/gst/audio/gstaudiobasesrc.c: + audiobase{sink,src}: Don't hold the object lock while calling create_ringbuffer() vfunc + The implementation of that vfunc might want to use the object lock for + something too. It's generally not a good idea to keep the object lock while + calling any function implemented elsewhere. + Also the ringbuffer can only be NULL at this point, remove a useless if block. + And in the sink actually hold the object lock while setting the ringbuffer on + the instance. Code accessing this is expected to use the object lock, so do it + here ourselves too. + +2014-12-18 13:24:22 +0100 Sebastian Dröge + + * gst-libs/gst/riff/riff-media.c: + riff-media: Error out early if we observe an invalid audio format + +2014-12-18 13:22:17 +0100 Sebastian Dröge + + * gst-libs/gst/riff/riff-media.c: + riff: Also handle invalid block aligns for raw audio + Fixes audio playback of + http://demo.archermind.com/Test%20Sample/Video/MPEG%204/Divx3/Low-Motion/576-320.avi + Audio and video together is still broken because of other issues. + +2014-12-18 10:57:13 +0100 Edward Hervey + + * gst-libs/gst/audio/Makefile.am: + audio: Fix private header include/dist + We want to dist it, but we don't want to install it. + Fixes make dist/distcheck + +2014-12-18 10:53:20 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From ef1ffdc to f2c6b95 + +2014-12-17 19:14:38 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + video: audio: fix GI annotations for proxy caps function + Add the annotations to parameters that can be null and also for stating + the ownership of the returned caps + +2014-12-17 15:21:48 -0300 Thiago Santos + + * tests/check/libs/audiodecoder.c: + tests: audiodecoder: tests for caps query implementation + Copied from videodecoder tests and updated to audio features + +2014-12-17 15:21:16 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + * gst-libs/gst/audio/gstaudiodecoder.h: + * win32/common/libgstaudio.def: + audiodecoder: expose getcaps virtual function + Allows subclasses to do custom caps query replies. + Also exposes the standard caps query handler so subclasses can just + extend on top of it instead of reimplementing the caps query proxying. + +2014-12-16 18:36:57 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: implement caps and accept-caps queries + Allows decoders to proxy downstream restrictions on caps. + Also implements accept-caps query to prevent regressions caused by the + new fields on the return of a caps query that would cause the accept-caps + to fail as it uses subset caps comparisons + +2014-12-16 11:13:40 -0300 Thiago Santos + + * gst-libs/gst/audio/Makefile.am: + * gst-libs/gst/audio/gstaudioencoder.c: + * gst-libs/gst/audio/gstaudioutilsprivate.c: + * gst-libs/gst/audio/gstaudioutilsprivate.h: + audioencoder: refactor getcaps proxy function to be reusable + Makes the audioencoder's getcaps function that proxies downstream + restriction available to other elements in the audio module to use it + +2014-12-17 14:18:03 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + * tests/check/libs/videodecoder.c: + * win32/common/libgstvideo.def: + videodecoder: expose getcaps virtual function + Allows subclasses to do custom caps query replies. + Also exposes the standard caps query handler so subclasses can just + extend on top of it instead of reimplementing the caps query proxying. + https://bugzilla.gnome.org/show_bug.cgi?id=741263 + +2014-12-15 18:46:21 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: accept-caps should only require fields from the template + With the new caps query results the caps returned might have extra fields + that are not required by the decoder (framerate for image decoders) and it + causes a regression making, for example, jpegdec reject caps that don't + have framerates. + The accept-caps implementation will do 2 checks: + 1) Do subset check with the template caps, making sure all the required + fields that are present on the template are present on the received caps. + 2) Do a intersection check with the result of a caps query, making sure + that downstream can accept the fields in the received caps. + https://bugzilla.gnome.org/show_bug.cgi?id=741263 + +2014-12-09 16:08:12 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideoutilsprivate.c: + videoutils: proxy filter when doing a caps query downstream + Allows downstream to use the filter and possibly reduce caps complexity + to speed up negotiation + https://bugzilla.gnome.org/show_bug.cgi?id=741263 + +2014-12-09 16:05:27 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideoutilsprivate.c: + videoutils: return empty if the element has no possible allowed caps + Instead of returning the template caps and having a failure happen + later because there are no possible caps + https://bugzilla.gnome.org/show_bug.cgi?id=741263 + +2014-12-08 16:33:33 -0300 Thiago Santos + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideoencoder.c: + * gst-libs/gst/video/gstvideoutilsprivate.c: + * gst-libs/gst/video/gstvideoutilsprivate.h: + * tests/check/libs/videodecoder.c: + videodecoder: implement caps query + Refactor the encoder's caps query proxying function to a common place + and use it in the videodecoder to proxy downstream restrictions. + The new function is private to the gstvideo lib. + https://bugzilla.gnome.org/show_bug.cgi?id=741263 + +2014-12-17 12:01:19 +0000 Tim-Philipp Müller + + * configure.ac: + configure: require release version of orc now that there is one + +2014-12-16 12:57:55 +0100 Wim Taymans + + * sys/ximage/ximagesink.c: + * sys/xvimage/xvimagesink.c: + ximagesink: clear src and dest rectangles + Now that the center function also takes into account the x and y + coordinates of the dest rectangle, better clear all the fields before + using them. + +2014-12-16 12:10:53 +0100 Song Bing + + * gst-libs/gst/video/gstvideopool.c: + * sys/ximage/ximagepool.c: + * sys/xvimage/xvimagepool.c: + videopool: update buffer size after video alignment + Update the new buffer size after alignment in the pool configuration + before calling the parent set_config. This ensures that the parent knows + about the buffer size that we will allocate and makes the size check + work in the release_buffer method. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741420 + +2014-12-15 20:57:14 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiobasesink.h: + * gst-libs/gst/audio/gstaudiobasesrc.h: + audiobasesrc/sink: Add _CAST macros + +2014-12-15 14:10:17 +0100 Edward Hervey + + * gst-libs/gst/video/gstvideosink.c: + * tests/check/libs/video.c: + video: Fix non-default usage of gst_video_sink_center_rect + Make sure we take into account non-0 x/y destination rectangles + +2014-12-15 12:12:44 +0000 Tim-Philipp Müller + + * tests/examples/playback/playback-test.c: + examples: improve playback-test help text a little + And allow pipeline type to be specified as string. + +2014-12-15 10:35:35 +0100 Sebastian Dröge + + * ext/pango/gstbasetextoverlay.h: + pango: Add license/copyright header to header file + +2014-12-15 09:45:43 +0100 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: Only emit the drain signal for the main decode chain, not any subchains" + This reverts commit a391dfe17f1a325f60e1d51a6d40c1a68eb196de. + It breaks gapless playback: https://bugzilla.gnome.org/show_bug.cgi?id=740045 + +2014-12-09 03:18:37 +0100 Matej Knopp + + * gst/audiorate/gstaudiorate.c: + audiorate: Fill gap events + https://bugzilla.gnome.org/show_bug.cgi?id=741281 + +2014-12-10 16:10:58 +0530 Sanjay NM + + * gst-libs/gst/audio/gstaudiodecoder.c: + audio: Add error handling to gst_audio_decoder_drain() + https://bugzilla.gnome.org/show_bug.cgi?id=740686 + +2014-12-13 16:14:49 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioclock.c: + audioclock: Fix redundant definitions compiler warning + gstaudioclock.c:51:31: error: redundant redeclaration of 'gst_audio_clock_init' [-Werror=redundant-decls] + G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK); + gstaudioclock.c:51:31: error: redundant redeclaration of 'gst_audio_clock_class_init' [-Werror=redundant-decls] + G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK); + +2014-12-13 16:04:40 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioclock.c: + audioclock: No need to get the parent class in class_init, G_DEFINE_TYPE does that for us + +2014-12-13 16:01:44 +0100 Sebastian Dröge + + * gst-libs/gst/audio/gstaudioclock.c: + audioclock: Use G_DEFINE_TYPE instead of a custom get_type() function + +2014-12-12 08:32:15 -0800 Zaheer Abbas Merali + + * gst-libs/gst/rtp/gstrtcpbuffer.c: + rtcpbuffer: fix spelling of word in comment + +2014-12-12 14:59:49 +0000 Tim-Philipp Müller + + * tests/check/libs/rtpbasedepayload.c: + tests: rtpbasepayload: fix indentation + +2014-12-12 14:59:03 +0000 Tim-Philipp Müller + + * tests/check/libs/audiodecoder.c: + tests: audiodecoder: fix indentation + +2014-12-12 14:56:36 +0000 Tim-Philipp Müller + + * tests/check/libs/audiodecoder.c: + tests: audiodecoder: fix broken refcounting in unit test + The set_format vfunc does not pass ownership of the caps + to the decoder, so we mustn't unref the caps there. + gst_event_new_caps() does not take ownership of the caps + passed, so we must unref the caps afterwards. + Fixes leaks when running test in valgrind in 1.4 branch. + +2014-12-12 10:02:43 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-orc-dist.c: + video: Update disted orc source files + +2014-12-12 10:01:36 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + Revert "video-converter: Fix compiler warning because of missing prototype of non-static function" + This reverts commit 406f32a9468c837a4d71f988de10dc2198a8edc9. + The problem was apparently that my video-orc.h was not updated and did not + include the prototype for that function. Only a "make clean" caused it to + be regenerated. + +2014-12-12 09:51:05 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Fix compiler warning because of missing prototype of non-static function + video-converter.c:838:1: error: no previous prototype for function + '_custom_video_orc_matrix8' [-Werror,-Wmissing-prototypes] + +2014-12-09 22:47:31 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: do not use fixed caps on source pad + decoders can change the caps on their source pads, so they don't + use fixed caps. Having fixed caps can cause renegotiation issues. + +2014-12-09 22:46:42 -0300 Thiago Santos + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: do not use fixed caps on source pad + decoders can change the caps on their source pads, so they don't + use fixed caps. Having fixed caps can cause renegotiation issues. + +2014-12-11 13:45:38 +0100 Thibault Saunier + + * gst/playback/gstplaybin2.c: + playbin: Do not mix up stream type when getting stream combiner element + We were always returning the video stream combiner whatever stream type + combiner was wanted. + +2014-12-10 13:23:23 -0300 Thiago Santos + + * gst/playback/gstplaybin2.c: + playbin2: always unref the combiner sinkpad when removing the srcpad + Create a function to do the pad cleanup of the GstSourceCombine struct + and use it to not forget to also cleanup the sink pad and fix a memory + leak. + https://bugzilla.gnome.org/show_bug.cgi?id=741198 + +2014-12-10 16:42:12 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + video-orc: make RGB pack/unpack faster + Avoid all the merging and splitting and use a pair of shifts and or + +2014-12-11 01:53:15 +1100 Jan Schmidt + + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Add GST_VIDEO_DECODER_CAST macro + It's used in some macros already, so let's make it exist. + +2014-11-25 13:31:48 +0100 Göran Jönsson + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: No remove child if destroyed. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=740730 + +2014-12-08 18:53:35 +1100 Jan Schmidt + + * tests/icles/test-reverseplay.c: + reverse-play: fix seek to end when starting reverse + Start reverse playback by actually seeking to the end of + the file. + +2014-12-06 21:02:37 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: set bits and format after conversion + Update the current format, bits and pstride. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741187 + +2014-12-05 22:09:45 -0300 Thiago Santos + + * gst-libs/gst/video/video-converter.c: + video-converter: free dither_lines + Avoid a memory leak + +2014-12-05 18:16:53 -0500 Nicolas Dufresne + + * configure.ac: + Bump ORC requirement to 4.22.1 + We now depend on git commit f1cfa5, "orcc: allow setting custom + backup function" + +2014-12-05 14:51:28 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-converter: use custom backup function + Use the new orc feature to set a custom backup function. + +2014-12-05 12:18:42 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc.orc: + video-converter: improve matrix8 function + Avoid using a constant. + Avoid doing saturated adds, results are not supposed to overflow here. + Rework the C backup function a little in preparation for custom backup + functions in ORC. + See https://bugzilla.gnome.org/show_bug.cgi?id=741015 + +2014-11-28 15:06:27 +0100 Mathieu Duponchelle + + * gst-libs/gst/audio/gstaudiodecoder.c: + * tests/check/libs/audiodecoder.c: + audiodecoder: Push pending events before sending EOS. + Segments are added to the pending events, and pushing a segment + is mandatory before sending EOS. + + Adds a test. + https://bugzilla.gnome.org/show_bug.cgi?id=740853 + +2014-11-27 05:53:20 +0100 Mathieu Duponchelle + + * ext/ogg/gstoggdemux.c: + oggdemux: Fix seeking before the first frame. + The previous code was setting keytarget to target + to make sure the keyframe found for each pad was + indeed before the target. + Then if target == keytarget, it assumed a keyframe had been + found, which was not the case if target was before the first frame + in the file. + This patch checks that a keyframe was indeed found, and if not + seeks to 0, without bisecting again. + Assuming default gst qa assets in $HOME/gst-validate + seek_before_first_frame.scenario: + description, seek=true, handles-states=true + pause, playback-time=0.0 + seek, playback-time=0.0, start=0.0, flags=accurate+flush + seek, playback-time=0.0, start=0.01, flags=accurate+flush + seek, playback-time=0.0, start=0.1, flags=accurate+flush + GST_DEBUG=*theoradec*:2 gst-validate-1.0 playbin \ + uri=file://$HOME/gst-validate/gst-qa-assets/medias/ogg/vorbis_theora.0.ogg \ + --set-scenario seek_before_first_frame.scenario + https://bugzilla.gnome.org/show_bug.cgi?id=741097 + +2014-10-08 08:54:57 +0200 Edward Hervey + + * gst/playback/gstplaybin2.c: + playbin: Only check sinks which are in >= GST_STATE_READY + Otherwise we endup with bogus caps intersection (from the pad template + caps and not from what the actual hardware/device supports) + https://bugzilla.gnome.org/show_bug.cgi?id=738131 + +2014-12-03 10:15:18 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix chroma resampling check + Decide if we need chroma resampling by checking if we have a progressive + or interlaced chroma resampler. + +2014-12-03 10:14:34 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: only do dithering when needed + Only do dithering when one of the quantizers is > 1. + +2014-12-02 15:58:00 -0500 Chad + + * gst/audiorate/gstaudiorate.c: + audiorate: Use gst_util_uint64_scale_int_round() + Using gst_util_uint64_scale_int() causes slight drift + which accumulates over time. + https://bugzilla.gnome.org/show_bug.cgi?id=741045 + +2014-12-02 13:39:52 +0100 Wim Taymans + + * win32/common/libgstvideo.def: + defs: update defs file + +2014-12-02 11:51:19 +0100 Wim Taymans + + * gst/videoconvert/gstvideoconvert.c: + * gst/videoconvert/gstvideoconvert.h: + videoconvert: add dither-bits option + Fix the dither option. + Add a new option to set the quantizer + +2014-12-02 11:48:11 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: add where orc functions could go + Add the disabled orc functions in #if 0 lines for when we can enable + them. + +2014-12-02 11:40:59 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-dither.c: + video-converter: add dithering + Use the new dither object to perform dithering. + Add option to select dithering method. + Add option to quantize to a specific value + +2014-12-02 11:39:42 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add palette when needed + +2014-12-02 11:32:28 +0100 Wim Taymans + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/video-dither.c: + * gst-libs/gst/video/video-dither.h: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video.h: + video-dither: add video dither helper object + Add a new object that implements various dithering methods. + +2014-12-01 22:28:52 -0300 Thiago Santos + + * tools/gst-play.c: + gst-play: do not set system's volume to 100% by default + Only change the volume if requested + +2014-12-01 09:50:24 +0100 Thomas Klausner + + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + alsa: Use EPIPE instead of ESTRPIPE if the latter does not exist + NetBSD does not have ESTRPIPE. + https://bugzilla.gnome.org/show_bug.cgi?id=740952 + +2014-11-28 14:28:06 +0100 Sebastian Dröge + + * ext/alsa/gstalsasrc.c: + * ext/ogg/gstoggmux.c: + * ext/vorbis/gstvorbisdec.c: + * gst-libs/gst/audio/gstaudioringbuffer.c: + * gst-libs/gst/rtsp/gstrtspconnection.c: + * gst-libs/gst/tag/gsttagdemux.c: + * gst-libs/gst/tag/id3v2frames.c: + * gst-libs/gst/video/navigation.c: + * gst-libs/gst/video/video-converter.c: + * gst/adder/gstadder.c: + * gst/encoding/gstencodebin.c: + * gst/playback/gstdecodebin2.c: + * gst/playback/gstplaysink.c: + * gst/playback/gstsubtitleoverlay.c: + * gst/playback/gsturidecodebin.c: + * gst/subparse/gstsubparse.c: + * gst/tcp/gstmultihandlesink.c: + * gst/tcp/gstmultioutputsink.c: + * tests/examples/playback/playback-test.c: + * tests/examples/seek/jsseek.c: + * tools/gst-discoverer.c: + Don't compare booleans for equality to TRUE and FALSE + TRUE is 1, but every other non-zero value is also considered true. Comparing + for equality with TRUE would only consider 1 but not the others. + +2014-11-16 15:54:56 +0100 Thibault Saunier + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/pbutils/encoding-profile.c: + * gst-libs/gst/pbutils/encoding-profile.h: + * gst/encoding/gstencodebin.c: + * win32/common/libgstpbutils.def: + encodebin: Add a way to disable caps renegotiation for output stream format + In some cases, the user might want the stream outputted by encodebin to + be in the exact same format during all the stream. We should let the + user specify when this is the case. This commit add some API in the + GstEncodingProfile to determine whether the format can be renegotiated + after the encoding started or not. + API: + gst_encoding_profile_set_allow_dynamic_output + gst_encoding_profile_get_allow_dynamic_output + https://bugzilla.gnome.org/show_bug.cgi?id=740214 + +2014-11-28 13:31:39 +0000 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: remove libs/video and videoconvert test from valgrind blacklist + Seem to work fine. + +2014-11-28 13:29:37 +0000 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: don't run orc/* tests under valgrind + They just seem to blow up for some reason that needs investigating. + +2014-11-28 13:11:33 +0000 Tim-Philipp Müller + + * gst-libs/gst/tag/gsttagmux.c: + tagmux: fix criticals when there are no tags at all + +2014-11-21 01:47:35 +1100 Jan Schmidt + + * tests/icles/test-reverseplay.c: + test-reverseplay: Use uridecodebin for input + Work with any installed URI handler + Add some more debug output + +2014-11-28 10:27:28 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-frame.c: + video-frame: Mapping a frame with inconsistent values between GstVideoMeta and GstVideoInfo is a bug + It will cause the frame to be initialized with inconsistent values that then + later can cause crashes or any other kind of interesting and hard to debug + bugs. + +2014-11-27 17:10:31 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 7bb2bce to ef1ffdc + +2014-11-27 15:28:36 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-blend.c: + video-blend: make use of x offset when unpacking overlay image pixels + Now that it's implemented we can use it, which is a minor + optimisation when the image to overlay gets cropped on the + left. + +2014-11-27 15:04:12 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-format.c: + video-format: sprinkle some 'restrict' keywords in pack/unpack functions + In cases where we just call orc directly this is somewhat + superfluous, but let's do it anyway for consistency. In + other cases the compiler can hopefully use this to optimise + memory access a little. + +2014-11-27 13:01:03 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: handle x offset in unpack + Add support for x offset in almost all unpack methods. + Fix naming of source and dest pixels. + Add const to source pixels. + +2014-11-27 10:51:58 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: improve unpack i420 + unpack_i420 does not need extra code to handle odd widths, the orc code + already handles it fine. + +2014-11-27 09:45:07 +0100 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + videoscale: use old property name + Unbreak ABI by changing to the old property name again. + https://bugzilla.gnome.org/show_bug.cgi?id=740798 + +2014-11-25 13:39:07 +0100 Thibault Saunier + + * gst/playback/gstdecodebin2.c: + decodebin: Analyze source pad before setting to PAUSED for 'simple demuxers' + Before we were setting them to PAUSED and (much) later connecting to + their source pad caps notify signal. + There was a race where that demuxer was pushing a caps and later a buffer + on its source pad when we were not even connected to its source pad caps notify + signal leading to decodebin missing the information and not keeping on + building the pipeline on CAPS event thus the demuxer was posting an ERROR + (not linked) message on the bus. This need to be done for 'simple + demuxers' because those have one ALWAYS source pad, not like usual demuxers + that have several dynamic source pads. + A "simple demuxer" is a demuxer that has one and only one ALWAYS source + pad. + https://bugzilla.gnome.org/show_bug.cgi?id=740693 + +2014-11-25 16:46:50 +0100 Mathieu Duponchelle + + * gst/playback/gstdecodebin2.c: + decodebin2: Take STREAM_LOCK before sending sticky events. + There was a race where: + 1) we would put the element to PAUSED + 2) It would get data sent to it from upstream + 3) It would thus send caps + 3) caps_notify_cb would continue autoplugging + 4) caps would flow downstream, the last pad would get exposed + 5) we were still not done sending the sticky events + Taking the stream lock on the new element's sinkpad and only + releasing it when sticky events have all been sent prevents + the caps from reaching the source pad of the element before + we're all set. + https://bugzilla.gnome.org/show_bug.cgi?id=740694 + +2014-08-06 19:31:25 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: detect mp4 common file format variant + Used e.g. by UltraViolet. + +2014-11-25 22:01:08 +0000 Tim-Philipp Müller + + * ext/alsa/gstalsasrc.c: + alsasrc: debug message fixes + In the same vein as 74e9640a. + +2014-11-25 17:42:07 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scale: combine adds when max_taps equals combine size + When the amount of pixels/lines matches the amount we can combine, + combine the adds and multiplies and do the scale as a separate + operation. + +2014-11-25 17:25:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: combine scaling operations + Combine add and scale of multiple lines/pixels to reduce the amount of + read and writes to temporary memory. + +2014-11-25 14:45:23 +0000 Tim-Philipp Müller + + * ext/pango/gsttimeoverlay.c: + * ext/pango/gsttimeoverlay.h: + timeoverlay: add "time-line" property + So we can also show running time or stream time, not just the + buffer time stamps. + +2014-11-25 11:54:51 +0100 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/gstvideoscale.h: + videoscale: add property to do scaling after gamma-decode + +2014-11-25 11:28:42 +0100 Wim Taymans + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/gstvideoscale.h: + videoscale: add more scaling filters + Adjust the filter parameters so that they use the same number of taps + and method as the old ones. + Add some new filters + +2014-11-25 10:36:13 +0100 Wim Taymans + + * gst-libs/gst/video/video-resampler.c: + video-resampler: remove print + +2014-11-25 10:32:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-resampler.c: + video-resampler: improve variable taps + Improve quality of variable taps on all methods by reusing the lanczos + parameters where possible. + +2014-11-25 09:11:31 +0100 Wim Taymans + + * gst-libs/gst/video/video-resampler.c: + video-resampler: Fix lanczos parameters for variable taps + when using variable taps and when we are limiting the number of taps, + recalculate the lanczos parameters to match the clamped value. + Set the max number of taps to 128 + +2014-11-25 11:38:34 +0300 Andrei Sarakeev + + * gst/playback/gstplaysink.c: + playsink: Reset mute property of the sink to playsink's value when setting up the audio chain + Otherwise the following can happen: + 1. set mute=true + 2. play media1 (Ok) + 3. play media without audio (audiochain removed) + 4. play media2 (audiochain created, mute=*false*) + https://bugzilla.gnome.org/show_bug.cgi?id=740675 + +2014-11-25 11:38:34 +0300 Andrei Sarakeev + + * gst-libs/gst/pbutils/gstdiscoverer.h: + discoverer: fix typo in header file + https://bugzilla.gnome.org/show_bug.cgi?id=740675 + +2014-11-25 09:08:18 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: add description for audio/x-audible + +2014-11-25 01:02:28 +0000 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefind: improve 'audible' audio typefinder a little + Don't return NEARLY_CERTAIN just based on 4 bytes. + Also change media type to audio/x-audible. + https://bugzilla.gnome.org/show_bug.cgi?id=715050 + +2013-11-23 11:36:43 +1000 Jonathan Matthew + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: add audio/audible typefinder + https://bugzilla.gnome.org/show_bug.cgi?id=715050 + +2014-06-16 11:46:18 +0200 Branislav Katreniak + + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + alsa: Change the log messages in xrun_recovery() from DEBUG to WARNING + xrun_recovery() runs when there is an error + https://bugzilla.gnome.org/show_bug.cgi?id=740615 + +2014-11-24 12:47:11 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: keep track of required temp lines + Make a small object to hold a pool of allocated temp lines. + Keep track of how many temp lines each conversion stage needs and use + this to allocate just enough temp lines from the temp lines object. from + the temp lines object. + +2014-11-24 12:45:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: use err line in fastpath + Use the error line for temporary storage in the fastpath so that we + don't have to allocate any other temp lines. + +2014-11-22 21:51:33 +0100 Matej Knopp + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: don't complain about PTS != DTS on keyframes + It is valid for streams with b-frames + https://bugzilla.gnome.org/show_bug.cgi?id=740556 + +2014-11-21 16:06:54 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: handle mixed interlaced + When dealing with mixed interlaced, setup a scaler and chroma-resampler + for both interlaced and progressive frames and switch between them + depending on the interlace mode of the input frame. + +2014-11-21 16:04:11 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: Cleanup options parsing + Cleanup option parsing + Add some debug + +2014-11-21 15:59:47 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: there is no need to apply x offset to temp lines + +2014-11-21 15:58:34 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: ensure both fields have the same number of taps + +2014-11-21 11:15:04 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: rework the options a little + Rework the options a little to make it nicer to set defaults. + +2014-11-21 11:12:50 +0100 Wim Taymans + + * gst-libs/gst/video/video-resampler.c: + * gst-libs/gst/video/video-resampler.h: + video-resampler: add option to limits taps + Add an option to limit the number of taps to use in automatic mode. The + problem is that for lanczos, we might use more taps than what we can + handle with the current precision. + Rework the other options a little to make it nicer to set defaults. + +2014-11-20 18:20:00 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: update orc files + +2014-11-20 15:53:23 +0100 Edward Hervey + + * win32/common/libgstvideo.def: + win32: Update defs file + +2014-11-19 21:18:04 +0900 Hyunjun Ko + + * gst-libs/gst/rtsp/gstrtspconnection.h: + rtspconnection: fix warning on param name mismatch + https://bugzilla.gnome.org/show_bug.cgi?id=740013 + +2014-11-18 00:04:59 +1100 Jan Schmidt + + * tests/icles/.gitignore: + * tests/icles/Makefile.am: + * tests/icles/test-reverseplay.c: + tests: Add reverse playback verification test + Plays a requested URI forward to EOS, then backward and + checks that the same timestamp range(s) are covered. + +2014-11-12 15:23:37 +0100 Sebastian Dröge + + * gst/videorate/gstvideorate.c: + videorate: Operate in a zero-latency mode if drop-only is set to TRUE + There's no reason why we would have to wait for the next buffer to decide + whether to output the current one or not. We just have to check if the + current one is earlier than our expected next time, which is the previous + frame timestamp plus the expected frame duration. + https://bugzilla.gnome.org/show_bug.cgi?id=740018 + +2014-11-19 14:38:03 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + video-converter: Use correct enum, GstVideoFormat instead of GstFormat + +2014-11-19 13:25:13 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix size check + Add some debug, fix size check that decides what scaling to do first and + when to do conversion. + +2014-11-19 12:53:03 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: avoid primaries conversion when asked + Don't do conversion between primaries when the option is disabled. + Only do some matrix code when needed. + +2014-11-19 12:41:21 +0100 Wim Taymans + + * gst-libs/gst/video/video-info.c: + video-info: add a note about subsampled formats + Add a note about gst_video_info_set_format() and interlaced formats. + +2014-11-19 12:05:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-info.c: + video-info: handle interlaced size correctly + Refactor GstVideoInfo init, make function to set default colorimetry. + Call fill_planes after we configure the GstVideoInfo with parameters + from the caps. + The size of the chroma planes for interlaced vertically subsampled + formats needs to be rounded up to 2, we have 2 fields with each + the same anount of chroma lines. + +2014-11-19 12:04:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-color.c: + video-color: return FALSE on unparsable colorimetry + +2014-11-19 09:40:05 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: handle unpack interlaced subsampled formats + For interlaced vertically subsampled formats the check for even lines + needs to take into account the two fields. + +2014-11-19 09:39:32 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix interlaced shift + +2014-11-19 09:30:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: keep a small backlog of lines + Allow lines to jump backwards slightly, usefull for interlaced content. + +2014-11-19 09:28:52 +0100 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + video-chroma: Fix interlaced chroma resampling + Use the interlaced flag to select the right resampler. + +2014-11-18 16:36:08 +0100 Wim Taymans + + * gst-libs/gst/video/video-resampler.c: + * gst-libs/gst/video/video-scaler.c: + video: add some more debuging + +2014-11-18 16:35:13 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix interlacing some more + Use the right phase. + Take the right lines from interlaced content. + +2014-11-18 12:53:06 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: fix dither method + +2014-11-18 12:52:27 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: fix some leaks + And remove some unused fields. + +2014-11-18 12:20:26 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: add support for gamma and primaries + Keep only 1 structure with all matrix information. + Add structure to hold gamma information. + Add more options to control gamma, primaries and color matrix handling. + Add functions to compute transformations to and from XYZ and use this + to convert between primaries. + Merge gamma into the convert to and from RGB stage. + Fix border val. + Simplify the fastpath table, remove unused fields, add some more checks. + +2014-11-18 11:09:40 +0100 Wim Taymans + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + video-color: add method to get primaries info + +2014-11-18 11:08:10 +0100 Wim Taymans + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-info.c: + video-color: fix default 601 primaries + +2014-11-18 11:06:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix interlaced taps setup + +2014-11-14 09:15:22 +0100 Wim Taymans + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * gst-libs/gst/video/video-info.c: + video-color: make sRGB colorimetry the default for RGB + +2014-11-13 12:03:26 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: split YUV to and from RGB conversions + Prepare for doing full gamma corrected conversion and scaling by first + splitting the conversions from and to RGB into separate steps. + split scaling in downscaling and upscaling steps to be performed before + and after conversion respectively. + +2014-11-13 12:02:07 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: don't convert too much + because we do conversion after downscaling we only need to convert the + smallest width. + +2014-11-13 12:00:05 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc.orc: + video-converter: add orc splat functions to draw border + +2014-11-05 21:52:44 +0000 Tim-Philipp Müller + + * ext/pango/gstbasetextoverlay.c: + Revert "basetextoverlay: Fix segfault when overlay outside the frame" + This is not correct. overlay->silent is a property and we + should not just flip the property forever because one text + we render is outside of the frame. The next one might not + be, the positioning properties can be changed after all. + The lower layers should handle clipping, and now do. + This reverts commit 1cc311156cc3908d1d9888fbcda67305fc647337. + https://bugzilla.gnome.org/show_bug.cgi?id=738984 + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-05 21:46:47 +0000 Tim-Philipp Müller + + * ext/pango/gstbasetextoverlay.c: + Revert "basetextoverlay: segfault when xpos >= video size" + This is not right, even if it might avoid a crash. We don't + want to just set xpos/ypos to 0 in those cases. Clipping + should be done properly, see bug #739281 for that. + This reverts commit 900d0267d511e9553eec44d948d7e33ead7dc903. + https://bugzilla.gnome.org/show_bug.cgi?id=738984 + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-16 23:26:45 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-blend.c: + video-blend: minor optimisation + Only need to run matrix on those pixels which + will actually be used. + +2014-11-16 19:28:54 +0000 Tim-Philipp Müller + + * tests/icles/Makefile.am: + * tests/icles/test-overlay-blending.c: + tests: make overlay blending test slightly less boring + +2014-11-16 16:34:31 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-blend.c: + video-blend: fix clipping of overlay images on the left + Fix clipping of images that are partially left of the video + surface, they would get clipped on the right side instead of + the left side, because the video unpack functions currently + ignore the x offset parameter. Work around that until that + is implemented. + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-16 16:31:45 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-blend.c: + video-blend: fix allocation of temp src line for wide sources + Fix allocation of temporary source line buffers for source + images that are wider than the video overlay surface. + +2014-11-16 01:34:09 +0000 Tim-Philipp Müller + + * tests/icles/.gitignore: + * tests/icles/Makefile.am: + * tests/icles/test-overlay-blending.c: + tests: add visual overlay composition blending test + Shows visual result of blending a logo on top of + a video surface, esp. when the logo is partially + outside of the video surface and needs to be + clipped. + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-16 01:32:55 +0000 Tim-Philipp Müller + + * tests/check/libs/video.c: + tests: fix leak in video unit test + +2014-11-10 16:36:35 +0530 Vineeth T M + + * gst-libs/gst/video/video-blend.c: + video-blend: fix blending of rectangles partially or fully outside of the video + In case of overlay being completely or partially outside + the video frame, the offset calculations are not right, + which resulted in the overlay not being displayed as + expected, or crashes due to invalid memory access. + When the overlay rectangle is completely outside, + we need not render the overlay at all. + For partial display of overlay rectangles, src_yoff + was not being calculated, hence it was always clipping + the bottom half of the overlay, By calculating the + src_yoff, now the overlay is clipped properly. + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-10 12:12:42 +0530 Vineeth T M + + * tests/check/libs/video.c: + tests: video: add video blend test + Add test to check rendering of overlays of different sizes + that are completely or partially outside the video surface. + Once the overlay is blended to the video, verify if the + position of the blended overlay is as expected, by comparing + the pixels of the blended video with the expected values. + https://bugzilla.gnome.org/show_bug.cgi?id=739281 + +2014-11-15 23:15:06 +0000 Tim-Philipp Müller + + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/gst-plugins-base-plugins.hierarchy: + * docs/plugins/gst-plugins-base-plugins.signals: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-app.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-encoding.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-videoconvert.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + docs: update to git + +2014-11-15 23:13:42 +0000 Tim-Philipp Müller + + * gst/gio/gstgiostreamsink.c: + * gst/gio/gstgiostreamsrc.c: + * gst/playback/gstplaybin2.c: + docs: fix some gtk-doc warnings + Deprecated entities found in documentation for xyz:Long_description + . + +2014-11-12 09:57:38 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: take offset into account when unpacking + When we can directly take the input line from the source frame when + unpacking, also take into account the x offset. + +2014-11-12 09:57:12 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add some notes + +2014-11-11 16:19:03 +0100 Wim Taymans + + * docs/libs/gst-plugins-base-libs-sections.txt: + * win32/common/libgstvideo.def: + defs: update defs and docs + +2014-11-11 16:11:15 +0100 Wim Taymans + + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * tests/check/libs/video.c: + video-color: add gamma encode/decode functions + Add functions to encode and decode gamma. + Add unit test to check that encode and decode are eachothers inverse + and that the limits are respected. + +2014-11-10 14:53:13 +0100 Wim Taymans + + * tests/check/libs/video.c: + test: add scaling test + Sort pack and unpack performance measurements + +2014-11-10 12:01:48 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc.orc: + video-orc: update disted file + and disable one failing function + +2014-10-24 17:08:43 +0200 Wim Taymans + + * gst/videoscale/Makefile.am: + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/gstvideoscale.h: + * gst/videoscale/gstvideoscaleorc-dist.c: + * gst/videoscale/gstvideoscaleorc-dist.h: + * gst/videoscale/gstvideoscaleorc.orc: + * gst/videoscale/vs_4tap.c: + * gst/videoscale/vs_4tap.h: + * gst/videoscale/vs_fill_borders.c: + * gst/videoscale/vs_fill_borders.h: + * gst/videoscale/vs_image.c: + * gst/videoscale/vs_image.h: + * gst/videoscale/vs_lanczos.c: + * gst/videoscale/vs_scanline.c: + * gst/videoscale/vs_scanline.h: + * tests/check/Makefile.am: + videoscale: port to new API + +2014-11-10 11:40:11 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + video-orc: use faster saturating conversions + saturating conversions are generally faster. + +2014-11-07 15:45:04 +0100 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-orc.orc: + video-chroma: add ORC version of UP_H2_CS + It is however slower than the C version and thus disabled. + +2014-11-09 14:44:36 +0000 Tim-Philipp Müller + + * gst-libs/gst/pbutils/descriptions.c: + pbutils: add description for Apple Core Audio Format + https://bugzilla.gnome.org/show_bug.cgi?id=739840 + +2014-11-09 12:53:32 +0100 Peter G. Baum + + * gst/typefind/gsttypefindfunctions.c: + typefind: recognize Apple Core Audio Format + (CAF) Specification 1.0 + https://bugzilla.gnome.org/show_bug.cgi?id=739840 + +2014-11-09 10:47:14 +0100 Sebastian Dröge + + * tests/check/pipelines/capsfilter-renegotiation.c: + capsfilter-renegotiation: Use assertions from libcheck for more information on failures + +2014-11-07 12:06:10 +0100 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + * tests/check/libs/video.c: + video-chroma: ORCify 2x vertical upsampling + Make an ORC version of the 2x vertical upsampling code. + Improve unit tests, test chroma up and down sampling. + memset buffer in conversion to make valgrind happy. + +2014-11-06 14:14:22 +0000 William Manley + + * gst/tcp/gstmultihandlesink.c: + * gst/tcp/gsttcpserversink.c: + tcpserversink: Don't leak a `GSocket` and a `GInetSocketAddress` + when accepting a connection. + Discovered by `make check-valgrind` with the new `socketintegrationtest`. + https://bugzilla.gnome.org/show_bug.cgi?id=739544 + +2014-11-03 01:08:27 +0000 William Manley + + * tests/check/Makefile.am: + * tests/check/pipelines/.gitignore: + * tests/check/pipelines/tcp.c: + tests: Add TCP pipelines test + There don't seem to be any unit tests for the socket handling elements. As + I am about to attempt some refactorings I've added some basic tests which + exercise some of the happy-paths in tcpclientsrc, tcpserversrc, + tcpserversink and tcpclientsink. They should let me know if I've caused + serious breakage. + They are far from exhaustive but are sufficient for me to have caught a few + memory-leaks in the existing code. + https://bugzilla.gnome.org/show_bug.cgi?id=739544 + +2014-11-06 18:18:50 +0100 Wim Taymans + + * tests/check/libs/video.c: + tests: add video conversion test + Go through all conversions and make a list of performance. + +2014-11-06 18:13:12 +0100 Wim Taymans + + * gst-libs/gst/video/video-info.c: + video-info: use h-cosited chroma for HD video by default + +2014-11-06 18:09:04 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: clamp lines + +2014-11-06 16:29:16 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video-orc: update disted files + +2014-11-06 16:18:25 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc.orc: + video-converter: ORCify 8<->16 conversion + +2014-11-06 15:30:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: unpack into the destination when needed + Make sure we write into the destination line when we can propose the + dest allocator. + +2014-11-06 15:29:50 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add more debug + +2014-11-06 15:01:27 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: Update disted orc files + +2014-11-06 13:08:42 +0100 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + * gst-libs/gst/video/video-orc.orc: + * tests/check/libs/video.c: + video-chroma: optimize chroma subsampling a little + Combine multiplies in 4x filters. + Rename conversion functions to make them nicer in orc. + Add ORC versions for various downsampling algorithms + Add unit test chroma resampler + +2014-11-06 10:43:11 +0100 Wim Taymans + + * tests/check/libs/video.c: + tests: make pack/unpack test + Make a more complete pack/unpack test, check if the image after + pack/unpack has the same color and precision, and has correctly + duplicated subsampled pixels. + +2014-11-06 10:42:09 +0100 Wim Taymans + + * tests/check/libs/video.c: + tests: get the correct number of video formats + Make a method to get the number of formats (including the last one). + +2014-11-06 09:44:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.h: + video-format: update some docs and add a FIXME(2.0) + +2014-11-06 09:38:06 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: add range extension to BGR_10XE format + +2014-11-06 09:34:59 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-orc.orc: + video-format: fix pack of 4:2:0 formats + When packing 4:2:0 formats, we need to take the chroma from the even + lines, for the odd lines we only take luminance. + +2014-11-06 09:32:21 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: fix range extension of UYVP + We need to shift the top 6 bits to the lower 6 bits + +2014-11-06 09:28:06 +0100 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + video-chroma: do h subsampling after v subsampling + We only need to do the horizontal subsampling on 1 line if we do it + after vertical subsampling and we also avoid doing vertical subsampling + on unused pixels. + +2014-11-06 09:39:08 +0000 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: dist header file needed for ABI checks on powerpc32 + Fixes 'make check' on debian powerpc32 buildbot: + libs/libsabi.c:95:26: fatal error: struct_ppc32.h: No such file or directory + +2014-11-05 04:34:44 +0900 Danny Song + + * tests/check/elements/adder.c: + test : fix leaks in adder unit test + https://bugzilla.gnome.org/show_bug.cgi?id=739640 + +2014-11-05 11:54:31 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: keep separate lines with border + Make separate with a border around them so that we can avoid a memcpy. + +2014-11-05 11:52:21 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: avoid memcpy when not needed + +2014-11-05 11:51:44 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: pass output line correctly + +2014-11-04 09:30:45 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: rework the converter to allow more optimizations + Rework the converter, keep track of the conversion steps by chaining the + cache objects together. We can then walk the chain and decide the + optimal allocation pattern. + Remove the free function, we're not going to need this anytime soon. + Keep track of what output line we're constructing so that we can let the + allocator return a line directly into the target image when possible. + Directly read from the source pixels when possible. + +2014-11-04 11:03:50 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix temp line allocation + We need to allocate the templine with the amount of pixels we are going + to handle, which we only know for the vertical resampler when we are + asked to resample. + +2014-11-04 11:02:49 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix taps in interlaced mode + +2014-11-04 11:01:52 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix phases in interlaced mode + +2014-11-04 09:29:58 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + video-orc: fix v_2tap_u16 + +2014-11-03 16:18:41 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add extra pixels for the border + We need extra pixels for the border. + +2014-11-03 15:36:26 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add support for 16bits formats + Add scaler functions for 16 bits formats. + Rename the scaler functions so that 16bits versions don't look too + weird. + Remove old unused h_2tap functions + Fix v_ntap functions, it was using 1 tap too little. + +2014-11-03 15:33:24 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: Add support for 16 bits formats + Rework the way we track the current state of the video through the + different conversion phases and use this to make sure we use the right + format and pstride where needed. + +2014-10-22 13:37:40 +0100 William Manley + + * gst-libs/gst/allocators/gstdmabuf.c: + docs: gst_dmabuf_allocator_alloc: Improve documentation + https://bugzilla.gnome.org/show_bug.cgi?id=739545 + +2014-11-03 10:07:56 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + video-orc: comment out unused function + A faster version of 4tap horizontal scaling causes segfaults in ORC + presumably because it uses too many registers so disable it to avoid + crashing in the ORC tests. + +2014-11-02 21:45:30 +0100 Andreas Frisch + + * gst/playback/gstsubtitleoverlay.c: + subtitleoverlay: return available factory CAPS instead of ANY on CAPS query + https://bugzilla.gnome.org/show_bug.cgi?id=739536 + +2014-11-03 08:12:44 +0100 Sebastian Dröge + + * gst-libs/gst/video/video-scaler.c: + video-scaler: Fix compiler warning + video-scaler.c:151:58: error: implicit conversion from enumeration type + 'GstVideoScalerFlags' to different enumeration type + 'GstVideoResamplerFlags' [-Werror,-Wenum-conversion] + gst_video_resampler_init (&scale->resampler, method, flags, out_size, + ~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~ + +2014-11-01 20:08:01 +0000 Luis de Bethencourt + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtp: Do not use deprecated gtk-doc 'Rename to' tag + GObject introspection GTK-Doc tag "Rename to" has been deprecated, changing to + rename-to annotation. + https://bugzilla.gnome.org/show_bug.cgi?id=739514 + +2014-11-01 14:58:13 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + video: fix some g-i / gtk-doc warnings + +2014-11-01 14:47:26 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: update disted orc backup functions + Fixes build without orc. + +2014-11-01 14:28:55 +0000 Tim-Philipp Müller + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/video-blend.c: + video: add video blend helper functions to docs + I don't think those were ever meant to be made public, + but they are, so we might as well document them. + +2014-11-01 13:14:32 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: ORCify vertical ntap function + +2014-11-01 12:58:01 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: handle 4tap interlaced + +2014-10-31 16:53:06 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video-orc: update dist files + +2014-10-31 16:49:43 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add ORC optimized ntap horizontal scalers + +2014-10-29 16:28:28 +0530 Ravi Kiran K N + + * tests/icles/playback/test.c: + * tests/icles/playback/test2.c: + * tests/icles/playback/test4.c: + tests/playback: quit from main loop + Listen for eos and error signal to quit main loop. + https://bugzilla.gnome.org/show_bug.cgi?id=739346 + +2014-10-29 16:26:07 +0530 Ravi Kiran K N + + * tests/icles/playback/test2.c: + * tests/icles/playback/test4.c: + tests/playback: correct state change checking + Correct the test apps check if result of state change is not failure as the + state change can happen async + https://bugzilla.gnome.org/show_bug.cgi?id=739346 + +2014-10-31 22:52:43 +1100 Jan Schmidt + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: Update disted orc files for new functions. + Fixes the build when building without ORC + +2014-10-31 11:07:06 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: align offsets to subsampling + Only apply an offset that is a multiple of the subsampling. To handle + arbitrary offsets in the future, we need to be able to chroma-resample + part of the borders. + +2014-10-31 10:38:15 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: clamp output lines + +2014-10-31 10:34:46 +0100 Wim Taymans + + * gst-libs/gst/video/video-format.c: + video-format: add alignment checks + Some of the ORC functions need specific alignment + +2014-10-31 10:33:42 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix offset check + +2014-10-30 18:41:01 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: also chroma up/downsample when scaling + +2014-10-30 18:40:43 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: clamp input lines correctly + +2014-10-30 23:53:39 +0000 Tim-Philipp Müller + + * gst-libs/gst/video/video-scaler.c: + video-scaler: fix build without orc + https://bugzilla.gnome.org/show_bug.cgi?id=739433 + +2014-10-30 17:30:33 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add border color + +2014-10-30 16:57:20 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: add support for src/dest regions + Add support for cropping the source and placing the converted image + into a rectangle in the destination frame. + Add an option to add a border and border color. + +2014-06-05 14:50:15 +0100 Vincent Penquerc'h + + * ext/vorbis/gstvorbisenc.c: + vorbisenc: push an updated segment stop time when we know it + When encoding, libvorbis will tell us how many samples are encoded + in the buffer it returns. This number may be less than the maximum + of samples in the block, if this is the last packet. In we have no + segment end time, we set it to the end time of that last sample to + tell downstream that the buffer contains less samples. + +2014-06-05 14:54:31 +0100 Vincent Penquerc'h + + * ext/ogg/gstoggmux.c: + oggmux: set correct granpos on last page when samples are clipped + Samples may be clipped at the end, and this is conveyed by a + granulepos that's smaller than it would otherwise be. Use the + segment stop time to detect this, and calculate the right + granulepos. + +2014-06-05 11:26:08 +0100 Vincent Penquerc'h + + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + oggdemux: fix last buffer timestamp when samples are clipped + The end of a stream can be clipped by setting the granulepos of + the last page to a lower value that it otherwise would be. + +2014-10-30 14:48:45 +0100 Wim Taymans + + * tests/check/libs/video.c: + tests: fix test + +2014-10-03 12:42:46 +0100 Vincent Penquerc'h + + * tools/gst-discoverer.c: + gst-discoverer: error out on failure to copy + This should not really fail, but let's check return value + anyway as it guards against future changes. + Coverity 1135731 + +2014-10-03 12:28:30 +0100 Vincent Penquerc'h + + * gst-libs/gst/rtp/gstrtpbuffer.c: + rtpbuffer: add a const where appropriate + +2014-10-03 12:08:05 +0100 Vincent Penquerc'h + + * gst/typefind/gsttypefindfunctions.c: + typefind: remove unneeded test + We've already bailed out if we have less than 5 bytes. + Coverity 1226441 + +2014-10-30 11:33:17 +0000 Tim-Philipp Müller + + * win32/common/libgstvideo.def: + Update libgstvideo.def for resampler -> video_resample renaming + +2014-10-30 11:46:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add more ORC functions + Add the old ORC functions for nearest and linear. Label them as Low + quality because they are not as accurate but ORC lacks opcodes to + express this for now. + +2014-10-30 11:43:52 +0100 Wim Taymans + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/resampler.h: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-resampler.c: + * gst-libs/gst/video/video-resampler.h: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + video-scaler: rename resampler to video-resampler + Prefix the resampler with video-. It we would like to reuse the + resampler for audio later, we can copy/move it and deprecate this + one. + +2014-10-29 17:38:33 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + video-scaler: remove color range argument + We just need to clip to the format limits, if there is extra headroom in + the range we can use that without problems. + +2014-10-29 17:14:51 +0100 Wim Taymans + + * win32/common/libgstvideo.def: + defs: update defs + +2014-10-29 16:20:56 +0100 Wim Taymans + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video-scaler.c: + video-scaler: add ORC optimized versions + Add ORC optimized versions of 2 and 4tap vertical scaling. Provide + a high quality 12 bits and a low quality 6 bits version. + +2014-10-29 16:13:02 +0100 Wim Taymans + + * gst-libs/gst/video/video-scaler.c: + video-scaler: add precision to make_s16_taps + +2014-10-29 13:19:00 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: copy config fields + When setting a new config, copy all the fields into our own config and + not only the ones we know about. + +2014-10-29 13:17:39 +0100 Wim Taymans + + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/resampler.h: + * gst-libs/gst/video/video-scaler.c: + resampler: make offset/phase/n_taps uint32 + Make various resizer fields uint32 so that we can use them in ORC + functions later. + +2014-10-27 11:59:14 +0100 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: don't convert too much + Always convert the smallest width. + +2014-10-27 10:13:47 +0100 Wim Taymans + + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/video-scaler.c: + * tests/check/libs/video.c: + resampler: make shift easier to use + +2014-10-26 05:58:56 +0100 Wim Taymans + + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/resampler.h: + * gst-libs/gst/video/video-converter.c: + resampler: add parameters to cubic filter + Improve cubic filter and add parameters. Switch to mitchell filter + by default. + +2014-10-24 16:51:37 +0200 Wim Taymans + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + * tests/check/libs/video.c: + video-scaler: add extra options + +2014-10-24 16:42:11 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + video-converter: define some options + +2014-10-24 16:23:53 +0200 Wim Taymans + + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/resampler.h: + resampler: add some options + +2014-10-24 15:42:31 +0200 Wim Taymans + + * gst-libs/gst/video/resampler.c: + resampler: limit max number of taps + Don't use more taps than the input size. + +2014-10-24 15:28:22 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: add scaling support + Add scaling support for the video-converter object + +2014-10-24 15:25:33 +0200 Wim Taymans + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/video-scaler.c: + * gst-libs/gst/video/video-scaler.h: + * gst-libs/gst/video/video.h: + * tests/check/libs/video.c: + video-scaler: add video scaler helper object + Add a video scaler object build on top of the resampler. It has + implementation to deal with interlaced video as well as horizontal and + vertical scaling functions. + +2014-10-24 13:01:12 +0200 Wim Taymans + + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/resampler.c: + * gst-libs/gst/video/resampler.h: + video: add generic resampler + Add an object that can generate a set of resample filter coefficients. + +2014-10-24 12:11:43 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + video-converter: rework the generic converter function + Use a LineCache object to track and process lines between unpack, + upsample, convert, downsample and pack stages. This simplifies the + main core processing function a lot and allows for future additions + easily. + Add support for interlaced formats in chroma up and downsampling. + +2014-10-24 11:45:13 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst/videoconvert/gstvideoconvert.c: + video-convert: swap src and dest + It is more natural and consistent with other uses. + +2014-10-24 11:35:31 +0200 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + video-chroma: fix typo + +2014-10-27 17:56:51 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 84d06cd to 7bb2bce + +2014-10-23 14:41:13 +0530 Vineeth T M + + * gst-libs/gst/video/video-blend.c: + video-blend: segfault when xpos >= video size + When the xpos is given as greater than or equal to the video size, + we get a segfault, due to improper condition. + Hence adding proper conditions. + https://bugzilla.gnome.org/show_bug.cgi?id=738984 + +2014-10-23 14:38:07 +0530 Vineeth T M + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: segfault when xpos >= video size + When the xpos is given as greater than or equal to the video size, + we get a segfault, due to improper condition. + Hence adding proper conditions. + https://bugzilla.gnome.org/show_bug.cgi?id=738984 + +2014-10-26 21:31:36 +0000 Tim-Philipp Müller + + * tests/examples/app/.gitignore: + examples: add new appsink example to .gitignore + +2014-10-26 11:04:47 +0100 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: fix the autoplugging of parser elements" + This reverts commit 2b0d3927410ae24e6b0fce100bd4ebbbe805a66f. + This breaks cases where an actual second parser is required after the parser, + e.g. to do timestamp corrections. + See https://bugzilla.gnome.org/show_bug.cgi?id=738416 + +2014-10-26 11:04:38 +0100 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + Revert "decodebin: Fix locking" + This reverts commit aa94d5dc9aa6ef381da6b60a67f218117c662958. + +2014-10-24 13:09:42 +0100 Tim-Philipp Müller + + * tests/check/elements/playbin-complex.c: + tests: fix playbin-complex test on big endian + +2014-10-24 13:04:07 +0100 Tim-Philipp Müller + + * tests/check/libs/struct_ppc32.h: + tests: fix expected GstRTSPTimeRange structure size for ABI test for ppc32 + Also see https://bugzilla.gnome.org/show_bug.cgi?id=695276 + +2014-10-24 12:26:40 +0100 Tim-Philipp Müller + + * tests/check/elements/adder.c: + tests: fix adder check on big-endian + +2014-10-24 10:17:47 +0100 Tim-Philipp Müller + + * android/rtsp.mk: + * gst-libs/gst/rtsp/.gitignore: + * gst-libs/gst/rtsp/Makefile.am: + * gst-libs/gst/rtsp/gstrtsp-marshal.list: + * gst-libs/gst/rtsp/gstrtspextension.c: + rtsp: use generic marshaller + +2014-10-23 11:22:35 +0200 Thibault Saunier + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Make GstBaseTextOverlay::font-desc readable + +2014-10-21 13:01:16 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From a8c8939 to 84d06cd + +2014-10-21 13:30:27 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Fix locking + The chain mutex needs to be locked when looking at chain->elements. Move code + around a bit to require only one lock() and unlock(). + +2014-10-21 12:58:41 +0300 Sreerenj Balachandran + + * gst/playback/gstdecodebin2.c: + decodebin: fix the autoplugging of parser elements + If there are two parser elements available for the same media format, + then decodebin is autoplugging an extra capsfilter and parser irrespective + of caps and rank. So restrict the decodebin from autoplugging multiple parser + elements back to back in adjacent positions with in a single DecodeChain + for the same media format. + https://bugzilla.gnome.org/show_bug.cgi?id=738416 + +2014-10-21 12:57:59 +0200 Stefan Sauer + + * README: + * common: + Automatic update of common submodule + From 6e75498 to a8c8939 + +2014-10-21 14:43:30 +0530 Vineeth T M + + * gst/videotestsrc/gstvideotestsrc.c: + * gst/videotestsrc/gstvideotestsrc.h: + videotestsrc: assertion error + timestamp_offset is being declared as an int64 variable, + for which the min + value of G_MININT64 is -9223372036854775808 + Changing the minimum and maximum limit for the offset variable. + https://bugzilla.gnome.org/show_bug.cgi?id=738568 + +2014-10-13 00:03:55 +0300 Sreerenj Balachandran + + * gst/playback/gstdecodebin2.c: + decodebin: optimize the code a bit by avoiding unnecessary string comparisons + https://bugzilla.gnome.org/show_bug.cgi?id=738416 + +2014-10-13 00:03:20 +0300 Sreerenj Balachandran + + * gst/playback/gstdecodebin2.c: + decodebin: Fix typo in comment + https://bugzilla.gnome.org/show_bug.cgi?id=738416 + +2014-10-01 15:04:09 -0700 Aleix Conchillo Flaqué + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: call watch notify before freeing any watch resources + This gives control to the notify function allowing it to finish other + watch related functionality. + https://bugzilla.gnome.org/show_bug.cgi?id=737752 + +2014-10-20 15:31:29 +0200 Sebastian Dröge + + * gst-libs/gst/app/gstappsink.c: + appsink: Fix gst_app_sink_pull() docs to transfer full for the return value + Also we get a GstSample, not a GstBuffer here. + +2014-10-17 12:10:44 +0200 Stefan Sauer + + * gst/typefind/gsttypefindfunctions.c: + typefind: use gslice for typefine data + Also use our free function in the failure case. + +2014-10-13 15:58:56 +0100 Tim-Philipp Müller + + * gst/encoding/gstencodebin.c: + encodebin: fix some leaks in error code path + Fixes test_encodebin_sink_pads_nopreset_static + running under valgrind. + +2014-10-13 05:08:41 +0100 Tim-Philipp Müller + + * Makefile.am: + * common: + tests: parallelise 'make valgrind' + Use $(MAKE) instead of 'make' inside the Makefile, + otherwise the make will run as if -j1 had been + specified and complain about the job server not + being available, and with $(MAKE) in inherits the + parent make's settings it seems. + Upgrade common submodule for parallel check-valgrind. + +2014-10-03 12:57:52 +0200 Peter G. Baum + + * gst-libs/gst/riff/riff-media.c: + riff-media: allow more channel_masks + Allow partial valid channel masks. + Set channel mask to 0 for non-valid channel masks. + https://bugzilla.gnome.org/show_bug.cgi?id=733405 + +2014-10-03 12:54:17 +0200 Peter G. Baum + + * gst-libs/gst/audio/audio-channels.c: + audio-channels: allow partially valid channel_mask + Since WAVEFORMATEXTENSIBLE allows to have more channels than + bits in the channel mask we should allow this, too, to avoid + loss of information. + https://bugzilla.gnome.org/show_bug.cgi?id=733405 + +2014-10-13 22:24:31 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: should post DECODE errors and not ENCODE + Fix error code for audio decoder + +2014-10-10 18:49:29 +0100 Luis de Bethencourt + + * gst-libs/gst/video/video-blend.c: + videoblend: Avoid assigning a negative value to a guint + There are some few but certain conditions where it is possible for the + dest_width to be smaller than x. So we check this before assigning a negative + value to src_width, which is a unsigned and would be promoted to a number that + can segfault videoblend. + https://bugzilla.gnome.org/show_bug.cgi?id=738242 + +2014-10-10 10:05:19 +0530 Luis de Bethencourt + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Fix segfault when overlay outside the frame + When the textoverlay is set outside the video frame by deltax or deltay the + calculation segfaults, but it is also unnecessary since it doesn't need to be + displayed. So we should clip the text. + https://bugzilla.gnome.org/show_bug.cgi?id=738242 + +2014-10-10 17:32:41 -0400 Olivier Crête + + * gst-libs/gst/pbutils/missing-plugins.c: + pbutils: Rename clock-base/seqnum-base to timestamp-offset/seqnum-offset + To match how they were renamed elsewhere. + +2014-10-10 12:14:17 +0300 Heinrich Fink + + * gst/playback/gstplaysink.c: + playsink: Use correct property enum value for video-filter property installation + +2014-10-08 16:50:52 +0100 Luis de Bethencourt + + * gst/videoscale/gstvideoscale.c: + videoscale: remove FIXME about NV21 support + NV21 is already supported so removing FIXME about adding support for it. + +2014-10-08 11:26:24 +0200 Wim Taymans + + * gst/videotestsrc/gstvideotestsrc.c: + * gst/videotestsrc/gstvideotestsrc.h: + * gst/videotestsrc/videotestsrc.c: + * gst/videotestsrc/videotestsrc.h: + videotestsrc: add gradient pattern + Makes a gradient between background and foreground color. + +2014-10-06 15:17:42 +0200 Wim Taymans + + * gst-libs/gst/video/video-chroma.c: + video-chroma: improve 4x downsampling coefficients + +2014-10-06 22:13:00 +0200 Peter G. Baum + + * gst/audioresample/gstaudioresample.h: + audioresample: remove unused variables + https://bugzilla.gnome.org/show_bug.cgi?id=738026 + +2014-10-07 05:50:56 +0900 Danny Song + + * gst/typefind/gsttypefindfunctions.c: + typefindfunctions: Remove leftover #define from 0.10 + https://bugzilla.gnome.org/show_bug.cgi?id=738018 + +2014-10-07 12:10:42 +0400 Andrei Sarakeev + + * gst/playback/gstdecodebin2.c: + decodebin: Only emit the drain signal for the main decode chain, not any subchains + https://bugzilla.gnome.org/show_bug.cgi?id=738064 + +2014-10-06 10:15:13 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Free factories array when delaying autoplugging due to non-final caps + +2014-10-06 10:11:05 +0300 Sebastian Dröge + + * gst-libs/gst/video/video-converter.c: + videoconverter: Free the converter config in free() + +2014-10-02 21:20:48 +0200 Aurélien Zanelli + + * gst/playback/gstdecodebin2.c: + decodebin: unref decode pad after usage + https://bugzilla.gnome.org/show_bug.cgi?id=737757 + +2014-10-04 23:09:19 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: Stop storing if we received EOS + This was never reset when going from PAUSED->READY and resulted + in encoders being not reusable after EOS. They just rejected any + buffer because they received EOS in their previous life. + The flag wasn't used anywhere except for rejecting buffers after + EOS, and this is now handled by GstPad directly. + +2014-10-02 00:14:03 +0200 Aurélien Zanelli + + * ext/vorbis/gstvorbisdeclib.c: + vorbisdec: don't reorder streams with channels count greater than eight + vorbis_reorder_map is defined for eight channels max. If we have more + than eight channels, it's the application which shall define the order. + Since we set audio position to none, we just interleave all the channels + without any particular reordering. + https://bugzilla.gnome.org/show_bug.cgi?id=737742 + +2014-03-04 16:51:11 +0200 Andres Gomez + + * gst/playback/gsturidecodebin.c: + uridecodebin: Removed setting "iradio-mode" property in the source element + The "iradio-mode" property used to have a default FALSE value in HTTP + source elements but now it should default to TRUE or just do not exist + as a property so it is not really needed to set it any more in + uridecodebin. + Apart from that this code could've never worked as uridecodebin looks for a + string-typed iradio-mode property, but it's a boolean in all sources. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725383 + +2014-10-02 02:46:58 +1000 Jan Schmidt + + * docs/design/part-stereo-multiview-video.markdown: + design: Add a proposal for handling stereoscopic 3D and multiview + +2014-10-01 11:16:30 +0200 Aurélien Zanelli + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: release frame in finish_frame when no output state is configured + Otherwise, frame is leaked. + https://bugzilla.gnome.org/show_bug.cgi?id=737706 + +2014-09-25 17:32:32 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + * gst-libs/gst/video/video-orc.orc: + video-converter: add orc optimized matrix8 function + Add an ORC implementation of the matrix8 function. + Regenerate video-orc-dist.[ch] + +2014-09-29 19:45:22 +0530 Arun Raghavan + + * gst-libs/gst/audio/gstaudiobasesink.c: + audio: Fix up a comment in GstAudioBaseSink + Rewrote the comment to not be PulseAudio-specific. + +2014-09-27 20:05:38 +0200 Rico Tzschichholz + + * gst-libs/gst/video/Makefile.am: + video: Make sure to link against libm + +2014-09-27 15:58:51 +0100 Tim-Philipp Müller + + * sys/xvimage/xvimagepool.c: + * sys/xvimage/xvimagepool.h: + xvimagesink: get rid of unnecessary private struct for pool + +2014-09-27 15:53:43 +0100 Tim-Philipp Müller + + * sys/ximage/ximagepool.c: + * sys/ximage/ximagepool.h: + ximagesink: get rid of unnecessary private struct for pool + This is not exposed as API after all. + +2014-09-24 20:38:31 +0530 Arun Raghavan + + * gst-libs/gst/audio/gstaudioiec61937.c: + audio: Trivial comment for unhandled MPEG-2 payloading case + The spec mentions a version of the MPEG-2 frame with a base frame and + extension frame. I don't have IEC 13818-3 to figure out what that is, + and don't see any references in search results, so it's a FIXME for now. + https://bugzilla.gnome.org/show_bug.cgi?id=736797 + +2014-09-24 20:11:49 +0530 Arun Raghavan + + * gst-libs/gst/audio/gstaudioiec61937.c: + audio: Fixes for MPEG-2 LSF IEC61937 payloading + The low sample frequency case for MPEG-2 is <=12kHz (the 32kHz number + applies to MPEG-1). + https://bugzilla.gnome.org/show_bug.cgi?id=736797 + +2014-09-17 17:40:04 +0530 Anuj Jaiswal + + * gst-libs/gst/audio/gstaudioiec61937.c: + audio: correct condition for MPEG case. + Signed-off-by: Anuj Jaiswal + https://bugzilla.gnome.org/show_bug.cgi?id=736797 + +2014-09-26 18:14:11 +0200 Wim Taymans + + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-orc.orc: + video: improve YUV -> RGB conversion + Reorganize orc instructions to free up some registers. + We can reuse the ORC code to implement the generic AYUV->ARGB matrix. + +2014-09-26 16:35:51 +0200 Wim Taymans + + * gst/videotestsrc/gstvideotestsrcorc.orc: + videotestsrc: storel is better then copyl + It is better to use storel to splat the variable into the destination. + ORC doesn't know when a variable is last written to so it can't yet optimize + away the copy operation. + +2014-09-26 15:00:12 +0100 Luis de Bethencourt + + * gst/videoscale/vs_lanczos.c: + videoscale: avoid recalculating values + Avoid recalculating values used multiple times as base of index. Plus some style + fixes. + https://bugzilla.gnome.org/show_bug.cgi?id=737400 + +2014-09-26 09:14:51 +0530 Ravi Kiran K N + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/vs_image.h: + * gst/videoscale/vs_lanczos.c: + videoscale: support lanczos method for NV formats + Support lanczos scaling method for NV12 and NV21 formats. + Scale the 'Y' plane and scale 'NV' plane. + Implementation for submethods - int16, int32, float and double + https://bugzilla.gnome.org/show_bug.cgi?id=737400 + +2014-09-25 15:19:21 +0100 Tim-Philipp Müller + + * gst-libs/gst/video/video-orc-dist.c: + * gst-libs/gst/video/video-orc-dist.h: + video: update disted orc backup files + +2014-09-24 16:19:30 +0200 Wim Taymans + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/video-converter.c: + * gst-libs/gst/video/video-converter.h: + * gst-libs/gst/video/video-convertor.c: + * gst-libs/gst/video/video-convertor.h: + * gst-libs/gst/video/video.h: + * gst/videoconvert/gstvideoconvert.c: + * gst/videoconvert/gstvideoconvert.h: + * win32/common/libgstvideo.def: + video: convertor -> converter + +2014-09-24 15:49:42 +0200 Wim Taymans + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/Makefile.am: + * gst-libs/gst/video/video-convertor.c: + * gst-libs/gst/video/video-convertor.h: + * gst-libs/gst/video/video-orc.orc: + * gst-libs/gst/video/video.h: + * gst/videoconvert/Makefile.am: + * gst/videoconvert/gstcms.c: + * gst/videoconvert/gstcms.h: + * gst/videoconvert/gstvideoconvert.c: + * gst/videoconvert/gstvideoconvert.h: + * gst/videoconvert/gstvideoconvertorc-dist.c: + * gst/videoconvert/gstvideoconvertorc-dist.h: + * gst/videoconvert/gstvideoconvertorc.orc: + * gst/videoconvert/videoconvert.c: + * gst/videoconvert/videoconvert.h: + * tests/check/Makefile.am: + * win32/common/libgstvideo.def: + video: move videoconvert code to video library + Move the conversion code used in videoconvert to the video library + and expose a simple but generic API to do arbitrary conversion. It can + currently do colorspace conversion but the plan is to add videoscale to + it as well. + See https://bugzilla.gnome.org/show_bug.cgi?id=732415 + +2014-09-24 11:04:15 +0200 Wim Taymans + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/video-color.c: + * gst-libs/gst/video/video-color.h: + * gst/videoconvert/videoconvert.c: + * win32/common/libgstvideo.def: + video-color: add gst_video_color_matrix_get_Kr_Kb() + Move the function to get the color matrix coefficients from + videoconvert to the video library. + +2014-09-23 14:14:36 -0300 Thiago Santos + + * gst-libs/gst/audio/gstaudiosink.c: + audiosink: compensate for segment restart with clock's time_offset + When playing chained data the audio ringbuffer is released and + then acquired again. This makes it reset the segbase/segdone + variables, but the next sample will be scheduled to play in + the next position (right after the sample from the previous media) + and, as the segdone is at 0, the audiosink will wait the duration + of this previous media before it can write and play the new data. + What happens is this: + pointer at 0, write to 698-1564, diff 698, segtotal 20, segsize 1764, base 0 + it will have to wait the length of 698 samples before being able to write. + In a regular sample playback it looks like: + pointer at 677, write to 696-1052, diff 19, segtotal 20, segsize 1764, base 0 + In this case it will write to the next available position and it + doesn't need to wait or fill with silence. + This solution is borrowed from pulsesink that resets the clock to + start again from 0, which makes it reset the time_offset to the time + of the last played sample. This is used to correct the place of + writing in the ringbuffer to the new start (0 again) + https://bugzilla.gnome.org/show_bug.cgi?id=737055 + +2014-09-21 13:16:43 +0200 Ognyan Tonchev + + * gst-libs/gst/video/gstvideopool.c: + videopool: add missing annotation for gst_video_buffer_pool_new() + https://bugzilla.gnome.org/show_bug.cgi?id=737072 + +2014-09-23 23:12:19 +0300 Sebastian Dröge + + * gst/videoscale/vs_4tap.c: + videoscale Use stride instead of width in more places + +2014-09-19 12:31:49 +0530 Sanjay NM + + * gst/videoscale/vs_4tap.c: + videoscale: Use width instead of stride in buffer offset calculation + https://bugzilla.gnome.org/show_bug.cgi?id=736944 + +2014-09-23 11:56:33 +0200 Stefan Sauer + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: reshuffle code in error handling + Move the assert to the error handling block at the end of the function so the + the logging is still triggered. Reword the logging slightly and add another + comment to hint what went wrong. + Fixes #737138 + +2014-09-22 20:15:13 +0200 Stefan Sauer + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: log the timestamps if we are unhappy about them + When complaining about the DTS!=PTS on keyframes log the actualy timestamps. + +2014-09-22 10:42:47 +0200 Wim Taymans + + * tests/check/Makefile.am: + tests: add orc test for videoconvert + +2014-09-22 10:40:01 +0300 Sebastian Dröge + + * tools/gst-play.c: + gst-play: Fix format string compiler warning + gst-play.c:92:28: error: format string is not a string literal + [-Werror,-Wformat-nonliteral] + len = g_vasprintf (&str, format, args); + ^~~~~~ + +2014-09-19 14:58:20 +0200 Edward Hervey + + * tests/examples/overlay/gtk-videooverlay.c: + example/overlay: Specify minimum gdk version + Avoids deprecation warnings (such as for gtk_widget_set_double_buffered() + which became deprecated from 3.14) + +2014-09-19 18:29:54 +0100 Tim-Philipp Müller + + * tools/gst-play.c: + gst-play: add --quiet option to suppress output + +2014-09-05 13:49:46 -0300 Thiago Santos + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Do not fail the negotiation if query fails + The allocation query failure doesn't mean that the negotiation + has failed as the element can allocate buffers itself. + Instead, only fail if the pads are flushing and the allocation + query failed. + https://bugzilla.gnome.org/show_bug.cgi?id=735844 + +2014-09-18 15:45:43 +0530 Sanjay NM + + * gst/videoscale/gstvideoscale.c: + * gst/videoscale/vs_4tap.c: + * gst/videoscale/vs_4tap.h: + videoscale: Added NV support for 4Tap resize + https://bugzilla.gnome.org/show_bug.cgi?id=736845 + +2014-09-18 12:29:37 +0400 Andrei Sarakeev + + * gst/playback/gstplaybin2.c: + playbin: Don't leak input-selector sinkpads + https://bugzilla.gnome.org/show_bug.cgi?id=736861 + +2014-09-18 12:39:48 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Simplify code a bit + +2014-09-17 14:34:25 +0200 Ognyan Tonchev + + * gst/encoding/gststreamsplitter.c: + streamsplitter: do not leak events when flushing them + https://bugzilla.gnome.org/show_bug.cgi?id=736796 + +2014-09-17 14:18:49 +0200 Ognyan Tonchev + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: do not leak events when flushing them + https://bugzilla.gnome.org/show_bug.cgi?id=736796 + +2014-09-17 14:11:21 +0200 Ognyan Tonchev + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: do not leak events when flushing them + https://bugzilla.gnome.org/show_bug.cgi?id=736796 + +2014-09-17 14:08:17 +0200 Ognyan Tonchev + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: do not leak events when flushing them + https://bugzilla.gnome.org/show_bug.cgi?id=736796 + +2014-09-17 12:17:27 +0200 Ognyan Tonchev + + * tests/check/libs/audiodecoder.c: + audiodecoder: extend flush_events test to check for event leaks + https://bugzilla.gnome.org/show_bug.cgi?id=736788 + +2014-09-17 12:17:53 +0200 Ognyan Tonchev + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Don't leak events + https://bugzilla.gnome.org/show_bug.cgi?id=736788 + +2014-09-16 13:32:52 +0200 Ognyan Tonchev + + * gst-libs/gst/audio/gstaudiocdsrc.c: + audiocdsrc: do not leak uid after parsing TOC select event + https://bugzilla.gnome.org/show_bug.cgi?id=736739 + +2014-09-17 10:51:59 +0530 Ravi Kiran K N + + * gst/typefind/gsttypefindfunctions.c: + typefind: correct the condition for irap flag + https://bugzilla.gnome.org/show_bug.cgi?id=736779 + +2014-09-16 21:42:46 +0300 Sebastian Dröge + + * gst/playback/gstplaysink.c: + playsink: Add audio/videoconvert in front of the audio/video-filters + audioresample and videoscale is something the application will have to do if + required, but we can at least help here by adding the + audioconvert/videoconvert elements. + https://bugzilla.gnome.org/show_bug.cgi?id=735748 + +2014-09-16 01:07:18 +0300 Sebastian Dröge + + * gst-libs/gst/video/video-frame.c: + video-frame: Don't ref buffers twice when mapping + +2014-09-16 00:41:55 +0300 Sebastian Dröge + + * gst-libs/gst/app/gstappsink.h: + * gst-libs/gst/app/gstappsrc.h: + app: Add FIXME comment for making the instance/class structs private + +2014-09-15 21:51:15 +0100 Tim-Philipp Müller + + * gst-libs/gst/app/gstappsrc.h: + appsrc: fix recent ABI breakage caused by GstAppSrc structure size increase + Also fixes 'make check'. + https://bugzilla.gnome.org/show_bug.cgi?id=728379 + +2014-09-15 16:23:57 +0200 Ognyan Tonchev + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: do not leak pool and allocator in error case + https://bugzilla.gnome.org/show_bug.cgi?id=736679 + +2014-09-12 14:41:01 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideofilter.c: + videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF + https://bugzilla.gnome.org/show_bug.cgi?id=736118 + +2014-09-12 14:39:16 +0300 Sebastian Dröge + + * gst-libs/gst/video/video-frame.c: + * gst-libs/gst/video/video-frame.h: + 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. + https://bugzilla.gnome.org/show_bug.cgi?id=736118 + +2014-09-12 14:27:44 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideofilter.c: + videofilter: Unref buffers before calling the transform_frame functions + GstVideoFrame has another reference, so the buffer looks unwriteable, + meaning that we can't attach any metas or anything to it + https://bugzilla.gnome.org/show_bug.cgi?id=736118 + +2014-09-05 09:54:10 -0700 Garg + + * gst-libs/gst/audio/gstaudiobasesink.c: + audiobasesink: Fix deadlock caused by holding object lock while calling clock functions + Issue: + During a PAUSED->PLAYING transition when we are rendering an audio buffer in AudioBaseSink + we make adjustments to the sink's provided clock i.e. fix clock calibration using the external + pipeline clock, within "gst_audio_base_sink_sync_latency function inside gstaudiobasesink.c". + For the calibration adjustment we need to get the sink clock time using "gst_audio_clock_get_time". + But before calling "gst_audio_clock_get_time" we acquire the Object Lock on the Sink. If sink is + a pulsesink, "gst_audio_clock_get_time" internally calls "gst_pulsesink_get_time" which needs to + acquire Pulse Audio Main Loop Lock before querying Pulse Audio for its stream time using + "pa_stream_get_time". Please see "gst_pulsesink_get_time in pulsesink.c". + So the situation here is we have acquired the Object lock on Sink and need PA Main Loop Lock. + Now Pulse Audio Main Thread itself might be in the process of posting a stream status + message after Paused to Playing transition which in turn acquires the PA Main loop lock and + needs the Object Lock on Pulse Sink. This causes a deadlock with the earlier render thread. + Fix: + Do not acquire the object Lock on Sink before querying the time on PulseSink clock. This is + similar to the way we have used get_time at other places in the code. Acquire it after the + get_time call. This way PA Main loop will be able to post its stream status message by + acquiring the Sink Object lock and will eventually release its Main Loop lock needed for + gst_pulsesink_get_time to continue. + https://bugzilla.gnome.org/show_bug.cgi?id=736071 + +2014-09-04 11:56:50 +0200 Nicola Murino + + * tests/examples/app/Makefile.am: + * tests/examples/app/appsink-src2.c: + appsrc: Add example that shows gst_app_src_push_sample() usage + +2014-09-05 11:14:51 +0200 Nicola Murino + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/app/gstappsrc.c: + * gst-libs/gst/app/gstappsrc.h: + * win32/common/libgstapp.def: + appsrc: Add push_sample() convenience function for easy appsink -> appsrc use + https://bugzilla.gnome.org/show_bug.cgi?id=728379 + +2014-09-11 22:19:05 +0100 Tim-Philipp Müller + + * sys/xvimage/xvcontext.c: + * sys/xvimage/xvcontext.h: + xvimagesink: only try to set XV_ITURBT_709 port attribute if it exists + Don't try to set port attribute that's not advertised by the + adaptor. Fixes videotestsrc ! xvimagesink aborting with + X Error of failed request: BadMatch (invalid parameter attributes) + Major opcode of failed request: 151 (XVideo) + Minor opcode of failed request: 13 () + on intel HD4600 graphics with kernel 3.16, xserver 1.15, + intel driver 2.21.15. + +2014-09-11 16:58:35 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: protect buffering message handling + Use the object lock to avoid concurrent processing which leads + to small disasters (assertions or crashes) + +2014-09-09 11:37:26 +0200 Ognyan Tonchev + + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: ignore timeout in session request header + The timeout parameter is only allowed in a session response header + but some clients, like Honeywell VMS applications, send it as part + of the session request header. Ignore everything from the semicolon + to the end of the line when parsing session id. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=736267 2014-03-28 13:02:54 +0100 George Kiagiadakis @@ -300,14 +9108,55 @@ ensure that this is the case. https://bugzilla.gnome.org/show_bug.cgi?id=732908 -2014-08-27 13:45:57 +0200 Göran Jönsson +2013-01-31 13:49:00 +0100 Arnaud Vrac - * gst-libs/gst/rtsp/gstrtspconnection.c: - rtspconnection: Protect readsrc, writesrc and controllsrc with a mutex - Fixes a crash when controlsrc, readsrc or writesrc are modified from - gst_rtsp_source_dispatch_read/write and gst_rtsp_watch_reset at the - same time. - https://bugzilla.gnome.org/show_bug.cgi?id=735569 + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: get framerate from previously parsed video info + +2013-01-31 13:47:35 +0100 Arnaud Vrac + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: do not ask for a bufferpool when checking for composition meta + +2014-09-04 15:06:31 +0200 Arnaud Vrac + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: schedule reconfigure on source pad when negotiation fails + The source pad might be flushing while negotiating, resulting in + set_caps or the ALLOCATION query failing. In this case set the + reconfigure flag on the source pad so that negotiation is retried on the + next buffer. + +2013-01-31 15:38:18 +0100 Arnaud Vrac + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: just forward the seek event to sink pads like other events + https://bugzilla.gnome.org/show_bug.cgi?id=735844 + +2014-09-04 12:13:45 +0200 Nicola Murino + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: remove unneeded cairo transparence setting + he code here: + http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/ext/pango/gstbasetextoverlay.c#n1554 + should make transparent the box that contains the text, I think this code is + not correct, it should be: + if (overlay->want_shading) { + double alpha = overlay->shading_value / 255.0; + cairo_paint_with_alpha (cr, alpha); + } + however I think this code could be removed, we already do a shaded background, + why shade the box behind the text with cairo too? only one shading is needed so + we must shade with cairo or with methods like these: + http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/ext/pango/gstbasetextoverlay.c#n1642 + not both + https://bugzilla.gnome.org/show_bug.cgi?id=736028 + +2014-09-02 13:10:34 +0200 Nicola Murino + + * ext/pango/gstbasetextoverlay.c: + basetextoverlay: Make shading_value a property + https://bugzilla.gnome.org/show_bug.cgi?id=735879 2014-09-03 15:23:26 +0530 Vineeth T M @@ -317,6 +9166,21 @@ and the same was being freed, which resulted in the crash https://bugzilla.gnome.org/show_bug.cgi?id=735952 +2014-09-02 15:37:38 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Also include the raw caps in the error message, not just the human readable description + +2014-09-02 12:59:18 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Include codec description for missing plugins in the error message + If we had plugins and an error occurred we only include the error message + caused by this, otherwise we will include the codec description as generated + from the caps. + This allows to detect which exact codec was missing instead of getting a + generic "no suitable decoders found" error message. + 2014-09-01 15:23:27 -0300 Thiago Santos * tests/check/elements/textoverlay.c: @@ -341,6 +9205,16 @@ otherwise there isn't much that can be done. https://bugzilla.gnome.org/show_bug.cgi?id=735800 +2014-09-01 15:06:51 +0200 Guillaume Desmottes + + * ext/ogg/gstoggdemux.c: + oggdemux: don't set segment.base in pad_submit_packet() + Setting segment.base in the segment sent from gst_ogg_demux_handle_page() is + enough to ensure that chained oggs are played corretly (see bgo#706569). + Tweaking the base in gst_ogg_pad_submit_packet() as well result in delays when + playing a file with start != -1. + https://bugzilla.gnome.org/show_bug.cgi?id=735808 + 2014-09-01 12:28:24 +0300 Sebastian Dröge * ext/pango/gstbasetextoverlay.c: @@ -350,107 +9224,107 @@ Specifically this pipeline was deadlocking: gst-launch-1.0 videotestsrc ! textoverlay ! textoverlay ! fakesink -=== release 1.4.1 === +2014-08-29 14:00:06 +0200 Guillaume Desmottes -2014-08-27 15:04:06 +0300 Sebastian Dröge + * ext/ogg/gstoggdemux.c: + oggdemux: accumulate base time + Base time should be accumulated so non flushing seeks have the expected base. + Not accumulating result in segments appearing as "too late" and so are not + played by the sink. + https://bugzilla.gnome.org/show_bug.cgi?id=735509 - * ChangeLog: - * NEWS: - * RELEASE: - * configure.ac: - * docs/plugins/inspect/plugin-adder.xml: - * docs/plugins/inspect/plugin-alsa.xml: - * docs/plugins/inspect/plugin-app.xml: - * docs/plugins/inspect/plugin-audioconvert.xml: - * docs/plugins/inspect/plugin-audiorate.xml: - * docs/plugins/inspect/plugin-audioresample.xml: - * docs/plugins/inspect/plugin-audiotestsrc.xml: - * docs/plugins/inspect/plugin-cdparanoia.xml: - * docs/plugins/inspect/plugin-encoding.xml: - * docs/plugins/inspect/plugin-gio.xml: - * docs/plugins/inspect/plugin-ivorbisdec.xml: - * docs/plugins/inspect/plugin-libvisual.xml: - * docs/plugins/inspect/plugin-ogg.xml: - * docs/plugins/inspect/plugin-pango.xml: - * docs/plugins/inspect/plugin-playback.xml: - * docs/plugins/inspect/plugin-subparse.xml: - * docs/plugins/inspect/plugin-tcp.xml: - * docs/plugins/inspect/plugin-theora.xml: - * docs/plugins/inspect/plugin-typefindfunctions.xml: - * docs/plugins/inspect/plugin-videoconvert.xml: - * docs/plugins/inspect/plugin-videorate.xml: - * docs/plugins/inspect/plugin-videoscale.xml: - * docs/plugins/inspect/plugin-videotestsrc.xml: - * docs/plugins/inspect/plugin-volume.xml: - * docs/plugins/inspect/plugin-vorbis.xml: - * docs/plugins/inspect/plugin-ximagesink.xml: - * docs/plugins/inspect/plugin-xvimagesink.xml: - * gst-plugins-base.doap: - * win32/common/_stdint.h: - * win32/common/config.h: - Release 1.4.1 +2014-08-29 19:15:56 +0100 Tim-Philipp Müller -2014-08-27 14:27:28 +0300 Sebastian Dröge + * ext/pango/gstbasetextoverlay.c: + textoverlay: remove code that can't be reached + If this code could ever be reached, it would leak + memory (CID 1231978), but gst_caps_get_features() + never returns NULL, so that can't happen. + +2014-08-29 18:18:10 +0100 Tim-Philipp Müller + + * gst/encoding/gstencodebin.c: + encoding: remove assignment that's no longer needed + CID 1231980 + +2014-07-23 21:25:24 +0200 Peter G. Baum + + * gst-libs/gst/riff/riff-ids.h: + * gst-libs/gst/riff/riff-read.c: + riff: Recognize RF64 as RIFF file + https://bugzilla.gnome.org/show_bug.cgi?id=735631 - * po/af.po: - * po/az.po: - * po/bg.po: - * po/ca.po: - * po/cs.po: - * po/da.po: - * po/de.po: - * po/el.po: - * po/en_GB.po: - * po/eo.po: - * po/es.po: - * po/eu.po: - * po/fi.po: - * po/fr.po: - * po/gl.po: - * po/hr.po: - * po/hu.po: - * po/id.po: - * po/it.po: - * po/ja.po: - * po/lt.po: - * po/lv.po: - * po/nb.po: - * po/nl.po: - * po/or.po: - * po/pl.po: - * po/pt_BR.po: - * po/ro.po: - * po/ru.po: - * po/sk.po: - * po/sl.po: - * po/sq.po: - * po/sr.po: - * po/sv.po: - * po/tr.po: - * po/uk.po: - * po/vi.po: - * po/zh_CN.po: - Update .po files +2014-08-27 13:45:57 +0200 Göran Jönsson -2014-08-27 12:30:10 +0300 Sebastian Dröge + * gst-libs/gst/rtsp/gstrtspconnection.c: + rtspconnection: Protect readsrc, writesrc and controllsrc with a mutex + Fixes a crash when controlsrc, readsrc or writesrc are modified from + gst_rtsp_source_dispatch_read/write and gst_rtsp_watch_reset at the + same time. + https://bugzilla.gnome.org/show_bug.cgi?id=735569 - * po/de.po: - * po/hu.po: - * po/id.po: - * po/nb.po: - * po/nl.po: - * po/pl.po: - * po/ru.po: - * po/sv.po: - * po/uk.po: - * po/vi.po: - po: Update translations +2014-08-28 17:13:05 +0300 Sebastian Dröge + + * gst/playback/gstplaysinkconvertbin.c: + playsinkconvertbin: setcaps() always returns TRUE and the return value is unused + Change it to a void return value. The caps are forwarded afterwards via + gst_pad_event_default() and not inside this function. + CID 1226477 + +2014-08-28 17:06:22 +0300 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Fix broken boolean expression + We can seek with end_type==NONE and end_type==SET && end_position=-1. The + check for end_type!=NONE made the second condition impossible. + CID 1226440 + +2014-08-28 17:00:26 +0300 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Fix broken boolean expression + We can seek with end_type==NONE and end_type==SET && end_position=-1. The + check for end_type!=NONE made the second condition impossible. + CID 1226439 + +2014-08-25 20:59:40 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + * gst/playback/gsturidecodebin.c: + decodebin: Include information from the error messages of tried but failed elements in the missing plugin errors + +2014-08-25 16:22:46 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Initialize local variables for every retry + +2014-08-25 15:15:06 +0300 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Remove error case that resulted in two error messages + We already send one in gst_decode_bin_expose() for this case. Only + if we're unable to typefind the caps another error message is needed. + +2014-08-24 22:36:59 +0100 Tim-Philipp Müller + + * gst/typefind/gsttypefindfunctions.c: + typefinding: tighten checks for 'freeform mp3' a little + Freeform mp3s typically have bitrates higher than the + otherwise max allowed rate. Prevents misdetection of + some truetype font files as mp3. + https://bugzilla.gnome.org/show_bug.cgi?id=732923 2014-08-25 13:14:36 +0300 Sebastian Dröge * gst-libs/gst/audio/gstaudiodecoder.c: audiodecoder: Don't ignore ::start/stop return values +2014-08-18 13:04:31 +0100 Tim-Philipp Müller + + * gst-plugins-base.spec.in: + spec: add gst-device-monitor-1.0 to RPM .spec file + https://bugzilla.gnome.org/show_bug.cgi?id=734944 + 2014-08-14 16:57:01 -0300 Thiago Santos * gst/playback/gstplaysinkconvertbin.c: @@ -460,6 +9334,78 @@ sink doesn't support them https://bugzilla.gnome.org/show_bug.cgi?id=734822 +2014-08-15 13:31:53 +0200 Thibault Saunier + + * gst-libs/gst/pbutils/gstdiscoverer.c: + discoverer: Set 'processing = FALSE' when done discovering SYNC + This avoids a race where we would get new tag but we are already + prerolled and analyzing results. + It is the way it is supposed to be handled as stated in comment: + "If preroll is complete, drop these tags - the collected information is + possibly already being processed and adding more tags would be racy" + +2014-08-14 17:21:44 -0300 Thiago Santos + + * win32/common/libgstvideo.def: + gstvideo: add missing entry to win32 .def + gst_video_guess_framerate + +2014-08-14 23:53:16 +1000 Jan Schmidt + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/video.c: + * gst-libs/gst/video/video.h: + video: Add gst_video_guess_framerate() function + Takes a nominal frame duration and returns a standard + FPS if it matches closely enough (< 0.1%), or else + calculates a framerate that'll do. + +2014-08-15 01:04:45 +1000 Jan Schmidt + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/video/gstvideometa.h: + * gst-libs/gst/video/gstvideoutils.h: + * gst-libs/gst/video/video-format.c: + * gst-libs/gst/video/video-frame.h: + * gst-libs/gst/video/video-overlay-composition.c: + video: Various simple docs fixes + +2014-08-08 20:01:20 +1000 Jan Schmidt + + * gst-libs/gst/video/gstvideodecoder.c: + * gst-libs/gst/video/gstvideodecoder.h: + videodecoder: Reset last_timestamp_out on new segment + Reset last_timestamp_out when applying the output segment + change, to avoid decoder confusion over new timestamp timelines when + a seamless segment change happens. + Move some locks/unlocks to later when they're actually needed. + https://bugzilla.gnome.org/show_bug.cgi?id=734617 + +2014-07-14 12:29:50 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: handle group switching for deadend group + Gracefully handle switching groups that all pads are deadend. + This can happen when quickly switching programs on mpegts as the + output is unaligned it can happen that not enough data was accumulated at + parsers to generate any buffers, causing the stream to receive EOS before + any data can be decoded. + To handle this scenario, the _expose function now also gets if there is + any next group to be exposed along with the list of endpads. If there are + no endpads and there is another group to expose it will switch to this next + group and then retry exposing the streams. + Also, the requirement to only switch from the chain that has the endpad had + to be modified to care for when the drainpad is NULL + https://bugzilla.gnome.org/show_bug.cgi?id=733169 + +2014-07-11 18:51:44 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: consider all deadend pads as drained + Otherwise when switching out a group with a deadend pad it will block + as it would be waiting for EOS on a deadend that already got one + https://bugzilla.gnome.org/show_bug.cgi?id=733169 + 2014-08-12 13:41:04 -0300 Thiago Santos * ext/pango/gstbasetextoverlay.c: @@ -473,6 +9419,32 @@ not handled by our converters. https://bugzilla.gnome.org/show_bug.cgi?id=734683 +2014-08-12 23:18:57 +1000 Jan Schmidt + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Don't drain and flush on SEGMENT events. + As was done for the base video decoder in commit 695675, don't + flush out the decoder on a new SEGMENT event. Segment events + may be a new segment, but are also often segment updates for + the current segment where the old data should be kept. For new + segments, a STREAM_START event will already trigger a drain, but + make sure to flush any remaining partial data then as well. + https://bugzilla.gnome.org/show_bug.cgi?id=734666 + +2014-08-11 10:15:14 +0530 Sanjay NM + + * gst/videoscale/gstvideoscale.c: + videoscale: Add NV21 support + https://bugzilla.gnome.org/show_bug.cgi?id=734650 + +2014-08-11 18:21:26 +0200 Matthieu Crapet + + * tests/icles/playback/decodetest.c: + * tests/icles/playback/test.c: + * tests/icles/playback/test5.c: + tests: fix decodebin signal used in icles/playback/ decodetest, test and test5 + Since release 1.1.4, "new-decoded-pad" no longer exists. + 2014-08-08 12:46:47 -0300 Thiago Santos * ext/pango/gstbasetextoverlay.c: @@ -500,6 +9472,129 @@ Avoids returning values that upstream can't produce https://bugzilla.gnome.org/show_bug.cgi?id=733916 +2014-07-30 16:59:15 -0300 Thiago Santos + + * gst/encoding/gstencodebin.c: + * tests/check/elements/encodebin.c: + encodebin: delay missing encoder error as passthrough is still possible + Set up a fakesink with a pad probe to replace the missing encoder to detect + if encoding was really required and only error out in this case. Otherwise + just let passthrough branch work. + This delays the error posting from the set_state function to when buffers + are really flowing. Unit test updated accordingly + https://bugzilla.gnome.org/show_bug.cgi?id=650652 + +2014-08-11 10:57:43 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Remove buffering special casing for adaptive streaming demuxers + They output smaller buffers now and we should be able to handle the buffering + limits like in every other situation now. + +2014-08-07 10:44:03 +0200 Jan Alexander Steffens (heftig) + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Don't set decoding timestamps on raw video + https://bugzilla.gnome.org/show_bug.cgi?id=733720 + +2014-08-07 18:10:41 +0300 George Kiagiadakis + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: In reverse playback, flush the output queue after decoding each keyframe chain + This fixes the reverse playback scenario when upstream is not fully + parsing the stream and does not send every keyframe chain separately + with the DISCONT flag on the keyframe. + To explain this, let's suppose we have this stream: + 0 1 2 3 4 5 6 7 8 + K K K + In most circumstances, the upstream parser will chain in the + decoder the buffers in the following order: + 6 7 8 3 4 5 0 1 2 + D D D + In this case, GstVideoDecoder will flush the parse queue every time + it receives discont (D) and we will eventually get in the output queue: + (flush here) 8 7 6 (flush here) 5 4 3 (flush here) 2 1 0 + In case the upstream parser doesn't do this work, though, + GstVideoDecoder will receive the whole stream at once and will flush + the parse queue afterwards: + 0 1 2 3 4 5 6 7 8 + D + During the flush, it will look backwards for keyframes and will + decode in this order: + 6 7 8 3 4 5 0 1 2 + This is the same order that it would receive from upstream if + upstream was parsing and looking for the keyframes, only that now + there is no flushing of the output queue in between keyframes, + which will result in the output queue looking like this: + 2 1 0 6 5 3 8 7 6 + This will confuse downstream obviously and will play incorrectly. + This patch forces the decoder to flush the output queue every time + it picks a new keyframe to decode, so it will end up decoding 6 7 8 + and then flushing before picking 3 for decoding, so the output will + get 8 7 6 before 6 5 3 and the video will play back correctly. + https://bugzilla.gnome.org/show_bug.cgi?id=734441 + +2014-08-10 17:30:18 +0100 Tim-Philipp Müller + + * configure.ac: + configure: use pkg-config to detect x11 and xv libs + AC_PATH_XTRA macro unnecessarily pulls in libSM and libICE. + https://bugzilla.gnome.org/show_bug.cgi?id=731047 + +2014-08-10 17:27:14 +0100 Tim-Philipp Müller + + * sys/xvimage/xvimageallocator.c: + xvimage: fix crash when outputting debug log + Can't print a GstMemory via GST_PTR_FORMAT, it will crash + inside GObject checking if it's a GObject, and we can't + check generically whether it's a derived GstMemory type, + as boxed types don't allowe derivation. + +2014-08-09 14:14:48 +0200 Sebastian Rasmussen + + * gst-libs/gst/audio/gstaudioencoder.c: + audioencoder: Mark caps argument as not being transferred + https://bugzilla.gnome.org/show_bug.cgi?id=734540 + +2014-08-09 14:20:32 +0200 Sebastian Rasmussen + + * ext/vorbis/gstvorbisenc.c: + vorbisenc: Improve annotation of internal function + https://bugzilla.gnome.org/show_bug.cgi?id=734541 + +2014-08-06 13:41:46 +0200 Sebastian Rasmussen + + * tests/check/elements/appsrc.c: + * tests/examples/app/appsink-src.c: + * tests/examples/audio/audiomix.c: + * tests/examples/audio/volume.c: + * tests/examples/dynamic/codec-select.c: + * tests/examples/seek/scrubby.c: + * tests/examples/snapshot/snapshot.c: + * tests/icles/stress-videooverlay.c: + * tests/icles/test-textoverlay.c: + tests: Add missing unrefs of objects after use + Unreffing the objects returned by gst_bin_get_by_name() and + gst_pipeline_get_use() were missing in several tests, so add these. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=734359 + +2014-08-06 13:22:56 +0200 Sebastian Rasmussen + + * ext/ogg/gstoggdemux.c: + oggdemux: Unref peer pad after use in error case + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=734350 + +2014-08-06 10:07:42 +0200 Sebastian Dröge + + * gst-libs/gst/app/gstappsrc.c: + appsrc: Some minor fixes and cleanup + +2014-08-06 09:59:32 -0400 Wang Xin-yu (王昕宇) + + * gst-libs/gst/app/gstappsrc.c: + appsrc: Make caps set action queued together with buffer + https://bugzilla.gnome.org/show_bug.cgi?id=729760 + 2014-08-01 15:00:46 +0200 Sebastian Dröge * gst/playback/gstplaybin2.c: @@ -508,6 +9603,21 @@ that our pad references are gone now. Probably fixes https://bugzilla.gnome.org/show_bug.cgi?id=733165 +2014-07-30 20:53:53 +0300 Mohammed Sameer + + * gst/playback/gststreamsynchronizer.c: + streamsynchronizer: don't unset DISCONT flag + Unsetting DISCONT flag means we need to copy the buffer. This copy operation + mandates that all GstMemory should be copy-able which is not always the case + https://bugzilla.gnome.org/show_bug.cgi?id=727409 + +2014-07-31 18:40:59 +0200 Edward Hervey + + * Makefile.am: + * common: + Makefile: Add usage of build-checks step + Allows building checks without running them + 2014-07-31 16:09:41 +0200 Edward Hervey * tests/check/libs/rtpbasedepayload.c: @@ -525,6 +9635,192 @@ pipeline back to NULL instead of READY. https://bugzilla.gnome.org/show_bug.cgi?id=733976 +2014-07-29 14:20:42 -0300 Thiago Santos + + * gst/playback/gstdecodebin2.c: + decodebin: add missing 'time' word to debug message + It prints the buffers, bytes and time limits, but 'time' was missing + from the string. + +2014-07-28 16:56:08 +0200 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Pass through NO_PREROLL state change returns + Fixes playback of live pipelines. + +2014-07-28 16:55:17 +0200 Sebastian Dröge + + * gst/playback/gsturidecodebin.c: + uridecodebin: Pass through NO_PREROLL state change returns + Fixes playback of live pipelines. + +2014-07-26 14:52:01 +0100 Tim-Philipp Müller + + * gst/playback/gstplaybin2.c: + playbin: fix 'attempt to unlock mutex that was not locked' in error code path + Fixes playbin unit test with latest GLib. + +2014-07-08 16:59:37 -0400 Nicolas Dufresne + + * gst-libs/gst/video/gstvideoencoder.c: + videoencoder: Don't delay set_format + This prevent implementing allocation query, as the format need to be + known in order to determin the size and number of buffers needed. + Note: This may lead to few regressions that will need fixing + https://bugzilla.gnome.org/show_bug.cgi?id=732288 + +2014-07-23 19:51:36 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Don't unref caps for which we don't own a reference... get one first + https://bugzilla.gnome.org/show_bug.cgi?id=733615 + +2014-07-23 12:36:15 +0200 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Go asynchronously from READY to PAUSED + We now add all our elements to uridecodebin *after* + GstBin::change_state(READY->PAUSED), so we need to post async-start + and async-done messages ourselves if we want to work async. + https://bugzilla.gnome.org/show_bug.cgi?id=733495 + +2014-07-23 12:27:36 +0200 Sebastian Dröge + + * gst/playback/gsturidecodebin.c: + uridecodebin: Go asynchronously from READY to PAUSED + We now add all our elements to uridecodebin *after* + GstBin::change_state(READY->PAUSED), so we need to post async-start + and async-done messages ourselves if we want to work async. + https://bugzilla.gnome.org/show_bug.cgi?id=733495 + +2014-07-21 15:54:05 +0300 Vivia Nikolaidou + + * tools/gst-discoverer.c: + discoverer: Pretty-print topology tags + Call the code used in properties for topology tags too. + Side-effect achieved: more tags printed, buffers (e.g. images) shortened. + +2014-07-21 13:53:17 +0200 Sebastian Dröge + + * tools/gst-discoverer.c: + discoverer: Fix code style a bit + if (...) + one_line; + else if (...) { + many_lines; + } else + one_line; + looks a bit confusing. + +2014-07-21 13:48:31 +0300 Vivia Nikolaidou + + * tools/gst-discoverer.c: + discoverer: prettier image tag printing + Rather than dumping the serialized sample value, the code now + prints the number of bytes in the buffer, then the caps in a + human-readable format. + https://bugzilla.gnome.org/show_bug.cgi?id=733482 + +2014-07-10 12:39:46 +0200 Sebastian Dröge + + * gst-libs/gst/audio/gstaudiodecoder.c: + audiodecoder: Handle CAPS events immediately instead of delaying them + https://bugzilla.gnome.org/show_bug.cgi?id=733147 + +2014-07-11 21:51:05 +0200 Sebastian Dröge + + * gst-libs/gst/video/gstvideodecoder.c: + videodecoder: Handle CAPS events immediately instead of delaying them + https://bugzilla.gnome.org/show_bug.cgi?id=733147 + +2014-07-15 17:34:01 +0200 Sebastian Dröge + + * tests/check/elements/playbin.c: + playbin: Fix unit test for last change + It will successfully asynchronously go to PAUSED now and + later fail. + +2014-07-15 17:23:24 +0200 Sebastian Dröge + + * gst/playback/gsturidecodebin.c: + uridecodebin: Create new sources after chaining up to the parent class + Otherwise we start the new sources already before the parent class + got ready to start. + +2014-07-15 17:20:05 +0200 Sebastian Dröge + + * gst/playback/gstplaybin2.c: + playbin: Create new sources after chaining up to the parent class + Otherwise we start the new sources already before the parent class + got ready to start. + +2014-07-10 16:26:08 +0200 Sebastian Dröge + + * tests/check/elements/playbin-complex.c: + playbin-complex: Change template name from %d to the more common %u + +2014-07-10 16:24:36 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Link Parser/Converter directly and already connect to pad-added and other signals before setting elements to PAUSED + otherwise we're going to + a) start Parser/Converter before they are linked to their capsfilter, + breaking their negotiation of a proper stream format + b) start demuxers without having connected to their pad-added signals. We + miss pads and in the worst case don't link any pads at all + +2014-07-10 12:51:22 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Send sticky events to the new element after setting it to PAUSED + ... and if this fails for whatever reason we skip the element and instead + try with the next element. This allows us to handle elements that fail + when setting caps on them by just skipping to the next alternative element. + +2014-07-10 12:50:17 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Only link elements further after setting them to PAUSED + They might fail to go to PAUSED, and when connecting them further + we might already expose their srcpads on decodebin if we're unlucky. + This prevents us to handle failures going to PAUSED gracefully. + +2014-07-10 12:22:35 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Remove ERROR message filter after we set the element to PAUSED + This allows us to catch more errors gracefully and switch to an alternative + element instead. + +2014-07-10 12:17:52 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Only continue autoplugging once the pad has final caps + If the caps query returned us fixed caps this doesn't mean yet + that these caps are actually complete (fields might be missing). + It allows to do us some decisions, but the selection of the next + element should be delayed as only complete caps allow proper selection + of the next element. + +2014-07-10 12:03:46 +0200 Sebastian Dröge + + * gst/playback/gstdecodebin2.c: + decodebin: Consider the caps after the capsfilter after parsers for autoplugging + Otherwise we might try to continue autoplugging e.g. for a specific + stream-format although the parser could convert to something else, thus giving + us potentially less options for decoders. + +2014-07-21 00:17:38 +0100 Tim-Philipp Müller + + * gst-libs/gst/pbutils/missing-plugins.c: + pbutils: fix missing plugin description for missing elements + CID: 1226445 + +2014-07-19 18:04:35 +0200 Sebastian Dröge + + * configure.ac: + Back to development + === release 1.4.0 === 2014-07-19 17:04:57 +0200 Sebastian Dröge diff -Nru gst-plugins-base1.0-1.4.3/common/check.mak gst-plugins-base1.0-1.6.1/common/check.mak --- gst-plugins-base1.0-1.4.3/common/check.mak 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/check.mak 2015-10-22 08:01:49.000000000 +0000 @@ -16,37 +16,38 @@ # run any given test by running make test.check # if the test fails, run it again at at least debug level 2 %.check: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* || \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ GST_DEBUG=$$GST_DEBUG,*:2 \ CK_DEFAULT_TIMEOUT=20 \ $* # just like 'check', but don't run it again if it fails (useful for debugging) %.check-norepeat: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* # run any given test in a loop %.torture: % @for i in `seq 1 $(LOOPS)`; do \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $*; done # run any given test in an infinite loop %.forever: % @while true; do \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* || break; done # valgrind any given test by running make test.valgrind %.valgrind: % - @$(TESTS_ENVIRONMENT) \ + @valgrind_log=$(subst /,-,$*-valgrind.log); \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=360 \ G_SLICE=always-malloc \ $(LIBTOOL) --mode=execute \ @@ -55,16 +56,16 @@ --tool=memcheck --leak-check=full --trace-children=yes \ --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ - ./$* 2>&1 | tee valgrind.log - @if grep "==" valgrind.log > /dev/null 2>&1; then \ - rm valgrind.log; \ + ./$* 2>&1 | tee $$valgrind_log ; \ + if grep "==" $$valgrind_log > /dev/null 2>&1; then \ + rm $$valgrind_log; \ exit 1; \ - fi - @rm valgrind.log + fi ; \ + rm $$valgrind_log # valgrind any given test and generate suppressions for it %.valgrind.gen-suppressions: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=360 \ G_SLICE=always-malloc \ $(LIBTOOL) --mode=execute \ @@ -94,7 +95,7 @@ # gdb any given test by running make test.gdb %.gdb: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_FORK=no \ $(LIBTOOL) --mode=execute \ gdb $* @@ -150,19 +151,13 @@ # valgrind all tests valgrind: $(TESTS) @echo "Valgrinding tests ..." - @failed=0; \ + @failed=0; valgrind_targets=""; \ for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ - $(MAKE) $$t.valgrind; \ - if test "$$?" -ne 0; then \ - echo "Valgrind error for test $$t"; \ - failed=`expr $$failed + 1`; \ - whicht="$$whicht $$t"; \ - fi; \ + valgrind_targets="$$valgrind_targets $$t.valgrind"; \ done; \ - if test "$$failed" -ne 0; then \ - echo "$$failed tests had leaks or errors under valgrind:"; \ - echo "$$whicht"; \ - false; \ + if ! $(MAKE) $$valgrind_targets ; then \ + echo "Some tests had leaks or errors under valgrind"; \ + false; \ fi # valgrind all tests until failure @@ -210,11 +205,14 @@ GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_API_VERSION) inspect: @echo "Inspecting features ..." - @for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ + @for e in `$(AM_TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ | cut -d: -f2`; \ do echo Inspecting $$e; \ $(GST_INSPECT) $$e > /dev/null 2>&1; done +# build all tests +build-checks: $(TESTS) + help: @echo @echo "make check -- run all checks" @@ -237,6 +235,7 @@ @echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions" @echo " and save to suppressions.log" @echo "make inspect -- inspect all plugin features" + @echo "make build-checks -- build all checks (but don't run them)" @echo @echo @echo "Additionally, you can use the GST_CHECKS environment variable to" diff -Nru gst-plugins-base1.0-1.4.3/common/gst-autogen.sh gst-plugins-base1.0-1.6.1/common/gst-autogen.sh --- gst-plugins-base1.0-1.4.3/common/gst-autogen.sh 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gst-autogen.sh 2015-10-22 08:01:49.000000000 +0000 @@ -20,216 +20,6 @@ fi } -version_get () -# based on the command's version output, set variables -# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix -# -# arg 1: command binary name -# arg 2: (uppercased) variable name prefix -{ - COMMAND=$1 - VARPREFIX=`echo $2 | tr .,- _` - local ${VARPREFIX}_VERSION - - # strip everything that's not a digit, then use cut to get the first field - pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1` - debug "pkg_version $pkg_version" - # remove any non-digit characters from the version numbers to permit numeric - # comparison - pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g` - pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g` - pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g` - test -z "$pkg_major" && pkg_major=0 - test -z "$pkg_minor" && pkg_minor=0 - test -z "$pkg_micro" && pkg_micro=0 - debug "found major $pkg_major minor $pkg_minor micro $pkg_micro" - eval ${VARPREFIX}_MAJOR=$pkg_major - eval ${VARPREFIX}_MINOR=$pkg_minor - eval ${VARPREFIX}_MICRO=$pkg_micro - eval ${VARPREFIX}_VERSION=$pkg_version -} - -version_compare () -# Checks whether the version of VARPREFIX is equal to or -# newer than the requested version -# arg1: VARPREFIX -# arg2: MAJOR -# arg3: MINOR -# arg4: MICRO -{ - VARPREFIX=`echo $1 | tr .,- _` - MAJOR=$2 - MINOR=$3 - MICRO=$4 - - eval pkg_major=\$${VARPREFIX}_MAJOR; - eval pkg_minor=\$${VARPREFIX}_MINOR; - eval pkg_micro=\$${VARPREFIX}_MICRO; - - #start checking the version - debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO" - - # reset check - WRONG= - - if [ ! "$pkg_major" -gt "$MAJOR" ]; then - debug "major: $pkg_major <= $MAJOR" - if [ "$pkg_major" -lt "$MAJOR" ]; then - debug "major: $pkg_major < $MAJOR" - WRONG=1 - elif [ ! "$pkg_minor" -gt "$MINOR" ]; then - debug "minor: $pkg_minor <= $MINOR" - if [ "$pkg_minor" -lt "$MINOR" ]; then - debug "minor: $pkg_minor < $MINOR" - WRONG=1 - elif [ "$pkg_micro" -lt "$MICRO" ]; then - debug "micro: $pkg_micro < $MICRO" - WRONG=1 - fi - fi - fi - if test ! -z "$WRONG"; then - debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO" - return 1 - fi - debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO" - return 0 -} - - -version_check () -# check the version of a package -# first argument : package name (executable) -# second argument : optional path where to look for it instead -# third argument : source download url -# rest of arguments : major, minor, micro version -# all consecutive ones : suggestions for binaries to use -# (if not specified in second argument) -{ - PACKAGE=$1 - PKG_PATH=$2 - URL=$3 - MAJOR=$4 - MINOR=$5 - MICRO=$6 - - # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null - if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi - debug "major $MAJOR minor $MINOR micro $MICRO" - VERSION=$MAJOR - if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi - if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi - - debug "major $MAJOR minor $MINOR micro $MICRO" - - for SUGGESTION in $PKG_PATH; do - COMMAND="$SUGGESTION" - - # don't check if asked not to - test -z "$NOCHECK" && { - printf " checking for $COMMAND >= $VERSION ... " - } || { - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - } - - which $COMMAND > /dev/null 2>&1 - if test $? -eq 1; - then - debug "$COMMAND not found" - continue - fi - - VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]` - version_get $COMMAND $VARPREFIX - - version_compare $VARPREFIX $MAJOR $MINOR $MICRO - if test $? -ne 0; then - echo "found $pkg_version, not ok !" - continue - else - echo "found $pkg_version, ok." - # we set a var with the same name as the package, but stripped of - # unwanted chars - VAR=`echo $PACKAGE | sed 's/-//g'` - debug "setting $VAR" - eval $VAR="$COMMAND" - return 0 - fi - done - - echo "$PACKAGE not found !" - echo "You must have $PACKAGE installed to compile $package." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at $URL" - return 1; -} - -aclocal_check () -{ - # normally aclocal is part of automake - # so we expect it to be in the same place as automake - # so if a different automake is supplied, we need to adapt as well - # so how's about replacing automake with aclocal in the set var, - # and saving that in $aclocal ? - # note, this will fail if the actual automake isn't called automake* - # or if part of the path before it contains it - if [ -z "$automake" ]; then - echo "Error: no automake variable set !" - return 1 - else - aclocal=`echo $automake | sed s/automake/aclocal/` - debug "aclocal: $aclocal" - if [ "$aclocal" != "aclocal" ]; - then - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal" - fi - if [ ! -x `which $aclocal` ]; then - echo "Error: cannot execute $aclocal !" - return 1 - fi - fi -} - -autoheader_check () -{ - # same here - autoheader is part of autoconf - # use the same voodoo - if [ -z "$autoconf" ]; then - echo "Error: no autoconf variable set !" - return 1 - else - autoheader=`echo $autoconf | sed s/autoconf/autoheader/` - debug "autoheader: $autoheader" - if [ "$autoheader" != "autoheader" ]; - then - CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader" - fi - if [ ! -x `which $autoheader` ]; then - echo "Error: cannot execute $autoheader !" - return 1 - fi - fi - -} - -die_check () -{ - # call with $DIE - # if set to 1, we need to print something helpful then die - DIE=$1 - if test "x$DIE" = "x1"; - then - echo - echo "- Please get the right tools before proceeding." - echo "- Alternatively, if you're sure we're wrong, run with --nocheck." - exit 1 - fi -} autogen_options () { diff -Nru gst-plugins-base1.0-1.4.3/common/gstdoc-scangobj gst-plugins-base1.0-1.6.1/common/gstdoc-scangobj --- gst-plugins-base1.0-1.4.3/common/gstdoc-scangobj 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gstdoc-scangobj 2015-10-22 08:01:49.000000000 +0000 @@ -110,6 +110,8 @@ my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new"; my $old_args_filename = "$OUTPUT_DIR/$MODULE.args"; my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new"; +my $old_sections_filename = "$OUTPUT_DIR/$MODULE-sections"; +my $new_sections_filename = "$OUTPUT_DIR/$MODULE-sections.new"; my $debug_log="g_message"; if (!defined($VERBOSE) or $VERBOSE eq "0") { @@ -437,32 +439,30 @@ const gchar *interfaces_filename = "$new_interfaces_filename"; const gchar *prerequisites_filename = "$new_prerequisites_filename"; const gchar *args_filename = "$new_args_filename"; +const gchar *sections_filename = "$new_sections_filename"; static void output_signals (void); -static void output_object_signals (FILE *fp, - GType object_type); -static void output_object_signal (FILE *fp, - const gchar *object_class_name, +static void output_object_signals (FILE *fp, GType object_type); +static void output_object_signal (FILE *fp, const gchar *object_class_name, guint signal_id); -static const gchar * get_type_name (GType type, - gboolean * is_pointer); +static const gchar * get_type_name (GType type, gboolean * is_pointer); static void output_object_hierarchy (void); -static void output_hierarchy (FILE *fp, - GType type, - guint level); +static void output_hierarchy (FILE *fp, GType type, guint level); static void output_object_interfaces (void); -static void output_interfaces (FILE *fp, - GType type); +static void output_interfaces (FILE *fp, GType type); static void output_interface_prerequisites (void); -static void output_prerequisites (FILE *fp, - GType type); +static void output_prerequisites (FILE *fp, GType type); static void output_args (void); static void output_object_args (FILE *fp, GType object_type); +static void output_sections (void); +static void output_object_section (FILE *fp, GType object_type); + + int main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[]) { @@ -475,6 +475,8 @@ output_object_interfaces (); output_interface_prerequisites (); output_args (); + + output_sections (); return 0; } @@ -1570,6 +1572,139 @@ break; } } + +static void +output_sections (void) +{ + FILE *fp; + gint i; + + fp = fopen (sections_filename, "w"); + if (fp == NULL) + { + g_warning ("Couldn't open output file: %s : %s", sections_filename, g_strerror(errno)); + return; + } + + for (i = 0; object_types[i]; i++) { } + qsort (object_types, i, sizeof (GType), compare_types); + + for (i = 0; object_types[i]; i++) { + output_object_section (fp, object_types[i]); + } + + fclose (fp); +} + +static gboolean +find_by_type (GstPluginFeature *f, gpointer data) { + return (GST_IS_ELEMENT_FACTORY(f) && + ((GType)data == gst_element_factory_get_element_type (GST_ELEMENT_FACTORY(f)))); +} + +static void +output_object_section (FILE *fp, GType object_type) +{ + /* e.g. GstFakeSink */ + const gchar *tn = g_type_name (object_type); + const gchar *cct = &tn[3]; /* cut 'Gst' */ + gchar *title, *lct, *uct; + gint i, j, l = strlen(cct); + gpointer class; + GParamSpec **properties; + guint n_properties; + const gchar *ptn; + gchar *ptns; + GString *strbuf = g_string_new (NULL); + GList *fl; + GstPluginFeature *f = NULL; + gboolean need_unserscore = TRUE, have_abbrev = FALSE; + + fl = gst_registry_feature_filter (gst_registry_get(), find_by_type, TRUE, + (gpointer)object_type); + if (fl) { + f = fl->data; + g_list_free(fl); + } + if (f) { + title = g_strdup (gst_plugin_feature_get_name(f)); + g_object_unref (f); + } else { + title = g_ascii_strdown(cct, -1); + } + + /* turn CamelCase into '_' separated all lower, resulting string is atmost + * twice as long, special casing for abbevs like GstTCPClientSink */ + lct = g_malloc(2*l); + for (i = 0, j = 0; i < l; i++) { + if (g_ascii_isupper (cct[i])) { + if (need_unserscore) { + if (i > 0) { + lct[j++] = '_'; + } + } else { + have_abbrev = TRUE; + } + lct[j++] = g_ascii_tolower(cct[i]); + need_unserscore = FALSE; + } else { + if (have_abbrev) { + lct[j] = lct[j-1]; + lct[j-1] = '_'; + j++; + have_abbrev = FALSE; + } + lct[j++] = cct[i]; + need_unserscore = TRUE; + } + } + lct[j] = '\\0'; + uct = g_ascii_strup(lct, -1); + + /* scan properties and find local enums */ + class = g_type_class_peek (object_type); + properties = g_object_class_list_properties (class, &n_properties); + qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs); + for (i = 0; i < n_properties; i++) { + GParamSpec *spec = properties[i]; + if (!(G_IS_PARAM_SPEC_ENUM (spec) || G_IS_PARAM_SPEC_FLAGS (spec))) { + continue; + } + ptn = g_type_name(spec->value_type); + // does it start with tn? + if (strncmp(tn, ptn, strlen(tn))) { + continue; + } + g_string_append_c(strbuf, '\\n'); + g_string_append(strbuf, ptn); + } + ptns = g_string_free (strbuf, FALSE); + + /* later we can remove the SUBSECTION Standart/Private, since we only need to + * highlight what is public API */ + fprintf (fp, "
\\n" + "element-%s\\n" + "%s\\n" + "Gst%s%s\\n" + "\\n" + "Gst%sClass\\n" + "GST_%s\\n" + "GST_%s_CAST\\n" + "GST_IS_%s\\n" + "GST_%s_CLASS\\n" + "GST_IS_%s_CLASS\\n" + "GST_TYPE_%s\\n" + "\\n" + "gst_%s_get_type\\n" + "
\\n\\n", + title, title, cct, ptns, + cct, uct, uct, uct, uct, uct, uct, lct); + g_free (title); + g_free (lct); + g_free (uct); + g_free (ptns); +} + EOT close OUTPUT; @@ -1614,4 +1749,4 @@ #&UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0); #&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0); #&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0); - +#&UpdateFileIfChanged ($old_sections_filename, $new_sections_filename, 0); diff -Nru gst-plugins-base1.0-1.4.3/common/gst-indent gst-plugins-base1.0-1.6.1/common/gst-indent --- gst-plugins-base1.0-1.4.3/common/gst-indent 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gst-indent 2015-10-22 08:01:49.000000000 +0000 @@ -9,13 +9,19 @@ version=`gnuindent --version 2>/dev/null` if test "x$version" = "x"; then - version=`indent --version 2>/dev/null` + version=`gindent --version 2>/dev/null` if test "x$version" = "x"; then - echo "GStreamer git pre-commit hook:" - echo "Did not find GNU indent, please install it before continuing." - exit 1 + version=`indent --version 2>/dev/null` + if test "x$version" = "x"; then + echo "GStreamer git pre-commit hook:" + echo "Did not find GNU indent, please install it before continuing." + exit 1 + else + INDENT=indent + fi + else + INDENT=gindent fi - INDENT=indent else INDENT=gnuindent fi diff -Nru gst-plugins-base1.0-1.4.3/common/gst.supp gst-plugins-base1.0-1.6.1/common/gst.supp --- gst-plugins-base1.0-1.4.3/common/gst.supp 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gst.supp 2015-10-22 08:01:49.000000000 +0000 @@ -3965,3 +3965,58 @@ ... fun:g_quark_from*_string } + +{ + + Memcheck:Param + timer_create(evp) + fun:timer_create@@GLIBC_2.3.3 +} + +{ + closures aren't valgrind friendly (bgo#739850) + Memcheck:Leak + match-leak-kinds: possible + fun:calloc + ... + fun:g_cclosure_new +} + +{ + closures aren't valgrind friendly (bgo#739850) + Memcheck:Leak + match-leak-kinds: possible + fun:malloc + ... + fun:g_closure_add_invalidate_notifier +} + +{ + closures aren't valgrind friendly (bgo#739850) + Memcheck:Leak + match-leak-kinds: possible + fun:calloc + ... + fun:g_closure_new_simple +} + +{ + glib/giomodules2 (from libsoup.supp) + Memcheck:Leak + ... + fun:_g_io_module_get_default +} + +{ + + Memcheck:Addr8 + fun:__GI___strncasecmp_l + fun:____strtod_l_internal + fun:gst_value_deserialize_double +} + +{ + + Memcheck:Addr8 + fun:do_lookup_x +} diff -Nru gst-plugins-base1.0-1.4.3/common/gtk-doc.mak gst-plugins-base1.0-1.6.1/common/gtk-doc.mak --- gst-plugins-base1.0-1.4.3/common/gtk-doc.mak 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gtk-doc.mak 2015-10-22 08:01:49.000000000 +0000 @@ -3,7 +3,16 @@ ########################################################################### # thomas: except of course that we did -# thomas: copied from glib-2 +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = $(LIBTOOL) --mode=execute +else +GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = +endif + # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then @@ -81,15 +90,22 @@ --ignore-headers="$(IGNORE_HFILES)" @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then \ echo " DOC Introspecting gobjects"; \ + scanobj_options=""; \ + gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ + if test "$$?" = "0"; then \ + if test "x$(V)" = "x1"; then \ + scanobj_options="--verbose"; \ + fi; \ + fi; \ GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd` \ GST_PLUGIN_PATH_1_0= \ GST_REGISTRY_1_0=doc-registry.xml \ $(GTKDOC_EXTRA_ENVIRONMENT) \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" \ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)" \ - --module=$(DOC_MODULE) ; \ + $$scanobj_options --module=$(DOC_MODULE) ; \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ diff -Nru gst-plugins-base1.0-1.4.3/common/gtk-doc-plugins.mak gst-plugins-base1.0-1.6.1/common/gtk-doc-plugins.mak --- gst-plugins-base1.0-1.4.3/common/gtk-doc-plugins.mak 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/gtk-doc-plugins.mak 2015-10-22 08:01:49.000000000 +0000 @@ -16,6 +16,16 @@ update: scanobj-update $(MAKE) check-outdated-docs +if GTK_DOC_USE_LIBTOOL +GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = $(LIBTOOL) --mode=execute +else +GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +GTKDOC_RUN = +endif + # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then @@ -44,11 +54,9 @@ # maintainers and result is commited to git DOC_STAMPS = \ scan-build.stamp \ - tmpl-build.stamp \ sgml-build.stamp \ html-build.stamp \ scan.stamp \ - tmpl.stamp \ sgml.stamp \ html.stamp @@ -122,7 +130,7 @@ scanobj_options="--verbose"; \ fi; \ $(INSPECT_ENVIRONMENT) \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ @@ -161,29 +169,9 @@ --ignore-headers="$(IGNORE_HFILES)"; \ touch scan-build.stamp -#### update templates; done on every build #### - -# in a non-srcdir build, we need to copy files from the previous step -# and the files from previous runs of this step -tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) - @echo ' DOC Rebuilding template files' - @if test x"$(srcdir)" != x. ; then \ - for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ - do \ - if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ - done; \ - fi - @gtkdoc-mktmpl --module=$(DOC_MODULE) - @$(PYTHON) \ - $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl - @touch tmpl-build.stamp - -tmpl.stamp: tmpl-build.stamp - @true - #### xml #### -sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) +sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) @echo ' DOC Building XML' @-mkdir -p xml @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ @@ -199,6 +187,7 @@ --output-format=xml \ --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ $(MKDB_OPTIONS) + @$(PYTHON) $(top_srcdir)/common/mangle-db.py xml @cp ../version.entities xml @touch sgml-build.stamp diff -Nru gst-plugins-base1.0-1.4.3/common/m4/ax_pthread.m4 gst-plugins-base1.0-1.6.1/common/m4/ax_pthread.m4 --- gst-plugins-base1.0-1.4.3/common/m4/ax_pthread.m4 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/ax_pthread.m4 2015-10-22 08:01:49.000000000 +0000 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff -Nru gst-plugins-base1.0-1.4.3/common/m4/gst-arch.m4 gst-plugins-base1.0-1.6.1/common/m4/gst-arch.m4 --- gst-plugins-base1.0-1.4.3/common/m4/gst-arch.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/gst-arch.m4 2015-10-22 08:01:49.000000000 +0000 @@ -45,9 +45,15 @@ xalpha*) HAVE_CPU_ALPHA=yes AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the target CPU is an Alpha]) ;; + xarc*) + HAVE_CPU_ARC=yes + AC_DEFINE(HAVE_CPU_ARC, 1, [Define if the target CPU is an ARC]) ;; xarm*) HAVE_CPU_ARM=yes AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the target CPU is an ARM]) ;; + xaarch64*) + HAVE_CPU_AARCH64=yes + AC_DEFINE(HAVE_CPU_AARCH64, 1, [Define if the target CPU is AARCH64]) ;; xsparc*) HAVE_CPU_SPARC=yes AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the target CPU is a SPARC]) ;; @@ -84,6 +90,7 @@ AM_CONDITIONAL(HAVE_CPU_PPC, test "x$HAVE_CPU_PPC" = "xyes") AM_CONDITIONAL(HAVE_CPU_PPC64, test "x$HAVE_CPU_PPC64" = "xyes") AM_CONDITIONAL(HAVE_CPU_ALPHA, test "x$HAVE_CPU_ALPHA" = "xyes") + AM_CONDITIONAL(HAVE_CPU_ARC, test "x$HAVE_CPU_ARC" = "xyes") AM_CONDITIONAL(HAVE_CPU_ARM, test "x$HAVE_CPU_ARM" = "xyes") AM_CONDITIONAL(HAVE_CPU_SPARC, test "x$HAVE_CPU_SPARC" = "xyes") AM_CONDITIONAL(HAVE_CPU_HPPA, test "x$HAVE_CPU_HPPA" = "xyes") @@ -104,7 +111,7 @@ AC_MSG_CHECKING([if unaligned memory access works correctly]) if test x"$as_cv_unaligned_access" = x ; then case $host in - alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*) + alpha*|arc*|arm*|aarch64*|hp*|mips*|sh*|sparc*|ia64*) _AS_ECHO_N([(blacklisted) ]) as_cv_unaligned_access=no ;; diff -Nru gst-plugins-base1.0-1.4.3/common/m4/gst-error.m4 gst-plugins-base1.0-1.6.1/common/m4/gst-error.m4 --- gst-plugins-base1.0-1.4.3/common/m4/gst-error.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/gst-error.m4 2015-10-22 08:01:49.000000000 +0000 @@ -76,14 +76,6 @@ ]) done ]) - else - dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 - dnl as before G_LOCK and friends caused strict aliasing compiler - dnl warnings. - PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ - AS_COMPILER_FLAG(-fno-strict-aliasing, - ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing") - ]) fi fi diff -Nru gst-plugins-base1.0-1.4.3/common/m4/gst-glib2.m4 gst-plugins-base1.0-1.6.1/common/m4/gst-glib2.m4 --- gst-plugins-base1.0-1.4.3/common/m4/gst-glib2.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/gst-glib2.m4 2015-10-22 08:01:49.000000000 +0000 @@ -120,6 +120,10 @@ GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`" AC_DEFINE_UNQUOTED(GIO_LIBDIR, "$GIO_LIBDIR", [The GIO library directory.]) + GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`" + AC_DEFINE_UNQUOTED(GIO_PREFIX, "$GIO_PREFIX", + [The GIO install prefix.]) + AC_SUBST(GIO_CFLAGS) AC_SUBST(GIO_LIBS) AC_SUBST(GIO_LDFLAGS) diff -Nru gst-plugins-base1.0-1.4.3/common/m4/gst-parser.m4 gst-plugins-base1.0-1.6.1/common/m4/gst-parser.m4 --- gst-plugins-base1.0-1.4.3/common/m4/gst-parser.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/gst-parser.m4 2015-10-22 08:01:49.000000000 +0000 @@ -15,7 +15,7 @@ bison_version=`$BISON_PATH --version | head -n 1 | sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1` AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version]) - if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then + if perl -we "exit (('v$bison_version' ge 'v$bison_min_version') ? 0 : 1)"; then AC_MSG_RESULT([yes]) else AC_MSG_ERROR([no]) diff -Nru gst-plugins-base1.0-1.4.3/common/m4/gst-x11.m4 gst-plugins-base1.0-1.6.1/common/m4/gst-x11.m4 --- gst-plugins-base1.0-1.4.3/common/m4/gst-x11.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/gst-x11.m4 2015-10-22 08:01:49.000000000 +0000 @@ -9,7 +9,11 @@ CPPFLAGS="$CPPFLAGS $X_CFLAGS" dnl now try to find the HEADER - AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no") + HAVE_X="no" + AC_CHECK_HEADER([X11/Xlib.h], [ + dnl and then the library with the most uniquitous function + AC_CHECK_LIB(X11, [XSync], [HAVE_X="yes"], [], [$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS]) + ], [], [AC_INCLUDES_DEFAULT]) if test "x$HAVE_X" = "xno" then diff -Nru gst-plugins-base1.0-1.4.3/common/m4/introspection.m4 gst-plugins-base1.0-1.6.1/common/m4/introspection.m4 --- gst-plugins-base1.0-1.4.3/common/m4/introspection.m4 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/introspection.m4 2015-10-22 08:01:49.000000000 +0000 @@ -62,6 +62,7 @@ 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_INIT="extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);" fi AC_SUBST(INTROSPECTION_SCANNER) AC_SUBST(INTROSPECTION_COMPILER) @@ -71,6 +72,7 @@ AC_SUBST(INTROSPECTION_CFLAGS) AC_SUBST(INTROSPECTION_LIBS) AC_SUBST(INTROSPECTION_MAKEFILE) + AC_SUBST(INTROSPECTION_INIT) AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") ]) diff -Nru gst-plugins-base1.0-1.4.3/common/m4/Makefile.am gst-plugins-base1.0-1.6.1/common/m4/Makefile.am --- gst-plugins-base1.0-1.4.3/common/m4/Makefile.am 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/Makefile.am 2015-10-22 08:01:49.000000000 +0000 @@ -11,6 +11,7 @@ as-python.m4 \ as-version.m4 \ ax_create_stdint_h.m4 \ + ax_pthread.m4 \ glib-gettext.m4 \ gst-arch.m4 \ gst-args.m4 \ diff -Nru gst-plugins-base1.0-1.4.3/common/m4/Makefile.in gst-plugins-base1.0-1.6.1/common/m4/Makefile.in --- gst-plugins-base1.0-1.4.3/common/m4/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/m4/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = common/m4 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -141,6 +150,7 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -201,6 +211,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -230,6 +242,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -257,7 +271,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -272,6 +285,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -361,13 +375,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -420,6 +433,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -445,6 +459,7 @@ as-python.m4 \ as-version.m4 \ ax_create_stdint_h.m4 \ + ax_pthread.m4 \ glib-gettext.m4 \ gst-arch.m4 \ gst-args.m4 \ @@ -488,7 +503,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu common/m4/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -663,6 +677,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/common/Makefile.am gst-plugins-base1.0-1.6.1/common/Makefile.am --- gst-plugins-base1.0-1.4.3/common/Makefile.am 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/Makefile.am 2015-10-22 08:01:49.000000000 +0000 @@ -8,7 +8,7 @@ parallel-subdirs.mak \ gst-autogen.sh \ check-exports \ - c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + c-to-xml.py mangle-db.py scangobj-merge.py \ gtk-doc-plugins.mak \ plugins.xsl gstdoc-scangobj \ gst.supp check.mak \ diff -Nru gst-plugins-base1.0-1.4.3/common/Makefile.in gst-plugins-base1.0-1.6.1/common/Makefile.in --- gst-plugins-base1.0-1.4.3/common/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = common -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog \ - README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -101,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -118,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -177,6 +185,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in ChangeLog README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -262,6 +271,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -291,6 +302,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -318,7 +331,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -333,6 +345,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -422,13 +435,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -481,6 +493,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -502,7 +515,7 @@ parallel-subdirs.mak \ gst-autogen.sh \ check-exports \ - c-to-xml.py mangle-tmpl.py scangobj-merge.py \ + c-to-xml.py mangle-db.py scangobj-merge.py \ gtk-doc-plugins.mak \ plugins.xsl gstdoc-scangobj \ gst.supp check.mak \ @@ -530,7 +543,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu common/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -825,6 +837,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/common/mangle-db.py gst-plugins-base1.0-1.6.1/common/mangle-db.py --- gst-plugins-base1.0-1.4.3/common/mangle-db.py 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/mangle-db.py 2015-10-22 08:01:49.000000000 +0000 @@ -0,0 +1,71 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +""" +Insert includes for the element-*-details.xml files into the related docbook +files. +""" + +from __future__ import print_function, unicode_literals + +import codecs +import glob +import os +import sys + +import xml.dom.minidom + +def patch(related, details): + try: + doc = xml.dom.minidom.parse(related) + except IOError: + return + + # find the insertion point + elem = None + for e in doc.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'refentry': + elem = e + break + if elem == None: + return + + elem2 = None + for e in elem.childNodes: + if e.nodeType == e.ELEMENT_NODE and e.localName == 'refsect1': + id = e.getAttributeNode('id') + role = e.getAttributeNode('role') + if id and id.nodeValue.endswith('.description') and role and role.nodeValue == 'desc': + elem2 = e + break + if elem2 == None: + return + + # insert include + include = doc.createElement('include') + include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude') + include.setAttribute('href', details) + fallback = doc.createElement('fallback') + fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude') + include.appendChild(fallback) + elem2.appendChild(include) + + # store patched file + result = codecs.open(related, mode="w", encoding="utf-8") + #result = open(related, "wb") + doc.writexml(result) + result.close() + +def main(): + if not len(sys.argv) == 2: + sys.stderr.write('Please specify the xml/ dir') + sys.exit(1) + + xmldir = sys.argv[1] + + # parse all *-details.xml files and patch includes into the corresponding + # xml files + for details in glob.glob("%s/element-*-details.xml" % xmldir): + patch (details.replace("-details", ""), os.path.basename(details)) + +main() diff -Nru gst-plugins-base1.0-1.4.3/common/mangle-tmpl.py gst-plugins-base1.0-1.6.1/common/mangle-tmpl.py --- gst-plugins-base1.0-1.4.3/common/mangle-tmpl.py 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/mangle-tmpl.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -# -*- Mode: Python -*- -# vi:si:et:sw=4:sts=4:ts=4 - -""" -use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and -insert/overwrite Short Description and Long Description -""" - -# FIXME: right now it uses pygst and scans on its own; -# we really should use inspect/*.xml instead since the result of -# gst-xmlinspect.py is committed by the docs maintainer, who can be -# expected to have pygst, but this step should be done for every docs build, -# so no pygst allowed - -# read in inspect/*.xml -# for every tmpl/element-(name).xml: mangle with details from element - -from __future__ import print_function, unicode_literals - -import glob -import re -import sys -import os - -class Tmpl: - def __init__(self, filename): - self.filename = filename - self._sectionids = [] - self._sections = {} - - def read(self): - """ - Read and parse the sections from the given file. - """ - lines = open(self.filename).readlines() - matcher = re.compile("\n") - id = None - - for line in lines: - match = matcher.search(line) - if match: - id = match.expand("\\1") - self._sectionids.append(id) - self._sections[id] = [] - else: - if not id: - sys.stderr.write( - "WARNING: line before a SECTION header: %s" % line) - else: - self._sections[id].append(line) - - def get_section(self, id): - """ - Get the content from the given section. - """ - return self._sections[id] - - def set_section(self, id, content): - """ - Replace the given section id with the given content. - """ - self._sections[id] = content - - def output(self): - """ - Return the output of the current template in the tmpl/*.sgml format. - """ - lines = [] - for id in self._sectionids: - lines.append("\n" % id) - for line in self._sections[id]: - lines.append(line) - - return "".join(lines) - - def write(self, backup=False): - """ - Write out the template file again, backing up the previous one. - """ - if backup: - target = self.filename + ".mangle.bak" - os.rename(self.filename, target) - - handle = open(self.filename, "w") - handle.write(self.output()) - handle.close() - -import xml.dom.minidom - -def get_elements(file): - elements = {} - doc = xml.dom.minidom.parse(file) - - elem = None - for e in doc.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin': - elem = e - break - if elem == None: - return None - - elem2 = None - for e in elem.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements': - elem2 = e - break - if elem2 == None: - return None - - elem = elem2 - - for e in elem.childNodes: - if e.nodeType == e.ELEMENT_NODE and e.localName == 'element': - name = None - description = None - - for e2 in e.childNodes: - if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name': - name = e2.childNodes[0].nodeValue.encode("UTF-8") - elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description': - if e2.childNodes: - description = e2.childNodes[0].nodeValue.encode("UTF-8") - else: - description = 'No description' - - if name != None and description != None: - elements[name] = {'description': description} - - return elements - -def main(): - if not len(sys.argv) == 3: - sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir') - sys.exit(1) - - inspectdir = sys.argv[1] - tmpldir = sys.argv[2] - - # parse all .xml files; build map of element name -> short desc - #for file in glob.glob("inspect/plugin-*.xml"): - elements = {} - for file in glob.glob("%s/plugin-*.xml" % inspectdir): - elements.update(get_elements(file)) - - for file in glob.glob("%s/element-*.sgml" % tmpldir): - base = os.path.basename(file) - element = base[len("element-"):-len(".sgml")] - tmpl = Tmpl(file) - tmpl.read() - if element in elements.keys(): - description = elements[element]['description'] - tmpl.set_section("Short_Description", "%s\n\n" % description) - - # put in an include if not yet there - line = '' + \ - '' + \ - '\n' - section = tmpl.get_section("Long_Description") - if not section[0] == line: - section.insert(0, line) - tmpl.set_section("Long_Description", section) - tmpl.write() - -main() diff -Nru gst-plugins-base1.0-1.4.3/common/scangobj-merge.py gst-plugins-base1.0-1.6.1/common/scangobj-merge.py --- gst-plugins-base1.0-1.4.3/common/scangobj-merge.py 2014-07-21 08:43:11.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/common/scangobj-merge.py 2015-10-22 08:01:49.000000000 +0000 @@ -8,8 +8,9 @@ from __future__ import print_function, unicode_literals -import sys +import codecs import os +import sys def debug(*args): pass @@ -105,10 +106,12 @@ class GDoc: def load_file(self, filename): try: - lines = open(filename).readlines() + lines = codecs.open(filename, encoding='utf-8').readlines() self.load_data("".join(lines)) except IOError: print ("WARNING - could not read from %s" % filename) + except UnicodeDecodeError as e: + print ("WARNING - could not parse %s: %s" % (filename, e)) def save_file(self, filename, backup=False): """ @@ -116,7 +119,7 @@ """ olddata = None try: - lines = open(filename).readlines() + lines = codecs.open(filename, encoding='utf-8').readlines() olddata = "".join(lines) except IOError: print ("WARNING - could not read from %s" % filename) @@ -128,7 +131,7 @@ if backup: os.rename(filename, filename + '.bak') - handle = open(filename, "w") + handle = codecs.open(filename, "w", encoding='utf-8') handle.write(newdata) handle.close() diff -Nru gst-plugins-base1.0-1.4.3/compile gst-plugins-base1.0-1.6.1/compile --- gst-plugins-base1.0-1.4.3/compile 2014-08-27 10:22:33.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/compile 2015-10-30 12:09:09.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify diff -Nru gst-plugins-base1.0-1.4.3/config.guess gst-plugins-base1.0-1.6.1/config.guess --- gst-plugins-base1.0-1.4.3/config.guess 2014-08-27 10:22:33.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/config.guess 2015-10-30 12:09:09.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-03-23' +timestamp='2015-08-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,20 +168,27 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -235,6 +249,9 @@ *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -579,8 +596,9 @@ else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -932,6 +950,9 @@ crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -1020,7 +1041,7 @@ echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} diff -Nru gst-plugins-base1.0-1.4.3/config.h.in gst-plugins-base1.0-1.6.1/config.h.in --- gst-plugins-base1.0-1.4.3/config.h.in 2014-09-24 08:16:09.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/config.h.in 2015-10-30 14:20:36.000000000 +0000 @@ -47,6 +47,9 @@ /* The GIO modules directory. */ #undef GIO_MODULE_DIR +/* The GIO install prefix. */ +#undef GIO_PREFIX + /* major/minor version */ #undef GST_API_VERSION @@ -103,9 +106,15 @@ the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE +/* Define if the target CPU is AARCH64 */ +#undef HAVE_CPU_AARCH64 + /* Define if the target CPU is an Alpha */ #undef HAVE_CPU_ALPHA +/* Define if the target CPU is an ARC */ +#undef HAVE_CPU_ARC + /* Define if the target CPU is an ARM */ #undef HAVE_CPU_ARM @@ -173,6 +182,9 @@ /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT +/* Define to enable glib GIO unix (used by gio-unix-2.0). */ +#undef HAVE_GIO_UNIX_2_0 + /* Define to 1 if you have the `gmtime_r' function. */ #undef HAVE_GMTIME_R @@ -375,9 +387,6 @@ # endif #endif -/* Define to 1 if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 diff -Nru gst-plugins-base1.0-1.4.3/config.sub gst-plugins-base1.0-1.6.1/config.sub --- gst-plugins-base1.0-1.4.3/config.sub 2014-08-27 10:22:33.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/config.sub 2015-10-30 12:09:09.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2015 Free Software Foundation, Inc. -timestamp='2014-05-01' +timestamp='2015-08-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -68,7 +68,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,7 +117,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -255,12 +255,13 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ @@ -302,9 +303,10 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -312,6 +314,7 @@ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -326,6 +329,9 @@ c6x) basic_machine=tic6x-unknown ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none @@ -371,12 +377,13 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ @@ -423,12 +430,13 @@ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -436,6 +444,7 @@ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -512,6 +521,9 @@ basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -773,6 +785,9 @@ basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -828,6 +843,10 @@ basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1360,7 +1379,7 @@ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1373,7 +1392,7 @@ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ diff -Nru gst-plugins-base1.0-1.4.3/configure gst-plugins-base1.0-1.6.1/configure --- gst-plugins-base1.0-1.4.3/configure 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/configure 2015-10-30 14:20:31.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.4.3. +# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.6.1. # # Report bugs to . # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='GStreamer Base Plug-ins' PACKAGE_TARNAME='gst-plugins-base' -PACKAGE_VERSION='1.4.3' -PACKAGE_STRING='GStreamer Base Plug-ins 1.4.3' +PACKAGE_VERSION='1.6.1' +PACKAGE_STRING='GStreamer Base Plug-ins 1.6.1' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -652,6 +652,10 @@ FT2_CONFIG FT2_LIBS FT2_CFLAGS +USE_GIO_UNIX_2_0_FALSE +USE_GIO_UNIX_2_0_TRUE +GIO_UNIX_2_0_LIBS +GIO_UNIX_2_0_CFLAGS USE_VORBIS_FALSE USE_VORBIS_TRUE VORBIS_LIBS @@ -687,19 +691,17 @@ ALSA_CFLAGS USE_XSHM_FALSE USE_XSHM_TRUE -XSHM_LIBS HAVE_XSHM +XSHM_LIBS +XSHM_CFLAGS USE_XVIDEO_FALSE USE_XVIDEO_TRUE XVIDEO_LIBS +XVIDEO_CFLAGS USE_X_FALSE USE_X_TRUE -HAVE_X -X_EXTRA_LIBS X_LIBS -X_PRE_LIBS X_CFLAGS -XMKMF USE_ZLIB_FALSE USE_ZLIB_TRUE HAVE_ZLIB @@ -792,6 +794,8 @@ GST_CONTROLLER_CFLAGS GST_BASE_LIBS GST_BASE_CFLAGS +GST_NET_LIBS +GST_NET_CFLAGS GST_PLUGINS_DIR GST_TOOLS_DIR GST_LIBS @@ -846,6 +850,7 @@ GTKDOC_CHECK HAVE_INTROSPECTION_FALSE HAVE_INTROSPECTION_TRUE +INTROSPECTION_INIT INTROSPECTION_MAKEFILE INTROSPECTION_LIBS INTROSPECTION_CFLAGS @@ -885,6 +890,8 @@ HAVE_CPU_SPARC_TRUE HAVE_CPU_ARM_FALSE HAVE_CPU_ARM_TRUE +HAVE_CPU_ARC_FALSE +HAVE_CPU_ARC_TRUE HAVE_CPU_ALPHA_FALSE HAVE_CPU_ALPHA_TRUE HAVE_CPU_PPC64_FALSE @@ -1053,6 +1060,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -1143,7 +1151,6 @@ enable_iso_codes enable_zlib enable_x -with_x enable_xvideo enable_xshm enable_alsa @@ -1156,6 +1163,7 @@ enable_pango enable_theora enable_vorbis +enable_gio_unix_2_0 with_ft_prefix with_ft_exec_prefix enable_freetypetest @@ -1187,6 +1195,8 @@ ORC_LIBS GST_CFLAGS GST_LIBS +GST_NET_CFLAGS +GST_NET_LIBS GST_BASE_CFLAGS GST_BASE_LIBS GST_CONTROLLER_CFLAGS @@ -1203,7 +1213,12 @@ QT_LIBS ZLIB_CFLAGS ZLIB_LIBS -XMKMF +X_CFLAGS +X_LIBS +XVIDEO_CFLAGS +XVIDEO_LIBS +XSHM_CFLAGS +XSHM_LIBS ALSA_CFLAGS ALSA_LIBS CDPARANOIA_CFLAGS @@ -1220,6 +1235,8 @@ THEORA_LIBS VORBIS_CFLAGS VORBIS_LIBS +GIO_UNIX_2_0_CFLAGS +GIO_UNIX_2_0_LIBS FT2_CFLAGS FT2_LIBS' @@ -1260,6 +1277,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1512,6 +1530,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1649,7 +1676,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1762,7 +1789,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GStreamer Base Plug-ins 1.4.3 to adapt to many kinds of systems. +\`configure' configures GStreamer Base Plug-ins 1.6.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1802,6 +1829,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1825,10 +1853,6 @@ --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR - System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] @@ -1838,7 +1862,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.4.3:";; + short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.6.1:";; esac cat <<\_ACEOF @@ -1906,7 +1930,7 @@ --disable-zlib disable zlib support for ID3 parsing in libgsttag --disable-x disable X libraries and plugins: ximagesink --disable-xvideo disable X11 XVideo extensions: xvimagesink - --disable-xshm disable X Shared Memory extension + --disable-xshm disable X Shared Memory extension: --disable-alsa disable ALSA: alsa --disable-cdparanoia disable CDParanoia: cdparanoia --disable-ivorbis disable integer vorbis plug-in: ivorbisdec @@ -1915,6 +1939,7 @@ --disable-pango disable Pango font rendering: pango --disable-theora disable Xiph Theora video codec: theora --disable-vorbis disable Xiph Vorbis audio codec: vorbis + --disable-gio_unix_2_0 disable glib GIO unix: gio-unix-2.0 --disable-freetypetest Do not try to compile and run a test FreeType program @@ -1959,7 +1984,6 @@ --with-audioresample-format Which implementation should be used for integer audio resampling, int/float/auto, (default is auto) - --with-x use the X Window System --with-alsa-prefix=PFX prefix where Alsa library is installed(optional) --with-alsa-inc-prefix=PFX prefix where include libraries are (optional) @@ -1998,6 +2022,10 @@ ORC_LIBS linker flags for ORC, overriding pkg-config GST_CFLAGS C compiler flags for GST, overriding pkg-config GST_LIBS linker flags for GST, overriding pkg-config + GST_NET_CFLAGS + C compiler flags for GST_NET, overriding pkg-config + GST_NET_LIBS + linker flags for GST_NET, overriding pkg-config GST_BASE_CFLAGS C compiler flags for GST_BASE, overriding pkg-config GST_BASE_LIBS @@ -2024,7 +2052,13 @@ QT_LIBS linker flags for QT, overriding pkg-config ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config ZLIB_LIBS linker flags for ZLIB, overriding pkg-config - XMKMF Path to xmkmf, Makefile generator for X Window System + X_CFLAGS C compiler flags for X, overriding pkg-config + X_LIBS linker flags for X, overriding pkg-config + XVIDEO_CFLAGS + C compiler flags for XVIDEO, overriding pkg-config + XVIDEO_LIBS linker flags for XVIDEO, overriding pkg-config + XSHM_CFLAGS C compiler flags for XSHM, overriding pkg-config + XSHM_LIBS linker flags for XSHM, overriding pkg-config ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config ALSA_LIBS linker flags for ALSA, overriding pkg-config CDPARANOIA_CFLAGS @@ -2050,6 +2084,10 @@ VORBIS_CFLAGS C compiler flags for VORBIS, overriding pkg-config VORBIS_LIBS linker flags for VORBIS, overriding pkg-config + GIO_UNIX_2_0_CFLAGS + C compiler flags for GIO_UNIX_2_0, overriding pkg-config + GIO_UNIX_2_0_LIBS + linker flags for GIO_UNIX_2_0, overriding pkg-config FT2_CFLAGS C compiler flags for FT2, overriding pkg-config FT2_LIBS linker flags for FT2, overriding pkg-config @@ -2119,7 +2157,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Base Plug-ins configure 1.4.3 +GStreamer Base Plug-ins configure 1.6.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2892,7 +2930,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GStreamer Base Plug-ins $as_me 1.4.3, which was +It was created by GStreamer Base Plug-ins $as_me 1.6.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3385,7 +3423,7 @@ -am__api_version='1.14' +am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -3557,8 +3595,8 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in @@ -3577,7 +3615,7 @@ $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi -if test x"${install_sh}" != xset; then +if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; @@ -3871,7 +3909,7 @@ # Define the identity of the package. PACKAGE='gst-plugins-base' - VERSION='1.4.3' + VERSION='1.6.1' cat >>confdefs.h <<_ACEOF @@ -3905,8 +3943,8 @@ # mkdir_p='$(MKDIR_P)' -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' @@ -4082,9 +4120,9 @@ - PACKAGE_VERSION_MAJOR=$(echo 1.4.3 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.4.3 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.4.3 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.6.1 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.6.1 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.6.1 | cut -d'.' -f3) @@ -4095,7 +4133,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.4.3 | cut -d'.' -f4) + NANO=$(echo 1.6.1 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -8744,10 +8782,10 @@ done - GST_CURRENT=403 + GST_CURRENT=601 GST_REVISION=0 - GST_AGE=403 - GST_LIBVERSION=403:0:403 + GST_AGE=601 + GST_LIBVERSION=601:0:601 @@ -13072,7 +13110,7 @@ -GST_REQ=1.4.0 +GST_REQ=1.6.1 @@ -16039,11 +16077,21 @@ $as_echo "#define HAVE_CPU_ALPHA 1" >>confdefs.h ;; + xarc*) + HAVE_CPU_ARC=yes + +$as_echo "#define HAVE_CPU_ARC 1" >>confdefs.h + ;; xarm*) HAVE_CPU_ARM=yes $as_echo "#define HAVE_CPU_ARM 1" >>confdefs.h ;; + xaarch64*) + HAVE_CPU_AARCH64=yes + +$as_echo "#define HAVE_CPU_AARCH64 1" >>confdefs.h + ;; xsparc*) HAVE_CPU_SPARC=yes @@ -16348,6 +16396,14 @@ HAVE_CPU_ALPHA_FALSE= fi + if test "x$HAVE_CPU_ARC" = "xyes"; then + HAVE_CPU_ARC_TRUE= + HAVE_CPU_ARC_FALSE='#' +else + HAVE_CPU_ARC_TRUE='#' + HAVE_CPU_ARC_FALSE= +fi + if test "x$HAVE_CPU_ARM" = "xyes"; then HAVE_CPU_ARM_TRUE= HAVE_CPU_ARM_FALSE='#' @@ -21412,6 +21468,7 @@ 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_INIT="extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);" fi @@ -21422,6 +21479,7 @@ + if test "x$found_introspection" = "xyes"; then HAVE_INTROSPECTION_TRUE= HAVE_INTROSPECTION_FALSE='#' @@ -23531,13 +23589,20 @@ #define GIO_LIBDIR "$GIO_LIBDIR" _ACEOF + GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`" + +cat >>confdefs.h <<_ACEOF +#define GIO_PREFIX "$GIO_PREFIX" +_ACEOF + - ORC_REQ=0.4.18 + + ORC_REQ=0.4.23 # Check whether --enable-orc was given. if test "${enable_orc+set}" = set; then : @@ -23816,6 +23881,108 @@ + module=gstreamer-net-$GST_API_VERSION + minver=$GST_REQ + name="GStreamer Network Library" + required=yes + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_NET" >&5 +$as_echo_n "checking for GST_NET... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_CFLAGS"; then + pkg_cv_GST_NET_CFLAGS="$GST_NET_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_NET_LIBS"; then + pkg_cv_GST_NET_LIBS="$GST_NET_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_NET_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GST_NET_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"` + else + GST_NET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_NET_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + HAVE_GST_NET="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_NET_PKG_ERRORS" >&5 +$as_echo "$as_me: $GST_NET_PKG_ERRORS" >&6;} + if test "x$required" = "xyes"; then + as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5 +$as_echo "$as_me: no $module >= $minver ($name) found" >&6;} + fi + +elif test $pkg_failed = untried; then + + HAVE_GST_NET="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_NET_PKG_ERRORS" >&5 +$as_echo "$as_me: $GST_NET_PKG_ERRORS" >&6;} + if test "x$required" = "xyes"; then + as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5 +$as_echo "$as_me: no $module >= $minver ($name) found" >&6;} + fi + +else + GST_NET_CFLAGS=$pkg_cv_GST_NET_CFLAGS + GST_NET_LIBS=$pkg_cv_GST_NET_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_GST_NET="yes" + +fi + + + + + module=gstreamer-base-$GST_API_VERSION minver=$GST_REQ name="GStreamer Base Libraries" @@ -24136,7 +24303,7 @@ HAVE_GTK=no HAVE_GTK_X11=no -GTK_REQ=3.0.0 +GTK_REQ=3.10 if test "x$BUILD_EXAMPLES" = "xyes"; then pkg_failed=no @@ -25356,52 +25523,6 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } - else - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5 - ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5 -$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; } - - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-strict-aliasing" - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - flag_ok=yes -else - flag_ok=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - - if test "X$flag_ok" = Xyes ; then - ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing" - true - else - - true - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 -$as_echo "$flag_ok" >&6; } - - -fi fi fi @@ -27290,199 +27411,6 @@ $as_echo "$as_me: Checking libraries for plugins in sys/" >&6;} echo -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -$as_echo_n "checking for X... " >&6; } - - -# Check whether --with-x was given. -if test "${with_x+set}" = set; then : - withval=$with_x; -fi - -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - case $x_includes,$x_libraries in #( - *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( - *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : - $as_echo_n "(cached) " >&6 -else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -f -r conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - cat >Imakefile <<'_ACEOF' -incroot: - @echo incroot='${INCROOT}' -usrlibdir: - @echo usrlibdir='${USRLIBDIR}' -libdir: - @echo libdir='${LIBDIR}' -_ACEOF - if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - for ac_var in incroot usrlibdir libdir; do - eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" - done - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib la dll; do - if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && - test -f "$ac_im_libdir/libX11.$ac_extension"; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ac_x_includes= ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -f -r conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R7/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R7 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R7/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R7 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Xlib.h. - # First, try using that file with no special directory specified. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # We can compile using X headers with no special include directory. -ac_x_includes= -else - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then - ac_x_includes=$ac_dir - break - fi -done -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi # $ac_x_includes = no - -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - LIBS=$ac_save_LIBS -for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib la dll; do - if test -r "$ac_dir/libX11.$ac_extension"; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no - -case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) - # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no";; #( - *) - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" -esac -fi -;; #( - *) have_x=yes;; - esac - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -$as_echo "$have_x" >&6; } - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$x_includes'\ - ac_x_libraries='$x_libraries'" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -$as_echo "libraries $x_libraries, headers $x_includes" >&6; } -fi - echo { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X libraries and plugins ***" >&5 $as_echo "$as_me: *** checking feature: X libraries and plugins ***" >&6;} @@ -27531,526 +27459,101 @@ HAVE_X=no - if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - -$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + which="x11" + required="no" - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -$as_echo_n "checking whether -R must be followed by a space... " >&6; } - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - ac_xsave_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" +if test -n "$PKG_CONFIG"; then + if test -n "$X_CFLAGS"; then + pkg_cv_X_CFLAGS="$X_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null` else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" + pkg_failed=yes +fi + fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -$as_echo "neither works" >&6; } + pkg_failed=untried fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +if test -n "$PKG_CONFIG"; then + if test -n "$X_LIBS"; then + pkg_cv_X_LIBS="$X_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null` +else + pkg_failed=yes fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_c_werror_flag=$ac_xsave_c_werror_flag - LIBS=$ac_xsave_LIBS - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XOpenDisplay (); -int -main () -{ -return XOpenDisplay (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dnet_dnet_ntoa=yes -else - ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dnet_stub_dnet_ntoa=yes -else - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes; then : - -fi - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if ${ac_cv_lib_nsl_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyname=yes -else - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if ${ac_cv_lib_bsd_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the name server (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = xyes; then : - -fi - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if ${ac_cv_lib_socket_connect+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_connect=yes -else - ac_cv_lib_socket_connect=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = xyes; then : - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" + pkg_failed=untried fi - fi - # Guillermo Gomez says -lposix is necessary on A/UX. - ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = xyes; then : -fi - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if ${ac_cv_lib_posix_remove+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +if test $pkg_failed = yes; then -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char remove (); -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_posix_remove=yes +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - ac_cv_lib_posix_remove=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = xyes; then : - + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + X_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"` + else + X_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"` + fi + # Put the nasty error message in config.log where it belongs + echo "$X_PKG_ERRORS" >&5 - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if ${ac_cv_lib_ipc_shmat+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ipc_shmat=yes -else - ac_cv_lib_ipc_shmat=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = xyes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" -fi + HAVE_X="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$X_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $X_PKG_ERRORS" >&5 +$as_echo "$as_me: $X_PKG_ERRORS" >&6;} + fi - fi - fi +elif test $pkg_failed = untried; then - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + HAVE_X="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$X_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $X_PKG_ERRORS" >&5 +$as_echo "$as_me: $X_PKG_ERRORS" >&6;} + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char IceConnectionNumber (); -int -main () -{ -return IceConnectionNumber (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ICE_IceConnectionNumber=yes else - ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" -fi - - LDFLAGS=$ac_save_LDFLAGS - -fi + X_CFLAGS=$pkg_cv_X_CFLAGS + X_LIBS=$pkg_cv_X_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } - ac_cflags_save="$CFLAGS" - ac_cppflags_save="$CPPFLAGS" - CFLAGS="$CFLAGS $X_CFLAGS" - CPPFLAGS="$CPPFLAGS $X_CFLAGS" + HAVE_X="yes" - ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default" -if test "x$ac_cv_header_X11_Xlib_h" = xyes; then : - HAVE_X="yes" -else - HAVE_X="no" fi - if test "x$HAVE_X" = "xno" - then - { $as_echo "$as_me:${as_lineno-$LINENO}: cannot find X11 development files" >&5 -$as_echo "$as_me: cannot find X11 development files" >&6;} - else - X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS" - X_LIBS="$X_LIBS -lX11" - - - fi - - - CFLAGS="$ac_cflags_save" - CPPFLAGS="$ac_cppflags_save" - - LIBS=$gst_check_save_LIBS LDFLAGS=$gst_check_save_LDFLAGS @@ -28139,105 +27642,99 @@ HAVE_XVIDEO=no - if test x$HAVE_X = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv_pic" >&5 -$as_echo_n "checking for XvQueryExtension in -lXv_pic... " >&6; } -if ${ac_cv_lib_Xv_pic_XvQueryExtension+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXv_pic $X_LIBS -lXext $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + which="x11 xv" + required="no" -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XvQueryExtension (); -int -main () -{ -return XvQueryExtension (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_Xv_pic_XvQueryExtension=yes + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XVIDEO" >&5 +$as_echo_n "checking for XVIDEO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$XVIDEO_CFLAGS"; then + pkg_cv_XVIDEO_CFLAGS="$XVIDEO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XVIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null` +else + pkg_failed=yes +fi + fi else - ac_cv_lib_Xv_pic_XvQueryExtension=no + pkg_failed=untried fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +if test -n "$PKG_CONFIG"; then + if test -n "$XVIDEO_LIBS"; then + pkg_cv_XVIDEO_LIBS="$XVIDEO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XVIDEO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null` +else + pkg_failed=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xv_pic_XvQueryExtension" >&5 -$as_echo "$ac_cv_lib_Xv_pic_XvQueryExtension" >&6; } -if test "x$ac_cv_lib_Xv_pic_XvQueryExtension" = xyes; then : - HAVE_XVIDEO="yes" + fi else - HAVE_XVIDEO="no" + pkg_failed=untried fi - if test x$HAVE_XVIDEO = xyes; then - XVIDEO_LIBS="-lXv_pic -lXext" - else - if test x$HAVE_XVIDEO = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv" >&5 -$as_echo_n "checking for XvQueryExtension in -lXv... " >&6; } -if ${ac_cv_lib_Xv_XvQueryExtension+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXv $X_LIBS -lXext $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +if test $pkg_failed = yes; then -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XvQueryExtension (); -int -main () -{ -return XvQueryExtension (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_Xv_XvQueryExtension=yes -else - ac_cv_lib_Xv_XvQueryExtension=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xv_XvQueryExtension" >&5 -$as_echo "$ac_cv_lib_Xv_XvQueryExtension" >&6; } -if test "x$ac_cv_lib_Xv_XvQueryExtension" = xyes; then : - HAVE_XVIDEO="yes" +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - HAVE_XVIDEO="no" + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + XVIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"` + else + XVIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"` + fi + # Put the nasty error message in config.log where it belongs + echo "$XVIDEO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_XVIDEO="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$XVIDEO_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $XVIDEO_PKG_ERRORS" >&5 +$as_echo "$as_me: $XVIDEO_PKG_ERRORS" >&6;} + fi - if test x$HAVE_XVIDEO = xyes; then - XVIDEO_LIBS="-lXv -lXext" +elif test $pkg_failed = untried; then - fi + HAVE_XVIDEO="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$XVIDEO_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $XVIDEO_PKG_ERRORS" >&5 +$as_echo "$as_me: $XVIDEO_PKG_ERRORS" >&6;} fi - fi - fi + +else + XVIDEO_CFLAGS=$pkg_cv_XVIDEO_CFLAGS + XVIDEO_LIBS=$pkg_cv_XVIDEO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_XVIDEO="yes" + +fi + @@ -28283,10 +27780,10 @@ echo { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X Shared Memory extension ***" >&5 $as_echo "$as_me: *** checking feature: X Shared Memory extension ***" >&6;} -if test "x" != "x" +if test "x " != "x" then - { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: ***" >&5 -$as_echo "$as_me: *** for plug-ins: ***" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: ***" >&5 +$as_echo "$as_me: *** for plug-ins: ***" >&6;} fi NOUSE= if test "x$USE_XSHM" = "xno"; then @@ -28305,15 +27802,15 @@ if test "x$NOUSE" = "xyes"; then USE_XSHM="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** pre-configured not to be built" >&5 -$as_echo "$as_me: WARNING: *** pre-configured not to be built" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** pre-configured not to be built" >&2;} fi NOUSE= if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " XSHM " > /dev/null; then USE_XSHM="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** not ported" >&5 -$as_echo "$as_me: WARNING: *** not ported" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** not ported" >&5 +$as_echo "$as_me: WARNING: *** not ported" >&2;} fi @@ -28328,13 +27825,87 @@ HAVE_XSHM=no if test x$HAVE_X = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXext" >&5 + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM" >&5 +$as_echo_n "checking for XSHM... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$XSHM_CFLAGS"; then + pkg_cv_XSHM_CFLAGS="$XSHM_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xext") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XSHM_CFLAGS=`$PKG_CONFIG --cflags "xext" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$XSHM_LIBS"; then + pkg_cv_XSHM_LIBS="$XSHM_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xext") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XSHM_LIBS=`$PKG_CONFIG --libs "xext" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + XSHM_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xext"` + else + XSHM_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xext"` + fi + # Put the nasty error message in config.log where it belongs + echo "$XSHM_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + HAVE_XSHM="no" + +elif test $pkg_failed = untried; then + + HAVE_XSHM="no" + +else + XSHM_CFLAGS=$pkg_cv_XSHM_CFLAGS + XSHM_LIBS=$pkg_cv_XSHM_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXext" >&5 $as_echo_n "checking for XShmAttach in -lXext... " >&6; } if ${ac_cv_lib_Xext_XShmAttach+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXext $X_LIBS $LIBS" +LIBS="-lXext $X_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -28365,60 +27936,18 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XShmAttach" >&5 $as_echo "$ac_cv_lib_Xext_XShmAttach" >&6; } if test "x$ac_cv_lib_Xext_XShmAttach" = xyes; then : - HAVE_XSHM="yes" -else - HAVE_XSHM="no" -fi - if test "x$HAVE_XSHM" = "xyes"; then - XSHM_LIBS="-lXext" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXextSam" >&5 -$as_echo_n "checking for XShmAttach in -lXextSam... " >&6; } -if ${ac_cv_lib_XextSam_XShmAttach+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXextSam $X_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + HAVE_XSHM="yes" -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XShmAttach (); -int -main () -{ -return XShmAttach (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_XextSam_XShmAttach=yes -else - ac_cv_lib_XextSam_XShmAttach=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmAttach" >&5 -$as_echo "$ac_cv_lib_XextSam_XShmAttach" >&6; } -if test "x$ac_cv_lib_XextSam_XShmAttach" = xyes; then : - HAVE_XSHM="yes" else - HAVE_XSHM="no" + + HAVE_XSHM="no" + XSHM_LIBS="" + fi - if test "x$HAVE_XSHM" = "xyes"; then - XSHM_LIBS="-lXext -lXextSam" - fi - fi + +fi fi @@ -28431,7 +27960,8 @@ if test x$HAVE_XSHM = xno; then USE_XSHM=no else - : + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: " >&5 +$as_echo "$as_me: *** These plugins will be built: " >&6;} fi fi if test x$USE_XSHM = xyes; then @@ -28439,16 +27969,17 @@ - if test "x" != "x"; then - GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES" + if test "x " != "x"; then + GST_PLUGINS_YES="\t \n$GST_PLUGINS_YES" fi $as_echo "#define HAVE_XSHM /**/" >>confdefs.h else - : - if test "x" != "x"; then - GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO" + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: " >&5 +$as_echo "$as_me: *** These plugins will not be built: " >&6;} + if test "x " != "x"; then + GST_PLUGINS_NO="\t \n$GST_PLUGINS_NO" fi : fi @@ -30790,6 +30321,189 @@ +echo +{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: glib GIO unix ***" >&5 +$as_echo "$as_me: *** checking feature: glib GIO unix ***" >&6;} +if test "xgio-unix-2.0" != "x" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: gio-unix-2.0 ***" >&5 +$as_echo "$as_me: *** for plug-ins: gio-unix-2.0 ***" >&6;} +fi +NOUSE= +if test "x$USE_GIO_UNIX_2_0" = "xno"; then + NOUSE="yes" +fi +# Check whether --enable-gio_unix_2_0 was given. +if test "${enable_gio_unix_2_0+set}" = set; then : + enableval=$enable_gio_unix_2_0; case "${enableval}" in + yes) USE_GIO_UNIX_2_0=yes;; + no) USE_GIO_UNIX_2_0=no;; + *) as_fn_error $? "bad value ${enableval} for --enable-gio_unix_2_0" "$LINENO" 5 ;; + esac +else + USE_GIO_UNIX_2_0=yes +fi + +if test "x$NOUSE" = "xyes"; then + USE_GIO_UNIX_2_0="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio-unix-2.0 pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** gio-unix-2.0 pre-configured not to be built" >&2;} +fi +NOUSE= + +if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " GIO_UNIX_2_0 " > /dev/null; then + USE_GIO_UNIX_2_0="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio-unix-2.0 not ported" >&5 +$as_echo "$as_me: WARNING: *** gio-unix-2.0 not ported" >&2;} +fi + + +if test x$USE_GIO_UNIX_2_0 = xyes; then + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_GIO_UNIX_2_0=no + + + which="gio-unix-2.0 >= 2.24" + required="no" + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO_UNIX_2_0" >&5 +$as_echo_n "checking for GIO_UNIX_2_0... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GIO_UNIX_2_0_CFLAGS"; then + pkg_cv_GIO_UNIX_2_0_CFLAGS="$GIO_UNIX_2_0_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GIO_UNIX_2_0_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GIO_UNIX_2_0_LIBS"; then + pkg_cv_GIO_UNIX_2_0_LIBS="$GIO_UNIX_2_0_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GIO_UNIX_2_0_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GIO_UNIX_2_0_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"` + else + GIO_UNIX_2_0_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GIO_UNIX_2_0_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + HAVE_GIO_UNIX_2_0="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$GIO_UNIX_2_0_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $GIO_UNIX_2_0_PKG_ERRORS" >&5 +$as_echo "$as_me: $GIO_UNIX_2_0_PKG_ERRORS" >&6;} + fi + +elif test $pkg_failed = untried; then + + HAVE_GIO_UNIX_2_0="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$GIO_UNIX_2_0_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $GIO_UNIX_2_0_PKG_ERRORS" >&5 +$as_echo "$as_me: $GIO_UNIX_2_0_PKG_ERRORS" >&6;} + fi + +else + GIO_UNIX_2_0_CFLAGS=$pkg_cv_GIO_UNIX_2_0_CFLAGS + GIO_UNIX_2_0_LIBS=$pkg_cv_GIO_UNIX_2_0_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_GIO_UNIX_2_0="yes" + +fi + + + + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + if test x$HAVE_GIO_UNIX_2_0 = xno; then + USE_GIO_UNIX_2_0=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: gio-unix-2.0" >&5 +$as_echo "$as_me: *** These plugins will be built: gio-unix-2.0" >&6;} + fi +fi +if test x$USE_GIO_UNIX_2_0 = xyes; then + : + if test "xgio-unix-2.0" != "x"; then + GST_PLUGINS_YES="\tgio-unix-2.0\n$GST_PLUGINS_YES" + fi + +$as_echo "#define HAVE_GIO_UNIX_2_0 /**/" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: gio-unix-2.0" >&5 +$as_echo "$as_me: *** These plugins will not be built: gio-unix-2.0" >&6;} + if test "xgio-unix-2.0" != "x"; then + GST_PLUGINS_NO="\tgio-unix-2.0\n$GST_PLUGINS_NO" + fi + : +fi + if test x$USE_GIO_UNIX_2_0 = xyes; then + USE_GIO_UNIX_2_0_TRUE= + USE_GIO_UNIX_2_0_FALSE='#' +else + USE_GIO_UNIX_2_0_TRUE='#' + USE_GIO_UNIX_2_0_FALSE= +fi + + + if test "x$HAVE_VORBIS" = "xyes"; then ac_cflags_save="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -31646,6 +31360,10 @@ as_fn_error $? "conditional \"HAVE_CPU_ALPHA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_CPU_ARC_TRUE}" && test -z "${HAVE_CPU_ARC_FALSE}"; then + as_fn_error $? "conditional \"HAVE_CPU_ARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_CPU_ARM_TRUE}" && test -z "${HAVE_CPU_ARM_FALSE}"; then as_fn_error $? "conditional \"HAVE_CPU_ARM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -31898,6 +31616,10 @@ as_fn_error $? "conditional \"USE_VORBIS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_GIO_UNIX_2_0_TRUE}" && test -z "${USE_GIO_UNIX_2_0_FALSE}"; then + as_fn_error $? "conditional \"USE_GIO_UNIX_2_0\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_ALSA_TRUE}" && test -z "${USE_ALSA_FALSE}"; then as_fn_error $? "conditional \"USE_ALSA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -32331,7 +32053,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GStreamer Base Plug-ins $as_me 1.4.3, which was +This file was extended by GStreamer Base Plug-ins $as_me 1.6.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -32397,7 +32119,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GStreamer Base Plug-ins config.status 1.4.3 +GStreamer Base Plug-ins config.status 1.6.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru gst-plugins-base1.0-1.4.3/configure.ac gst-plugins-base1.0-1.6.1/configure.ac --- gst-plugins-base1.0-1.4.3/configure.ac 2014-09-24 08:02:19.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/configure.ac 2015-10-30 14:20:28.000000000 +0000 @@ -1,16 +1,16 @@ -AC_PREREQ([2.68]) +AC_PREREQ([2.69]) dnl please read gstreamer/docs/random/autotools before changing this file dnl initialize autoconf dnl releases only do -Wall, git and prerelease does -Werror too dnl use a three digit version number for releases, and four for git/prerelease -AC_INIT([GStreamer Base Plug-ins],[1.4.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base]) +AC_INIT([GStreamer Base Plug-ins],[1.6.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base]) AG_GST_INIT dnl initialize automake -AM_INIT_AUTOMAKE([-Wno-portability 1.11 no-dist-gzip dist-xz tar-ustar subdir-objects]) +AM_INIT_AUTOMAKE([-Wno-portability 1.14 no-dist-gzip dist-xz tar-ustar subdir-objects]) dnl define PACKAGE_VERSION_* variables AS_VERSION @@ -56,10 +56,10 @@ dnl 1.10.9 (who knows) => 1009 dnl dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 403, 0, 403) +AS_LIBTOOL(GST, 601, 0, 601) dnl *** required versions of GStreamer stuff *** -GST_REQ=1.4.0 +GST_REQ=1.6.1 dnl *** autotools stuff **** @@ -250,11 +250,12 @@ GLIB_REQ=2.32 AG_GST_GLIB_CHECK([$GLIB_REQ]) -ORC_CHECK([0.4.18]) +ORC_CHECK([0.4.23]) dnl checks for gstreamer dnl uninstalled is selected preferentially -- see pkg-config(1) AG_GST_CHECK_GST($GST_API_VERSION, [$GST_REQ], yes) +AG_GST_CHECK_GST_NET($GST_API_VERSION, [$GST_REQ], yes) AG_GST_CHECK_GST_BASE($GST_API_VERSION, [$GST_REQ], yes) AG_GST_CHECK_GST_CONTROLLER($GST_API_VERSION, [$GST_REQ], yes) AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no) @@ -269,7 +270,7 @@ dnl GTK is optional and only used in examples HAVE_GTK=no HAVE_GTK_X11=no -GTK_REQ=3.0.0 +GTK_REQ=3.10 if test "x$BUILD_EXAMPLES" = "xyes"; then PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no) dnl some examples need gtk+-x11 @@ -542,34 +543,30 @@ translit(dnm, m, l) AM_CONDITIONAL(USE_X, true) AG_GST_CHECK_FEATURE(X, [X libraries and plugins], [ximagesink], [ - AG_GST_CHECK_X + AG_GST_PKG_CHECK_MODULES(X, x11) ]) dnl Check for Xv extension translit(dnm, m, l) AM_CONDITIONAL(USE_XVIDEO, true) AG_GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions], [xvimagesink], [ - AG_GST_CHECK_XV + AG_GST_PKG_CHECK_MODULES(XVIDEO, x11 xv) ]) dnl check for X Shm translit(dnm, m, l) AM_CONDITIONAL(USE_XSHM, true) -AG_GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], , [ +AG_GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], [ ], [ if test x$HAVE_X = xyes; then - AC_CHECK_LIB(Xext, XShmAttach, - HAVE_XSHM="yes", HAVE_XSHM="no", - $X_LIBS) - if test "x$HAVE_XSHM" = "xyes"; then - XSHM_LIBS="-lXext" - else - dnl On AIX, it is in XextSam instead, but we still need -lXext - AC_CHECK_LIB(XextSam, XShmAttach, - HAVE_XSHM="yes", HAVE_XSHM="no", - $X_LIBS) - if test "x$HAVE_XSHM" = "xyes"; then - XSHM_LIBS="-lXext -lXextSam" - fi - fi + PKG_CHECK_MODULES(XSHM, xext, [ + AC_CHECK_LIB(Xext, XShmAttach, [ + HAVE_XSHM="yes" + ], [ + HAVE_XSHM="no" + XSHM_LIBS="" + ], [ $X_LIBS ]) + ], [ + HAVE_XSHM="no" + ]) fi ], , [ AC_SUBST(HAVE_XSHM) @@ -706,6 +703,12 @@ AG_GST_PKG_CHECK_MODULES(VORBIS, vorbis >= 1.0 vorbisenc >= 1.0) ]) +dnl *** gio-unix-2.0 for tests/check/pipelines/tcp.c *** +translit(dnm, m, l) AM_CONDITIONAL(USE_GIO_UNIX_2_0, true) +AG_GST_CHECK_FEATURE(GIO_UNIX_2_0, [glib GIO unix], gio-unix-2.0, [ + AG_GST_PKG_CHECK_MODULES(GIO_UNIX_2_0, gio-unix-2.0 >= 2.24) +]) + if test "x$HAVE_VORBIS" = "xyes"; then ac_cflags_save="$CFLAGS" AC_COMPILE_IFELSE([ diff -Nru gst-plugins-base1.0-1.4.3/debian/build-deps gst-plugins-base1.0-1.6.1/debian/build-deps --- gst-plugins-base1.0-1.4.3/debian/build-deps 2014-07-19 14:49:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/build-deps 2015-11-02 22:22:10.000000000 +0000 @@ -15,7 +15,7 @@ libxt-dev (>= 6.8.2.dfsg.1-3) libvorbis-dev (>= 1.0.0-2) libcdparanoia-dev (>= 3.10.2) [!hurd-i386] -liborc-0.4-dev (>= 1:0.4.17) +liborc-0.4-dev (>= 1:0.4.23) libpango1.0-dev (>= 1.16.0) libtheora-dev (>= 1.1) libglib2.0-dev (>= 2.32) diff -Nru gst-plugins-base1.0-1.4.3/debian/build-deps.in gst-plugins-base1.0-1.6.1/debian/build-deps.in --- gst-plugins-base1.0-1.4.3/debian/build-deps.in 2014-07-11 09:18:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/build-deps.in 2015-11-02 22:19:29.000000000 +0000 @@ -15,7 +15,7 @@ libxt-dev (>= 6.8.2.dfsg.1-3) libvorbis-dev (>= 1.0.0-2) libcdparanoia-dev (>= 3.10.2) [!hurd-i386] -liborc-0.4-dev (>= 1:0.4.17) +liborc-0.4-dev (>= 1:0.4.23) libpango1.0-dev (>= 1.16.0) libtheora-dev (>= 1.1) libglib2.0-dev (>= 2.32) diff -Nru gst-plugins-base1.0-1.4.3/debian/changelog gst-plugins-base1.0-1.6.1/debian/changelog --- gst-plugins-base1.0-1.4.3/debian/changelog 2014-10-09 08:21:50.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/changelog 2015-11-02 22:57:50.000000000 +0000 @@ -1,103 +1,29 @@ -gst-plugins-base1.0 (1.4.3-1ubuntu1~ubuntu14.04.1~ppa1) trusty; urgency=medium +gst-plugins-base1.0 (1.6.1-1) trusty; urgency=medium - * No-change backport to trusty + * multiarch fixes - -- Vasco Alves Thu, 09 Oct 2014 09:21:50 +0100 + [ Dan Witt ] + * sync with git -gst-plugins-base1.0 (1.4.3-1ubuntu1) utopic; urgency=medium + -- Dan Witt Sun, 1 Nov 2015 12:00:00 +0500 - * 0001-riff-Add-input-buffer-size-to-GstCaps.patch: Take patch from Alfonso - Sanchez-Beato on upstream bug #737599 to add a field in the GstCaps - containing the suggested buffer size for this stream. +gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium - -- Iain Lane Tue, 07 Oct 2014 11:35:22 +0100 + * sync with latest stable release -gst-plugins-base1.0 (1.4.3-1) unstable; urgency=medium + [ Dan Witt ] + * sync with git - * New upstream bugfix release. - - -- Sebastian Dröge Wed, 24 Sep 2014 12:06:56 +0300 - -gst-plugins-base1.0 (1.4.2-1) unstable; urgency=medium - - * New upstream bugfix release. - * debian/gstreamer-plugins-base-apps.*: - + Ship gst-device-monitor-1.0 tool. - - -- Sebastian Dröge Fri, 19 Sep 2014 14:13:16 +0300 - -gst-plugins-base1.0 (1.4.1-1) unstable; urgency=medium - - * New upstream bugfix release. - - -- Sebastian Dröge Wed, 27 Aug 2014 14:32:29 +0300 - -gst-plugins-base1.0 (1.4.0-1) unstable; urgency=medium - - * New upstream stable release. - - -- Sebastian Dröge Sat, 19 Jul 2014 16:49:51 +0200 - -gst-plugins-base1.0 (1.3.91-1) experimental; urgency=medium - - * New upstream release candidate: - + debian/rules: - - Build-depend on GStreamer core >= 1.3.91. - + debian/libgstreamer-plugins-base.symbols: - - Update for new symbols. - - -- Sebastian Dröge Fri, 11 Jul 2014 10:59:50 +0200 - -gst-plugins-base1.0 (1.3.90-1) experimental; urgency=medium - - * New upstream release candidate: - + debian/rules: - - Build-depend on GStreamer core >= 1.3.90. - + debian/libgstreamer-plugins-base.symbols: - - Update for new symbols. - - -- Sebastian Dröge Sat, 28 Jun 2014 11:31:13 +0200 - -gst-plugins-base1.0 (1.3.3-1) experimental; urgency=medium - - * debian/control.in: - + Add Recommends on gstreamer1.0-plugins-base for the - library package (Closes: #749153). - * debian/rules: - + Run autopoint during autoreconf too. - * New upstream development release: - + debian/rules: - - Build-depend on GStreamer core >= 1.3.3. - + debian/libgstreamer-plugins-base.symbols: - - Update for new symbols. - - -- Sebastian Dröge Sun, 25 May 2014 17:11:24 +0200 - -gst-plugins-base1.0 (1.3.2-1) experimental; urgency=medium - - * New upstream development release: - + debian/rules: - - Build-depend on GStreamer core >= 1.3.2. - + debian/libgstreamer-plugins-base.symbols: - - Update for new symbols. - - -- Sebastian Dröge Wed, 21 May 2014 12:18:16 +0200 - -gst-plugins-base1.0 (1.3.1-1) experimental; urgency=medium - - * New upstream development release: - + debian/rules: - - Build-depend on GStreamer core >= 1.3.1. - + debian/libgstreamer-plugins-base.symbols: - - Update for new symbols. - - -- Sebastian Dröge Sat, 03 May 2014 18:31:03 +0200 + -- Dan Witt Sun, 1 Nov 2015 12:00:00 +0500 + +gst-plugins-base1.0 (1.2.4-1~ubuntu1) trusty; urgency=medium -gst-plugins-base1.0 (1.2.4-1) unstable; urgency=medium + * Upload Debian bugfix update as a trusty SRU (lp: #1312305) + [ Sebastian Dröge ] * New upstream bugfix release. - -- Sebastian Dröge Sat, 19 Apr 2014 15:48:06 +0200 + -- Sebastien Bacher Thu, 24 Apr 2014 13:47:16 +0200 gst-plugins-base1.0 (1.2.3-1) unstable; urgency=medium diff -Nru gst-plugins-base1.0-1.4.3/debian/control gst-plugins-base1.0-1.6.1/debian/control --- gst-plugins-base1.0-1.4.3/debian/control 2014-10-08 17:10:20.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/control 2015-11-02 22:57:59.000000000 +0000 @@ -6,7 +6,7 @@ Sebastien Bacher , Sebastian Dröge , Sjoerd Simons -Build-Depends: libgstreamer1.0-dev (>= 1.4.0), libasound2-dev (>= 0.9.0) [linux-any] , libgudev-1.0-dev (>= 143) [linux-any], autotools-dev, automake (>= 1.11), autoconf (>= 2.62), libtool (>= 2.2.6), dh-autoreconf, autopoint (>= 0.17), cdbs (>= 0.4.93~), debhelper (>= 9), gnome-pkg-tools (>= 0.7), gtk-doc-tools (>= 1.12), pkg-config (>= 0.11.0), libxv-dev (>= 6.8.2.dfsg.1-3), libxt-dev (>= 6.8.2.dfsg.1-3), libvorbis-dev (>= 1.0.0-2), libcdparanoia-dev (>= 3.10.2) [!hurd-i386], liborc-0.4-dev (>= 1:0.4.17), libpango1.0-dev (>= 1.16.0), libtheora-dev (>= 1.1), libglib2.0-dev (>= 2.32), zlib1g-dev (>= 1:1.1.4), libvisual-0.4-dev (>= 0.4.0), dpkg-dev (>= 1.15.1), iso-codes, libgtk-3-dev, libglib2.0-doc, gstreamer1.0-doc, libgirepository1.0-dev (>= 0.9.12-4~), gobject-introspection (>= 0.9.12-4~), gir1.2-glib-2.0, gir1.2-freedesktop, gir1.2-gstreamer-1.0, zlib1g-dev +Build-Depends: libgstreamer1.0-dev (>= 1.2.0), libasound2-dev (>= 0.9.0) [linux-any] , libgudev-1.0-dev (>= 143) [linux-any], autotools-dev, automake (>= 1.11), autoconf (>= 2.62), libtool (>= 2.2.6), dh-autoreconf, autopoint (>= 0.17), cdbs (>= 0.4.93~), debhelper (>= 9), gnome-pkg-tools (>= 0.7), gtk-doc-tools (>= 1.12), pkg-config (>= 0.11.0), libxv-dev (>= 6.8.2.dfsg.1-3), libxt-dev (>= 6.8.2.dfsg.1-3), libvorbis-dev (>= 1.0.0-2), libcdparanoia-dev (>= 3.10.2) [!hurd-i386], liborc-0.4-dev (>= 1:0.4.23), libpango1.0-dev (>= 1.16.0), libtheora-dev (>= 1.1), libglib2.0-dev (>= 2.32), zlib1g-dev (>= 1:1.1.4), libvisual-0.4-dev (>= 0.4.0), dpkg-dev (>= 1.15.1), iso-codes, libgtk-3-dev, libglib2.0-doc, gstreamer1.0-doc, libgirepository1.0-dev (>= 0.9.12-4~), gobject-introspection (>= 0.9.12-4~), gir1.2-glib-2.0, gir1.2-freedesktop, gir1.2-gstreamer-1.0, zlib1g-dev Standards-Version: 3.9.3 Vcs-Git: git://anonscm.debian.org/pkg-gstreamer/gst-plugins-base1.0.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-gstreamer/gst-plugins-base1.0.git;a=summary @@ -56,7 +56,6 @@ ${shlibs:Depends}, iso-codes Breaks: totem-gstreamer (<= 2.17.92-0ubuntu1) -Recommends: gstreamer1.0-plugins-base Suggests: libvisual-0.4-plugins, gstreamer-codec-install | gnome-codec-install Description: GStreamer libraries from the "base" set @@ -78,7 +77,7 @@ libgstreamer-plugins-base1.0-0 (= ${binary:Version}), libc6-dev | libc-dev, pkg-config, - libgstreamer1.0-dev (>= 1.4.0), + libgstreamer1.0-dev (>= 1.2.0), libglib2.0-dev, libxml2-dev, gir1.2-gst-plugins-base-1.0 (= ${binary:Version}) @@ -99,7 +98,7 @@ Section: libs Depends: ${misc:Depends}, ${shlibs:Depends}, - libgstreamer-plugins-base1.0-0 (>= 1.4.3) + libgstreamer-plugins-base1.0-0 (>= 1.6.1) Recommends: alsa-base (>= 0.9.0) Suggests: alsa-utils (>= 0.9.0) XB-GStreamer-Version: ${gstreamer:Version} @@ -126,7 +125,7 @@ Section: libs Depends: ${misc:Depends}, ${shlibs:Depends}, - libgstreamer-plugins-base1.0-0 (>= 1.4.3) + libgstreamer-plugins-base1.0-0 (>= 1.6.1) Suggests: gvfs XB-GStreamer-Version: ${gstreamer:Version} XB-GStreamer-Elements: ${gstreamer:Elements} @@ -176,7 +175,7 @@ Section: libs Depends: ${misc:Depends}, ${shlibs:Depends}, - libgstreamer-plugins-base1.0-0 (>= 1.4.3) + libgstreamer-plugins-base1.0-0 (>= 1.6.1) XB-GStreamer-Version: ${gstreamer:Version} XB-GStreamer-Elements: ${gstreamer:Elements} XB-GStreamer-URI-Sources: ${gstreamer:URISources} diff -Nru gst-plugins-base1.0-1.4.3/debian/control.in gst-plugins-base1.0-1.6.1/debian/control.in --- gst-plugins-base1.0-1.4.3/debian/control.in 2014-07-11 09:18:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/control.in 2015-11-01 21:07:38.000000000 +0000 @@ -56,7 +56,6 @@ ${shlibs:Depends}, iso-codes Breaks: totem-gstreamer (<= 2.17.92-0ubuntu1) -Recommends: @GST_PKGNAME@-plugins-base Suggests: libvisual-0.4-plugins, gstreamer-codec-install | gnome-codec-install Description: GStreamer libraries from the "base" set diff -Nru gst-plugins-base1.0-1.4.3/debian/gstreamer-plugins-base-apps.install gst-plugins-base1.0-1.6.1/debian/gstreamer-plugins-base-apps.install --- gst-plugins-base1.0-1.4.3/debian/gstreamer-plugins-base-apps.install 2014-09-12 10:33:29.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/gstreamer-plugins-base-apps.install 2015-11-01 21:07:38.000000000 +0000 @@ -1,3 +1,2 @@ debian/tmp/usr/bin/gst-discoverer-@GST_ABI@ debian/tmp/usr/bin/gst-play-@GST_ABI@ -debian/tmp/usr/bin/gst-device-monitor-@GST_ABI@ diff -Nru gst-plugins-base1.0-1.4.3/debian/gstreamer-plugins-base-apps.manpages gst-plugins-base1.0-1.6.1/debian/gstreamer-plugins-base-apps.manpages --- gst-plugins-base1.0-1.4.3/debian/gstreamer-plugins-base-apps.manpages 2014-09-12 10:33:38.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/gstreamer-plugins-base-apps.manpages 2015-11-01 21:07:38.000000000 +0000 @@ -1,3 +1,2 @@ debian/tmp/usr/share/man/man1/gst-discoverer-@GST_ABI@.1 debian/tmp/usr/share/man/man1/gst-play-@GST_ABI@.1 -debian/tmp/usr/share/man/man1/gst-device-monitor-@GST_ABI@.1 diff -Nru gst-plugins-base1.0-1.4.3/debian/libgstreamer-plugins-base.symbols gst-plugins-base1.0-1.6.1/debian/libgstreamer-plugins-base.symbols --- gst-plugins-base1.0-1.4.3/debian/libgstreamer-plugins-base.symbols 2014-07-19 14:49:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/libgstreamer-plugins-base.symbols 2015-11-01 21:28:10.000000000 +0000 @@ -2,7 +2,12 @@ gst_dmabuf_allocator_alloc@Base 1.2.0 gst_dmabuf_allocator_new@Base 1.2.0 gst_dmabuf_memory_get_fd@Base 1.2.0 + gst_fd_allocator_alloc@Base 1.6.1-0 + gst_fd_allocator_get_type@Base 1.6.1-0 + gst_fd_allocator_new@Base 1.6.1-0 + gst_fd_memory_get_fd@Base 1.6.1-0 gst_is_dmabuf_memory@Base 1.2.0 + gst_is_fd_memory@Base 1.6.1-0 libgstapp-1.0.so.0 libgstreamer-plugins-base1.0-0 #MINVER# gst_app_sink_get_caps@Base 1.0.0 gst_app_sink_get_drop@Base 1.0.0 @@ -27,6 +32,7 @@ gst_app_src_get_stream_type@Base 1.0.0 gst_app_src_get_type@Base 1.0.0 gst_app_src_push_buffer@Base 1.0.0 + gst_app_src_push_sample@Base 1.6.1-0 gst_app_src_set_callbacks@Base 1.0.0 gst_app_src_set_caps@Base 1.0.0 gst_app_src_set_emit_signals@Base 1.0.0 @@ -44,7 +50,9 @@ gst_audio_base_sink_get_provide_clock@Base 1.0.0 gst_audio_base_sink_get_slave_method@Base 1.0.0 gst_audio_base_sink_get_type@Base 1.0.0 + gst_audio_base_sink_report_device_failure@Base 1.6.1-0 gst_audio_base_sink_set_alignment_threshold@Base 1.0.0 + gst_audio_base_sink_set_custom_slaving_callback@Base 1.6.1-0 gst_audio_base_sink_set_discont_wait@Base 1.0.0 gst_audio_base_sink_set_drift_tolerance@Base 1.0.0 gst_audio_base_sink_set_provide_clock@Base 1.0.0 @@ -91,6 +99,7 @@ gst_audio_decoder_get_type@Base 1.0.0 gst_audio_decoder_merge_tags@Base 1.0.0 gst_audio_decoder_negotiate@Base 1.0.0 + gst_audio_decoder_proxy_getcaps@Base 1.6.1-0 gst_audio_decoder_set_drainable@Base 1.0.0 gst_audio_decoder_set_estimate_rate@Base 1.0.0 gst_audio_decoder_set_latency@Base 1.0.0 @@ -101,6 +110,7 @@ gst_audio_decoder_set_plc@Base 1.0.0 gst_audio_decoder_set_plc_aware@Base 1.0.0 gst_audio_decoder_set_tolerance@Base 1.0.0 + gst_audio_decoder_set_use_default_pad_acceptcaps@Base 1.6.1-0 gst_audio_downmix_meta_api_get_type@Base 1.0.0 gst_audio_downmix_meta_get_info@Base 1.0.0 gst_audio_encoder_allocate_output_buffer@Base 1.0.0 @@ -237,11 +247,11 @@ gst_codec_utils_h264_get_level@Base 1.0.0 gst_codec_utils_h264_get_level_idc@Base 1.0.0 gst_codec_utils_h264_get_profile@Base 1.0.0 - gst_codec_utils_h265_caps_set_level_tier_and_profile@Base 1.4.0 - gst_codec_utils_h265_get_level@Base 1.4.0 - gst_codec_utils_h265_get_level_idc@Base 1.4.0 - gst_codec_utils_h265_get_profile@Base 1.4.0 - gst_codec_utils_h265_get_tier@Base 1.4.0 + gst_codec_utils_h265_caps_set_level_tier_and_profile@Base 1.6.1-0 + gst_codec_utils_h265_get_level@Base 1.6.1-0 + gst_codec_utils_h265_get_level_idc@Base 1.6.1-0 + gst_codec_utils_h265_get_profile@Base 1.6.1-0 + gst_codec_utils_h265_get_tier@Base 1.6.1-0 gst_codec_utils_mpeg4video_caps_set_level_and_profile@Base 1.0.0 gst_codec_utils_mpeg4video_get_level@Base 1.0.0 gst_codec_utils_mpeg4video_get_profile@Base 1.0.0 @@ -258,11 +268,12 @@ gst_discoverer_discover_uri_async@Base 1.0.0 gst_discoverer_get_type@Base 1.0.0 gst_discoverer_info_copy@Base 1.0.0 + gst_discoverer_info_from_variant@Base 1.6.1-0 gst_discoverer_info_get_audio_streams@Base 1.0.0 gst_discoverer_info_get_container_streams@Base 1.0.0 gst_discoverer_info_get_duration@Base 1.0.0 gst_discoverer_info_get_misc@Base 1.0.0 - gst_discoverer_info_get_missing_elements_installer_details@Base 1.4.0 + gst_discoverer_info_get_missing_elements_installer_details@Base 1.6.1-0 gst_discoverer_info_get_result@Base 1.0.0 gst_discoverer_info_get_seekable@Base 1.0.0 gst_discoverer_info_get_stream_info@Base 1.0.0 @@ -274,8 +285,10 @@ gst_discoverer_info_get_type@Base 1.0.0 gst_discoverer_info_get_uri@Base 1.0.0 gst_discoverer_info_get_video_streams@Base 1.0.0 + gst_discoverer_info_to_variant@Base 1.6.1-0 gst_discoverer_new@Base 1.0.0 gst_discoverer_result_get_type@Base 1.0.0 + gst_discoverer_serialize_flags_get_type@Base 1.6.1-0 gst_discoverer_start@Base 1.0.0 gst_discoverer_stop@Base 1.0.0 gst_discoverer_stream_info_get_caps@Base 1.0.0 @@ -313,6 +326,7 @@ gst_encoding_list_available_categories@Base 1.0.0 gst_encoding_profile_find@Base 1.0.0 gst_encoding_profile_from_discoverer@Base 1.0.0 + gst_encoding_profile_get_allow_dynamic_output@Base 1.6.1-0 gst_encoding_profile_get_description@Base 1.0.0 gst_encoding_profile_get_file_extension@Base 1.2.0 gst_encoding_profile_get_format@Base 1.0.0 @@ -324,8 +338,11 @@ gst_encoding_profile_get_restriction@Base 1.0.0 gst_encoding_profile_get_type@Base 1.0.0 gst_encoding_profile_get_type_nick@Base 1.0.0 + gst_encoding_profile_is_enabled@Base 1.6.1-0 gst_encoding_profile_is_equal@Base 1.0.0 + gst_encoding_profile_set_allow_dynamic_output@Base 1.6.1-0 gst_encoding_profile_set_description@Base 1.0.0 + gst_encoding_profile_set_enabled@Base 1.6.1-0 gst_encoding_profile_set_format@Base 1.0.0 gst_encoding_profile_set_name@Base 1.0.0 gst_encoding_profile_set_presence@Base 1.0.0 @@ -354,6 +371,9 @@ gst_install_plugins_context_free@Base 1.0.0 gst_install_plugins_context_get_type@Base 1.0.0 gst_install_plugins_context_new@Base 1.0.0 + gst_install_plugins_context_set_confirm_search@Base 1.6.1-0 + gst_install_plugins_context_set_desktop_id@Base 1.6.1-0 + gst_install_plugins_context_set_startup_notification_id@Base 1.6.1-0 gst_install_plugins_context_set_xid@Base 1.0.0 gst_install_plugins_installation_in_progress@Base 1.0.0 gst_install_plugins_return_get_name@Base 1.0.0 @@ -410,6 +430,8 @@ gst_rtcp_buffer_unmap@Base 1.0.0 gst_rtcp_buffer_validate@Base 1.0.0 gst_rtcp_buffer_validate_data@Base 1.0.0 + gst_rtcp_buffer_validate_data_reduced@Base 1.6.1-0 + gst_rtcp_buffer_validate_reduced@Base 1.6.1-0 gst_rtcp_ntp_to_unix@Base 1.0.0 gst_rtcp_packet_add_rb@Base 1.0.0 gst_rtcp_packet_bye_add_ssrc@Base 1.0.0 @@ -453,7 +475,10 @@ gst_rtcp_packet_sr_set_sender_info@Base 1.0.0 gst_rtcp_sdes_name_to_type@Base 1.0.0 gst_rtcp_sdes_type_to_name@Base 1.0.0 + gst_rtcp_type_get_type@Base 1.6.1-0 gst_rtcp_unix_to_ntp@Base 1.0.0 + gst_rtcpfb_type_get_type@Base 1.6.1-0 + gst_rtcpsdes_type_get_type@Base 1.6.1-0 gst_rtp_base_audio_payload_flush@Base 1.0.0 gst_rtp_base_audio_payload_get_adapter@Base 1.0.0 gst_rtp_base_audio_payload_get_type@Base 1.0.0 @@ -503,6 +528,7 @@ gst_rtp_buffer_get_timestamp@Base 1.0.0 gst_rtp_buffer_get_version@Base 1.0.0 gst_rtp_buffer_map@Base 1.0.0 + gst_rtp_buffer_map_flags_get_type@Base 1.6.1-0 gst_rtp_buffer_new_allocate@Base 1.0.0 gst_rtp_buffer_new_allocate_len@Base 1.0.0 gst_rtp_buffer_new_copy_data@Base 1.0.0 @@ -524,8 +550,10 @@ gst_rtp_hdrext_get_ntp_64@Base 1.2.0 gst_rtp_hdrext_set_ntp_56@Base 1.2.0 gst_rtp_hdrext_set_ntp_64@Base 1.2.0 + gst_rtp_payload_get_type@Base 1.6.1-0 gst_rtp_payload_info_for_name@Base 1.0.0 gst_rtp_payload_info_for_pt@Base 1.0.0 + gst_rtp_profile_get_type@Base 1.6.1-0 libgstrtsp-1.0.so.0 libgstreamer-plugins-base1.0-0 #MINVER# gst_rtsp_auth_method_get_type@Base 1.0.0 gst_rtsp_connection_accept@Base 1.0.0 @@ -541,7 +569,8 @@ gst_rtsp_connection_get_read_socket@Base 1.0.0 gst_rtsp_connection_get_remember_session_id@Base 1.2.0 gst_rtsp_connection_get_tls@Base 1.2.0 - gst_rtsp_connection_get_tls_database@Base 1.4.0 + gst_rtsp_connection_get_tls_database@Base 1.6.1-0 + gst_rtsp_connection_get_tls_interaction@Base 1.6.1-0 gst_rtsp_connection_get_tls_validation_flags@Base 1.2.1 gst_rtsp_connection_get_tunnelid@Base 1.0.0 gst_rtsp_connection_get_url@Base 1.0.0 @@ -560,7 +589,8 @@ gst_rtsp_connection_set_proxy@Base 1.0.0 gst_rtsp_connection_set_qos_dscp@Base 1.0.0 gst_rtsp_connection_set_remember_session_id@Base 1.2.0 - gst_rtsp_connection_set_tls_database@Base 1.4.0 + gst_rtsp_connection_set_tls_database@Base 1.6.1-0 + gst_rtsp_connection_set_tls_interaction@Base 1.6.1-0 gst_rtsp_connection_set_tls_validation_flags@Base 1.2.1 gst_rtsp_connection_set_tunneled@Base 1.0.0 gst_rtsp_connection_write@Base 1.0.0 @@ -584,11 +614,13 @@ gst_rtsp_header_field_get_type@Base 1.0.0 gst_rtsp_lower_trans_get_type@Base 1.0.0 gst_rtsp_message_add_header@Base 1.0.0 + gst_rtsp_message_add_header_by_name@Base 1.6.1-0 gst_rtsp_message_append_headers@Base 1.0.0 gst_rtsp_message_dump@Base 1.0.0 gst_rtsp_message_free@Base 1.0.0 gst_rtsp_message_get_body@Base 1.0.0 gst_rtsp_message_get_header@Base 1.0.0 + gst_rtsp_message_get_header_by_name@Base 1.6.1-0 gst_rtsp_message_get_type@Base 1.0.0 gst_rtsp_message_init@Base 1.0.0 gst_rtsp_message_init_data@Base 1.0.0 @@ -602,13 +634,16 @@ gst_rtsp_message_parse_request@Base 1.0.0 gst_rtsp_message_parse_response@Base 1.0.0 gst_rtsp_message_remove_header@Base 1.0.0 + gst_rtsp_message_remove_header_by_name@Base 1.6.1-0 gst_rtsp_message_set_body@Base 1.0.0 gst_rtsp_message_steal_body@Base 1.0.0 gst_rtsp_message_take_body@Base 1.0.0 gst_rtsp_message_take_header@Base 1.0.0 + gst_rtsp_message_take_header_by_name@Base 1.6.1-0 gst_rtsp_message_unset@Base 1.0.0 gst_rtsp_method_as_text@Base 1.0.0 gst_rtsp_method_get_type@Base 1.0.0 + gst_rtsp_msg_type_get_type@Base 1.6.1-0 gst_rtsp_options_as_text@Base 1.0.0 gst_rtsp_options_from_text@Base 1.2.0 gst_rtsp_profile_get_type@Base 1.2.3 @@ -617,15 +652,18 @@ gst_rtsp_range_get_times@Base 1.2.0 gst_rtsp_range_parse@Base 1.0.0 gst_rtsp_range_to_string@Base 1.0.0 + gst_rtsp_range_unit_get_type@Base 1.6.1-0 gst_rtsp_result_get_type@Base 1.0.0 gst_rtsp_state_get_type@Base 1.0.0 gst_rtsp_status_as_text@Base 1.0.0 gst_rtsp_status_code_get_type@Base 1.0.0 gst_rtsp_strresult@Base 1.0.0 + gst_rtsp_time_type_get_type@Base 1.6.1-0 + gst_rtsp_trans_mode_get_type@Base 1.6.1-0 gst_rtsp_transport_as_text@Base 1.0.0 gst_rtsp_transport_free@Base 1.0.0 gst_rtsp_transport_get_manager@Base 1.0.0 - gst_rtsp_transport_get_media_type@Base 1.4.0 + gst_rtsp_transport_get_media_type@Base 1.6.1-0 gst_rtsp_transport_get_mime@Base 1.0.0 gst_rtsp_transport_init@Base 1.0.0 gst_rtsp_transport_new@Base 1.0.0 @@ -645,55 +683,55 @@ gst_rtsp_watch_new@Base 1.0.0 gst_rtsp_watch_reset@Base 1.0.0 gst_rtsp_watch_send_message@Base 1.0.0 - gst_rtsp_watch_set_flushing@Base 1.4.0 + gst_rtsp_watch_set_flushing@Base 1.6.1-0 gst_rtsp_watch_set_send_backlog@Base 1.2.0 gst_rtsp_watch_unref@Base 1.0.0 - gst_rtsp_watch_wait_backlog@Base 1.4.0 + gst_rtsp_watch_wait_backlog@Base 1.6.1-0 gst_rtsp_watch_write_data@Base 1.0.0 libgstsdp-1.0.so.0 libgstreamer-plugins-base1.0-0 #MINVER# - gst_mikey_message_add_cs_srtp@Base 1.4.0 - gst_mikey_message_add_payload@Base 1.4.0 - gst_mikey_message_add_pke@Base 1.4.0 - gst_mikey_message_add_rand@Base 1.4.0 - gst_mikey_message_add_rand_len@Base 1.4.0 - gst_mikey_message_add_t@Base 1.4.0 - gst_mikey_message_add_t_now_ntp_utc@Base 1.4.0 - gst_mikey_message_find_payload@Base 1.4.0 - gst_mikey_message_get_cs_srtp@Base 1.4.0 - gst_mikey_message_get_n_cs@Base 1.4.0 - gst_mikey_message_get_n_payloads@Base 1.4.0 - gst_mikey_message_get_payload@Base 1.4.0 - gst_mikey_message_get_type@Base 1.4.0 - gst_mikey_message_insert_cs_srtp@Base 1.4.0 - gst_mikey_message_insert_payload@Base 1.4.0 - gst_mikey_message_new@Base 1.4.0 - gst_mikey_message_new_from_bytes@Base 1.4.0 - gst_mikey_message_new_from_data@Base 1.4.0 - gst_mikey_message_remove_cs_srtp@Base 1.4.0 - gst_mikey_message_remove_payload@Base 1.4.0 - gst_mikey_message_replace_cs_srtp@Base 1.4.0 - gst_mikey_message_replace_payload@Base 1.4.0 - gst_mikey_message_set_info@Base 1.4.0 - gst_mikey_message_to_bytes@Base 1.4.0 - gst_mikey_payload_get_type@Base 1.4.0 - gst_mikey_payload_kemac_add_sub@Base 1.4.0 - gst_mikey_payload_kemac_get_n_sub@Base 1.4.0 - gst_mikey_payload_kemac_get_sub@Base 1.4.0 - gst_mikey_payload_kemac_remove_sub@Base 1.4.0 - gst_mikey_payload_kemac_set@Base 1.4.0 - gst_mikey_payload_key_data_set_interval@Base 1.4.0 - gst_mikey_payload_key_data_set_key@Base 1.4.0 - gst_mikey_payload_key_data_set_salt@Base 1.4.0 - gst_mikey_payload_key_data_set_spi@Base 1.4.0 - gst_mikey_payload_new@Base 1.4.0 - gst_mikey_payload_pke_set@Base 1.4.0 - gst_mikey_payload_rand_set@Base 1.4.0 - gst_mikey_payload_sp_add_param@Base 1.4.0 - gst_mikey_payload_sp_get_n_params@Base 1.4.0 - gst_mikey_payload_sp_get_param@Base 1.4.0 - gst_mikey_payload_sp_remove_param@Base 1.4.0 - gst_mikey_payload_sp_set@Base 1.4.0 - gst_mikey_payload_t_set@Base 1.4.0 + gst_mikey_message_add_cs_srtp@Base 1.6.1-0 + gst_mikey_message_add_payload@Base 1.6.1-0 + gst_mikey_message_add_pke@Base 1.6.1-0 + gst_mikey_message_add_rand@Base 1.6.1-0 + gst_mikey_message_add_rand_len@Base 1.6.1-0 + gst_mikey_message_add_t@Base 1.6.1-0 + gst_mikey_message_add_t_now_ntp_utc@Base 1.6.1-0 + gst_mikey_message_find_payload@Base 1.6.1-0 + gst_mikey_message_get_cs_srtp@Base 1.6.1-0 + gst_mikey_message_get_n_cs@Base 1.6.1-0 + gst_mikey_message_get_n_payloads@Base 1.6.1-0 + gst_mikey_message_get_payload@Base 1.6.1-0 + gst_mikey_message_get_type@Base 1.6.1-0 + gst_mikey_message_insert_cs_srtp@Base 1.6.1-0 + gst_mikey_message_insert_payload@Base 1.6.1-0 + gst_mikey_message_new@Base 1.6.1-0 + gst_mikey_message_new_from_bytes@Base 1.6.1-0 + gst_mikey_message_new_from_data@Base 1.6.1-0 + gst_mikey_message_remove_cs_srtp@Base 1.6.1-0 + gst_mikey_message_remove_payload@Base 1.6.1-0 + gst_mikey_message_replace_cs_srtp@Base 1.6.1-0 + gst_mikey_message_replace_payload@Base 1.6.1-0 + gst_mikey_message_set_info@Base 1.6.1-0 + gst_mikey_message_to_bytes@Base 1.6.1-0 + gst_mikey_payload_get_type@Base 1.6.1-0 + gst_mikey_payload_kemac_add_sub@Base 1.6.1-0 + gst_mikey_payload_kemac_get_n_sub@Base 1.6.1-0 + gst_mikey_payload_kemac_get_sub@Base 1.6.1-0 + gst_mikey_payload_kemac_remove_sub@Base 1.6.1-0 + gst_mikey_payload_kemac_set@Base 1.6.1-0 + gst_mikey_payload_key_data_set_interval@Base 1.6.1-0 + gst_mikey_payload_key_data_set_key@Base 1.6.1-0 + gst_mikey_payload_key_data_set_salt@Base 1.6.1-0 + gst_mikey_payload_key_data_set_spi@Base 1.6.1-0 + gst_mikey_payload_new@Base 1.6.1-0 + gst_mikey_payload_pke_set@Base 1.6.1-0 + gst_mikey_payload_rand_set@Base 1.6.1-0 + gst_mikey_payload_sp_add_param@Base 1.6.1-0 + gst_mikey_payload_sp_get_n_params@Base 1.6.1-0 + gst_mikey_payload_sp_get_param@Base 1.6.1-0 + gst_mikey_payload_sp_remove_param@Base 1.6.1-0 + gst_mikey_payload_sp_set@Base 1.6.1-0 + gst_mikey_payload_t_set@Base 1.6.1-0 gst_sdp_address_is_multicast@Base 1.0.0 gst_sdp_attribute_clear@Base 1.2.0 gst_sdp_attribute_set@Base 1.2.0 @@ -875,6 +913,7 @@ gst_buffer_add_video_overlay_composition_meta@Base 1.0.0 gst_buffer_add_video_region_of_interest_meta@Base 1.2.0 gst_buffer_add_video_region_of_interest_meta_id@Base 1.2.0 + gst_buffer_get_video_meta@Base 1.6.1-0 gst_buffer_get_video_meta_id@Base 1.0.0 gst_buffer_get_video_region_of_interest_meta_id@Base 1.2.0 gst_buffer_pool_config_get_video_alignment@Base 1.0.0 @@ -899,8 +938,10 @@ gst_navigation_message_get_type@Base 1.0.0 gst_navigation_message_new_angles_changed@Base 1.0.0 gst_navigation_message_new_commands_changed@Base 1.0.0 + gst_navigation_message_new_event@Base 1.6.1-0 gst_navigation_message_new_mouse_over@Base 1.0.0 gst_navigation_message_parse_angles_changed@Base 1.0.0 + gst_navigation_message_parse_event@Base 1.6.1-0 gst_navigation_message_parse_mouse_over@Base 1.0.0 gst_navigation_message_type_get_type@Base 1.0.0 gst_navigation_query_get_type@Base 1.0.0 @@ -918,14 +959,17 @@ gst_navigation_send_key_event@Base 1.0.0 gst_navigation_send_mouse_event@Base 1.0.0 gst_video_alignment_reset@Base 1.0.0 + gst_video_alpha_mode_get_type@Base 1.6.1-0 gst_video_blend@Base 1.0.0 gst_video_blend_scale_linear_RGBA@Base 1.0.0 + gst_video_buffer_flags_get_type@Base 1.6.1-0 gst_video_buffer_pool_get_type@Base 1.0.0 gst_video_buffer_pool_new@Base 1.0.0 gst_video_calculate_display_ratio@Base 1.0.0 gst_video_chroma_flags_get_type@Base 1.2.0 gst_video_chroma_from_string@Base 1.0.0 gst_video_chroma_method_get_type@Base 1.2.0 + gst_video_chroma_mode_get_type@Base 1.6.1-0 gst_video_chroma_resample@Base 1.2.0 gst_video_chroma_resample_free@Base 1.2.0 gst_video_chroma_resample_get_info@Base 1.2.0 @@ -940,15 +984,25 @@ gst_video_codec_state_get_type@Base 1.0.0 gst_video_codec_state_ref@Base 1.0.0 gst_video_codec_state_unref@Base 1.0.0 + gst_video_color_matrix_get_Kr_Kb@Base 1.6.1-0 gst_video_color_matrix_get_type@Base 1.0.0 + gst_video_color_primaries_get_info@Base 1.6.1-0 gst_video_color_primaries_get_type@Base 1.0.0 gst_video_color_range_get_type@Base 1.0.0 gst_video_color_range_offsets@Base 1.0.0 + gst_video_color_transfer_decode@Base 1.6.1-0 + gst_video_color_transfer_encode@Base 1.6.1-0 gst_video_colorimetry_from_string@Base 1.0.0 + gst_video_colorimetry_is_equal@Base 1.6.1-0 gst_video_colorimetry_matches@Base 1.0.0 gst_video_colorimetry_to_string@Base 1.0.0 gst_video_convert_sample@Base 1.0.0 gst_video_convert_sample_async@Base 1.0.0 + gst_video_converter_frame@Base 1.6.1-0 + gst_video_converter_free@Base 1.6.1-0 + gst_video_converter_get_config@Base 1.6.1-0 + gst_video_converter_new@Base 1.6.1-0 + gst_video_converter_set_config@Base 1.6.1-0 gst_video_crop_meta_api_get_type@Base 1.0.0 gst_video_crop_meta_get_info@Base 1.0.0 gst_video_decoder_add_to_frame@Base 1.0.0 @@ -964,23 +1018,30 @@ gst_video_decoder_get_latency@Base 1.0.0 gst_video_decoder_get_max_decode_time@Base 1.0.0 gst_video_decoder_get_max_errors@Base 1.0.0 - gst_video_decoder_get_needs_format@Base 1.4.0 + gst_video_decoder_get_needs_format@Base 1.6.1-0 gst_video_decoder_get_oldest_frame@Base 1.0.0 gst_video_decoder_get_output_state@Base 1.0.0 gst_video_decoder_get_packetized@Base 1.0.0 - gst_video_decoder_get_pending_frame_size@Base 1.4.0 + gst_video_decoder_get_pending_frame_size@Base 1.6.1-0 gst_video_decoder_get_qos_proportion@Base 1.0.3 gst_video_decoder_get_type@Base 1.0.0 gst_video_decoder_have_frame@Base 1.0.0 gst_video_decoder_merge_tags@Base 1.0.0 gst_video_decoder_negotiate@Base 1.0.0 + gst_video_decoder_proxy_getcaps@Base 1.6.1-0 gst_video_decoder_release_frame@Base 1.2.2 gst_video_decoder_set_estimate_rate@Base 1.0.0 gst_video_decoder_set_latency@Base 1.0.0 gst_video_decoder_set_max_errors@Base 1.0.0 - gst_video_decoder_set_needs_format@Base 1.4.0 + gst_video_decoder_set_needs_format@Base 1.6.1-0 gst_video_decoder_set_output_state@Base 1.0.0 gst_video_decoder_set_packetized@Base 1.0.0 + gst_video_decoder_set_use_default_pad_acceptcaps@Base 1.6.1-0 + gst_video_dither_flags_get_type@Base 1.6.1-0 + gst_video_dither_free@Base 1.6.1-0 + gst_video_dither_line@Base 1.6.1-0 + gst_video_dither_method_get_type@Base 1.6.1-0 + gst_video_dither_new@Base 1.6.1-0 gst_video_encoder_allocate_output_buffer@Base 1.0.0 gst_video_encoder_allocate_output_frame@Base 1.0.0 gst_video_encoder_finish_frame@Base 1.0.0 @@ -996,6 +1057,7 @@ gst_video_encoder_proxy_getcaps@Base 1.0.0 gst_video_encoder_set_headers@Base 1.0.0 gst_video_encoder_set_latency@Base 1.0.0 + gst_video_encoder_set_min_pts@Base 1.6.1-0 gst_video_encoder_set_output_state@Base 1.0.0 gst_video_event_is_force_key_unit@Base 1.0.0 gst_video_event_new_downstream_force_key_unit@Base 1.0.0 @@ -1017,25 +1079,49 @@ gst_video_format_to_string@Base 1.0.0 gst_video_frame_copy@Base 1.0.0 gst_video_frame_copy_plane@Base 1.0.0 + gst_video_frame_flags_get_type@Base 1.6.1-0 gst_video_frame_map@Base 1.0.0 + gst_video_frame_map_flags_get_type@Base 1.6.1-0 gst_video_frame_map_id@Base 1.0.0 gst_video_frame_unmap@Base 1.0.0 + gst_video_gamma_mode_get_type@Base 1.6.1-0 gst_video_gl_texture_upload_meta_api_get_type@Base 1.2.0 gst_video_gl_texture_upload_meta_get_info@Base 1.2.0 gst_video_gl_texture_upload_meta_upload@Base 1.2.0 + gst_video_guess_framerate@Base 1.6.1-0 gst_video_info_align@Base 1.0.0 gst_video_info_convert@Base 1.0.0 + gst_video_info_copy@Base 1.6.1-0 + gst_video_info_free@Base 1.6.1-0 gst_video_info_from_caps@Base 1.0.0 + gst_video_info_get_type@Base 1.6.1-0 gst_video_info_init@Base 1.0.0 gst_video_info_is_equal@Base 1.0.0 + gst_video_info_new@Base 1.6.1-0 gst_video_info_set_format@Base 1.0.0 gst_video_info_to_caps@Base 1.0.0 + gst_video_interlace_mode_from_string@Base 1.6.1-0 gst_video_interlace_mode_get_type@Base 1.0.0 + gst_video_interlace_mode_to_string@Base 1.6.1-0 + gst_video_matrix_mode_get_type@Base 1.6.1-0 gst_video_meta_api_get_type@Base 1.0.0 gst_video_meta_get_info@Base 1.0.0 gst_video_meta_map@Base 1.0.0 gst_video_meta_transform_scale_get_quark@Base 1.0.0 gst_video_meta_unmap@Base 1.0.0 + gst_video_multiview_flags_get_type@Base 1.6.1-0 + gst_video_multiview_flagset_get_type@Base 1.6.1-0 + gst_video_multiview_frame_packing_get_type@Base 1.6.1-0 + gst_video_multiview_get_doubled_height_modes@Base 1.6.1-0 + gst_video_multiview_get_doubled_size_modes@Base 1.6.1-0 + gst_video_multiview_get_doubled_width_modes@Base 1.6.1-0 + gst_video_multiview_get_mono_modes@Base 1.6.1-0 + gst_video_multiview_get_unpacked_modes@Base 1.6.1-0 + gst_video_multiview_guess_half_aspect@Base 1.6.1-0 + gst_video_multiview_mode_from_caps_string@Base 1.6.1-0 + gst_video_multiview_mode_get_type@Base 1.6.1-0 + gst_video_multiview_mode_to_caps_string@Base 1.6.1-0 + gst_video_multiview_video_info_change_mode@Base 1.6.1-0 gst_video_orientation_get_hcenter@Base 1.0.0 gst_video_orientation_get_hflip@Base 1.0.0 gst_video_orientation_get_type@Base 1.0.0 @@ -1079,11 +1165,25 @@ gst_video_overlay_set_render_rectangle@Base 1.0.0 gst_video_overlay_set_window_handle@Base 1.0.0 gst_video_pack_flags_get_type@Base 1.0.0 + gst_video_primaries_mode_get_type@Base 1.6.1-0 gst_video_region_of_interest_meta_api_get_type@Base 1.2.0 gst_video_region_of_interest_meta_get_info@Base 1.2.0 + gst_video_resampler_clear@Base 1.6.1-0 + gst_video_resampler_flags_get_type@Base 1.6.1-0 + gst_video_resampler_init@Base 1.6.1-0 + gst_video_resampler_method_get_type@Base 1.6.1-0 + gst_video_scaler_2d@Base 1.6.1-0 + gst_video_scaler_combine_packed_YUV@Base 1.6.1-0 + gst_video_scaler_flags_get_type@Base 1.6.1-0 + gst_video_scaler_free@Base 1.6.1-0 + gst_video_scaler_get_coeff@Base 1.6.1-0 + gst_video_scaler_get_max_taps@Base 1.6.1-0 + gst_video_scaler_horizontal@Base 1.6.1-0 + gst_video_scaler_new@Base 1.6.1-0 + gst_video_scaler_vertical@Base 1.6.1-0 gst_video_sink_center_rect@Base 1.0.0 gst_video_sink_get_type@Base 1.0.0 - gst_video_tile_get_index@Base 1.4.0 - gst_video_tile_mode_get_type@Base 1.4.0 - gst_video_tile_type_get_type@Base 1.4.0 + gst_video_tile_get_index@Base 1.6.1-0 + gst_video_tile_mode_get_type@Base 1.6.1-0 + gst_video_tile_type_get_type@Base 1.6.1-0 gst_video_transfer_function_get_type@Base 1.0.0 diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/0001-riff-Add-input-buffer-size-to-GstCaps.patch gst-plugins-base1.0-1.6.1/debian/patches/0001-riff-Add-input-buffer-size-to-GstCaps.patch --- gst-plugins-base1.0-1.4.3/debian/patches/0001-riff-Add-input-buffer-size-to-GstCaps.patch 2014-10-08 17:10:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/0001-riff-Add-input-buffer-size-to-GstCaps.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -From 736869930e1542537f52f5e011ce9cb86116ee1c Mon Sep 17 00:00:00 2001 -From: Alfonso Sanchez-Beato -Date: Mon, 29 Sep 2014 17:01:01 +0200 -Subject: [PATCH] riff: Add input buffer size to GstCaps - -Add dwSuggestedBufferSize AVI header field to the capabilities -structure, so it is available for the decoder. - -Bug-Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=737599 - ---- - gst-libs/gst/riff/riff-media.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c -index e4d877e..a86401e 100644 ---- a/gst-libs/gst/riff/riff-media.c -+++ b/gst-libs/gst/riff/riff-media.c -@@ -919,6 +919,11 @@ gst_riff_create_video_caps (guint32 codec_fcc, - if (strh != NULL) { - gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, - strh->rate, strh->scale, NULL); -+ -+ if (strh->bufsize != 0) -+ gst_caps_set_simple (caps, "max-input-size", G_TYPE_INT, -+ strh->bufsize, NULL); -+ - } else { - gst_caps_set_simple (caps, - "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL); --- -2.1.0 - diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/1 gst-plugins-base1.0-1.6.1/debian/patches/1 --- gst-plugins-base1.0-1.4.3/debian/patches/1 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/1 2015-11-01 21:23:58.000000000 +0000 @@ -0,0 +1,6302 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium + . + * sync with latest stable release + . + [ Dan Witt ] + * sync with git +Author: Dan Witt + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- gst-plugins-base1.0-1.6.1.orig/config.guess ++++ gst-plugins-base1.0-1.6.1/config.guess +@@ -1,8 +1,8 @@ + #! /bin/sh + # Attempt to guess a canonical system name. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2013 Free Software Foundation, Inc. + +-timestamp='2015-08-20' ++timestamp='2013-06-10' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -24,12 +24,12 @@ timestamp='2015-08-20' + # program. This Exception is an additional permission under section 7 + # of the GNU General Public License, version 3 ("GPLv3"). + # +-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. ++# Originally written by Per Bothner. + # + # You can get the latest version of this script from: + # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + # +-# Please send patches to . ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + + me=`echo "$0" | sed -e 's,.*/,,'` +@@ -50,7 +50,7 @@ version="\ + GNU config.guess ($timestamp) + + Originally written by Per Bothner. +-Copyright 1992-2015 Free Software Foundation, Inc. ++Copyright 1992-2013 Free Software Foundation, Inc. + + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +@@ -149,7 +149,7 @@ Linux|GNU|GNU/*) + LIBC=gnu + #endif + EOF +- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; + esac + +@@ -168,27 +168,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" +- UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ +- /sbin/$sysctl 2>/dev/null || \ +- /usr/sbin/$sysctl 2>/dev/null || \ +- echo unknown)` ++ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ ++ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; +- earmv*) +- arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` +- endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` +- machine=${arch}${endian}-unknown +- ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in +- arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) ++ arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ +@@ -204,13 +197,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ + os=netbsd + ;; + esac +- # Determine ABI tags. +- case "${UNAME_MACHINE_ARCH}" in +- earm*) +- expr='s/^earmv[0-9]/-eabi/;s/eb$//' +- abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` +- ;; +- esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need +@@ -221,13 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ + release='-gnu' + ;; + *) +- release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ++ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. +- echo "${machine}-${os}${release}${abi}" ++ echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` +@@ -249,9 +235,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; +- *:Sortix:*:*) +- echo ${UNAME_MACHINE}-unknown-sortix +- exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) +@@ -596,9 +579,8 @@ EOF + else + IBM_ARCH=powerpc + fi +- if [ -x /usr/bin/lslpp ] ; then +- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | +- awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` ++ if [ -x /usr/bin/oslevel ] ; then ++ IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi +@@ -844,7 +826,7 @@ EOF + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; +- *:MSYS*:*) ++ i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) +@@ -950,9 +932,6 @@ EOF + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; +- e2k:Linux:*:*) +- echo ${UNAME_MACHINE}-unknown-linux-${LIBC} +- exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; +@@ -990,10 +969,10 @@ EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; +- openrisc*:Linux:*:*) +- echo or1k-unknown-linux-${LIBC} ++ or1k:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; +- or32:Linux:*:* | or1k*:Linux:*:*) ++ or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) +@@ -1041,7 +1020,7 @@ EOF + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) +- echo ${UNAME_MACHINE}-pc-linux-${LIBC} ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} +@@ -1281,26 +1260,16 @@ EOF + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi +- if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then +- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then +- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ +- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ +- grep IS_64BIT_ARCH >/dev/null +- then +- case $UNAME_PROCESSOR in +- i386) UNAME_PROCESSOR=x86_64 ;; +- powerpc) UNAME_PROCESSOR=powerpc64 ;; +- esac +- fi ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ case $UNAME_PROCESSOR in ++ i386) UNAME_PROCESSOR=x86_64 ;; ++ powerpc) UNAME_PROCESSOR=powerpc64 ;; ++ esac + fi +- elif test "$UNAME_PROCESSOR" = i386 ; then +- # Avoid executing cc on OS X 10.9, as it ships with a stub +- # that puts up a graphical alert prompting to install +- # developer tools. Any system running Mac OS X 10.7 or +- # later (Darwin 11 and later) is required to have a 64-bit +- # processor. This is not true of the ARM version of Darwin +- # that Apple uses in portable devices. +- UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; +@@ -1392,6 +1361,154 @@ EOF + exit ;; + esac + ++eval $set_cc_for_build ++cat >$dummy.c < ++# include ++#endif ++main () ++{ ++#if defined (sony) ++#if defined (MIPSEB) ++ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, ++ I don't know.... */ ++ printf ("mips-sony-bsd\n"); exit (0); ++#else ++#include ++ printf ("m68k-sony-newsos%s\n", ++#ifdef NEWSOS4 ++ "4" ++#else ++ "" ++#endif ++ ); exit (0); ++#endif ++#endif ++ ++#if defined (__arm) && defined (__acorn) && defined (__unix) ++ printf ("arm-acorn-riscix\n"); exit (0); ++#endif ++ ++#if defined (hp300) && !defined (hpux) ++ printf ("m68k-hp-bsd\n"); exit (0); ++#endif ++ ++#if defined (NeXT) ++#if !defined (__ARCHITECTURE__) ++#define __ARCHITECTURE__ "m68k" ++#endif ++ int version; ++ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; ++ if (version < 4) ++ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); ++ else ++ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); ++ exit (0); ++#endif ++ ++#if defined (MULTIMAX) || defined (n16) ++#if defined (UMAXV) ++ printf ("ns32k-encore-sysv\n"); exit (0); ++#else ++#if defined (CMU) ++ printf ("ns32k-encore-mach\n"); exit (0); ++#else ++ printf ("ns32k-encore-bsd\n"); exit (0); ++#endif ++#endif ++#endif ++ ++#if defined (__386BSD__) ++ printf ("i386-pc-bsd\n"); exit (0); ++#endif ++ ++#if defined (sequent) ++#if defined (i386) ++ printf ("i386-sequent-dynix\n"); exit (0); ++#endif ++#if defined (ns32000) ++ printf ("ns32k-sequent-dynix\n"); exit (0); ++#endif ++#endif ++ ++#if defined (_SEQUENT_) ++ struct utsname un; ++ ++ uname(&un); ++ ++ if (strncmp(un.version, "V2", 2) == 0) { ++ printf ("i386-sequent-ptx2\n"); exit (0); ++ } ++ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ ++ printf ("i386-sequent-ptx1\n"); exit (0); ++ } ++ printf ("i386-sequent-ptx\n"); exit (0); ++ ++#endif ++ ++#if defined (vax) ++# if !defined (ultrix) ++# include ++# if defined (BSD) ++# if BSD == 43 ++ printf ("vax-dec-bsd4.3\n"); exit (0); ++# else ++# if BSD == 199006 ++ printf ("vax-dec-bsd4.3reno\n"); exit (0); ++# else ++ printf ("vax-dec-bsd\n"); exit (0); ++# endif ++# endif ++# else ++ printf ("vax-dec-bsd\n"); exit (0); ++# endif ++# else ++ printf ("vax-dec-ultrix\n"); exit (0); ++# endif ++#endif ++ ++#if defined (alliant) && defined (i860) ++ printf ("i860-alliant-bsd\n"); exit (0); ++#endif ++ ++ exit (1); ++} ++EOF ++ ++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } ++ ++# Apollos put the system type in the environment. ++ ++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } ++ ++# Convex versions that predate uname can use getsysinfo(1) ++ ++if [ -x /usr/convex/getsysinfo ] ++then ++ case `getsysinfo -f cpu_type` in ++ c1*) ++ echo c1-convex-bsd ++ exit ;; ++ c2*) ++ if getsysinfo -f scalar_acc ++ then echo c32-convex-bsd ++ else echo c2-convex-bsd ++ fi ++ exit ;; ++ c34*) ++ echo c34-convex-bsd ++ exit ;; ++ c38*) ++ echo c38-convex-bsd ++ exit ;; ++ c4*) ++ echo c4-convex-bsd ++ exit ;; ++ esac ++fi ++ + cat >&2 <. ++# ++# As a special exception to the GNU General Public License, if you ++# distribute this file as part of a program that contains a ++# configuration script generated by Autoconf, you may include it under ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). ++# ++# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. ++# ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD ++# ++# Please send patches to . ++ ++ ++me=`echo "$0" | sed -e 's,.*/,,'` ++ ++usage="\ ++Usage: $0 [OPTION] ++ ++Output the configuration name of the system \`$me' is run on. ++ ++Operation modes: ++ -h, --help print this help, then exit ++ -t, --time-stamp print date of last modification, then exit ++ -v, --version print version number, then exit ++ ++Report bugs and patches to ." ++ ++version="\ ++GNU config.guess ($timestamp) ++ ++Originally written by Per Bothner. ++Copyright 1992-2015 Free Software Foundation, Inc. ++ ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." ++ ++help=" ++Try \`$me --help' for more information." ++ ++# Parse command line ++while test $# -gt 0 ; do ++ case $1 in ++ --time-stamp | --time* | -t ) ++ echo "$timestamp" ; exit ;; ++ --version | -v ) ++ echo "$version" ; exit ;; ++ --help | --h* | -h ) ++ echo "$usage"; exit ;; ++ -- ) # Stop option processing ++ shift; break ;; ++ - ) # Use stdin as input. ++ break ;; ++ -* ) ++ echo "$me: invalid option $1$help" >&2 ++ exit 1 ;; ++ * ) ++ break ;; ++ esac ++done ++ ++if test $# != 0; then ++ echo "$me: too many arguments$help" >&2 ++ exit 1 ++fi ++ ++trap 'exit 1' 1 2 15 ++ ++# CC_FOR_BUILD -- compiler used by this script. Note that the use of a ++# compiler to aid in system detection is discouraged as it requires ++# temporary files to be created and, as you can see below, it is a ++# headache to deal with in a portable fashion. ++ ++# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still ++# use `HOST_CC' if defined, but it is deprecated. ++ ++# Portable tmp directory creation inspired by the Autoconf team. ++ ++set_cc_for_build=' ++trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; ++trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; ++: ${TMPDIR=/tmp} ; ++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || ++ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || ++ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || ++ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; ++dummy=$tmp/dummy ; ++tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; ++case $CC_FOR_BUILD,$HOST_CC,$CC in ++ ,,) echo "int x;" > $dummy.c ; ++ for c in cc gcc c89 c99 ; do ++ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then ++ CC_FOR_BUILD="$c"; break ; ++ fi ; ++ done ; ++ if test x"$CC_FOR_BUILD" = x ; then ++ CC_FOR_BUILD=no_compiler_found ; ++ fi ++ ;; ++ ,,*) CC_FOR_BUILD=$CC ;; ++ ,*,*) CC_FOR_BUILD=$HOST_CC ;; ++esac ; set_cc_for_build= ;' ++ ++# This is needed to find uname on a Pyramid OSx when run in the BSD universe. ++# (ghazi@noc.rutgers.edu 1994-08-24) ++if (test -f /.attbin/uname) >/dev/null 2>&1 ; then ++ PATH=$PATH:/.attbin ; export PATH ++fi ++ ++UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown ++UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown ++UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown ++UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown ++ ++case "${UNAME_SYSTEM}" in ++Linux|GNU|GNU/*) ++ # If the system lacks a compiler, then just pick glibc. ++ # We could probably try harder. ++ LIBC=gnu ++ ++ eval $set_cc_for_build ++ cat <<-EOF > $dummy.c ++ #include ++ #if defined(__UCLIBC__) ++ LIBC=uclibc ++ #elif defined(__dietlibc__) ++ LIBC=dietlibc ++ #else ++ LIBC=gnu ++ #endif ++ EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ++ ;; ++esac ++ ++# Note: order is significant - the case branches are not exclusive. ++ ++case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ++ *:NetBSD:*:*) ++ # NetBSD (nbsd) targets should (where applicable) match one or ++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, ++ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently ++ # switched to ELF, *-*-netbsd* would select the old ++ # object file format. This provides both forward ++ # compatibility and a consistent mechanism for selecting the ++ # object file format. ++ # ++ # Note: NetBSD doesn't particularly care about the vendor ++ # portion of the name. We always set it to "unknown". ++ sysctl="sysctl -n hw.machine_arch" ++ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ ++ /sbin/$sysctl 2>/dev/null || \ ++ /usr/sbin/$sysctl 2>/dev/null || \ ++ echo unknown)` ++ case "${UNAME_MACHINE_ARCH}" in ++ armeb) machine=armeb-unknown ;; ++ arm*) machine=arm-unknown ;; ++ sh3el) machine=shl-unknown ;; ++ sh3eb) machine=sh-unknown ;; ++ sh5el) machine=sh5le-unknown ;; ++ earmv*) ++ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` ++ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` ++ machine=${arch}${endian}-unknown ++ ;; ++ *) machine=${UNAME_MACHINE_ARCH}-unknown ;; ++ esac ++ # The Operating System including object format, if it has switched ++ # to ELF recently, or will in the future. ++ case "${UNAME_MACHINE_ARCH}" in ++ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) ++ eval $set_cc_for_build ++ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ELF__ ++ then ++ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). ++ # Return netbsd for either. FIX? ++ os=netbsd ++ else ++ os=netbsdelf ++ fi ++ ;; ++ *) ++ os=netbsd ++ ;; ++ esac ++ # Determine ABI tags. ++ case "${UNAME_MACHINE_ARCH}" in ++ earm*) ++ expr='s/^earmv[0-9]/-eabi/;s/eb$//' ++ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ++ ;; ++ esac ++ # The OS release ++ # Debian GNU/NetBSD machines have a different userland, and ++ # thus, need a distinct triplet. However, they do not need ++ # kernel version information, so it can be replaced with a ++ # suitable tag, in the style of linux-gnu. ++ case "${UNAME_VERSION}" in ++ Debian*) ++ release='-gnu' ++ ;; ++ *) ++ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ++ ;; ++ esac ++ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: ++ # contains redundant information, the shorter form: ++ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. ++ echo "${machine}-${os}${release}${abi}" ++ exit ;; ++ *:Bitrig:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} ++ exit ;; ++ *:OpenBSD:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} ++ exit ;; ++ *:ekkoBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} ++ exit ;; ++ *:SolidBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} ++ exit ;; ++ macppc:MirBSD:*:*) ++ echo powerpc-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; ++ *:MirBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; ++ *:Sortix:*:*) ++ echo ${UNAME_MACHINE}-unknown-sortix ++ exit ;; ++ alpha:OSF1:*:*) ++ case $UNAME_RELEASE in ++ *4.0) ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ++ ;; ++ *5.*) ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ ;; ++ esac ++ # According to Compaq, /usr/sbin/psrinfo has been available on ++ # OSF/1 and Tru64 systems produced since 1995. I hope that ++ # covers most systems running today. This code pipes the CPU ++ # types through head -n 1, so we only detect the type of CPU 0. ++ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` ++ case "$ALPHA_CPU_TYPE" in ++ "EV4 (21064)") ++ UNAME_MACHINE="alpha" ;; ++ "EV4.5 (21064)") ++ UNAME_MACHINE="alpha" ;; ++ "LCA4 (21066/21068)") ++ UNAME_MACHINE="alpha" ;; ++ "EV5 (21164)") ++ UNAME_MACHINE="alphaev5" ;; ++ "EV5.6 (21164A)") ++ UNAME_MACHINE="alphaev56" ;; ++ "EV5.6 (21164PC)") ++ UNAME_MACHINE="alphapca56" ;; ++ "EV5.7 (21164PC)") ++ UNAME_MACHINE="alphapca57" ;; ++ "EV6 (21264)") ++ UNAME_MACHINE="alphaev6" ;; ++ "EV6.7 (21264A)") ++ UNAME_MACHINE="alphaev67" ;; ++ "EV6.8CB (21264C)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.8AL (21264B)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.8CX (21264D)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.9A (21264/EV69A)") ++ UNAME_MACHINE="alphaev69" ;; ++ "EV7 (21364)") ++ UNAME_MACHINE="alphaev7" ;; ++ "EV7.9 (21364A)") ++ UNAME_MACHINE="alphaev79" ;; ++ esac ++ # A Pn.n version is a patched version. ++ # A Vn.n version is a released version. ++ # A Tn.n version is a released field test version. ++ # A Xn.n version is an unreleased experimental baselevel. ++ # 1.2 uses "1.2" for uname -r. ++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; ++ Alpha\ *:Windows_NT*:*) ++ # How do we know it's Interix rather than the generic POSIX subsystem? ++ # Should we change UNAME_MACHINE based on the output of uname instead ++ # of the specific Alpha model? ++ echo alpha-pc-interix ++ exit ;; ++ 21064:Windows_NT:50:3) ++ echo alpha-dec-winnt3.5 ++ exit ;; ++ Amiga*:UNIX_System_V:4.0:*) ++ echo m68k-unknown-sysv4 ++ exit ;; ++ *:[Aa]miga[Oo][Ss]:*:*) ++ echo ${UNAME_MACHINE}-unknown-amigaos ++ exit ;; ++ *:[Mm]orph[Oo][Ss]:*:*) ++ echo ${UNAME_MACHINE}-unknown-morphos ++ exit ;; ++ *:OS/390:*:*) ++ echo i370-ibm-openedition ++ exit ;; ++ *:z/VM:*:*) ++ echo s390-ibm-zvmoe ++ exit ;; ++ *:OS400:*:*) ++ echo powerpc-ibm-os400 ++ exit ;; ++ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) ++ echo arm-acorn-riscix${UNAME_RELEASE} ++ exit ;; ++ arm*:riscos:*:*|arm*:RISCOS:*:*) ++ echo arm-unknown-riscos ++ exit ;; ++ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) ++ echo hppa1.1-hitachi-hiuxmpp ++ exit ;; ++ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) ++ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. ++ if test "`(/bin/universe) 2>/dev/null`" = att ; then ++ echo pyramid-pyramid-sysv3 ++ else ++ echo pyramid-pyramid-bsd ++ fi ++ exit ;; ++ NILE*:*:*:dcosx) ++ echo pyramid-pyramid-svr4 ++ exit ;; ++ DRS?6000:unix:4.0:6*) ++ echo sparc-icl-nx6 ++ exit ;; ++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) ++ case `/usr/bin/uname -p` in ++ sparc) echo sparc-icl-nx7; exit ;; ++ esac ;; ++ s390x:SunOS:*:*) ++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4H:SunOS:5.*:*) ++ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) ++ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) ++ echo i386-pc-auroraux${UNAME_RELEASE} ++ exit ;; ++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) ++ eval $set_cc_for_build ++ SUN_ARCH="i386" ++ # If there is a compiler, see if it is configured for 64-bit objects. ++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. ++ # This test works for both compilers. ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ SUN_ARCH="x86_64" ++ fi ++ fi ++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:6*:*) ++ # According to config.sub, this is the proper way to canonicalize ++ # SunOS6. Hard to guess exactly what SunOS6 will be like, but ++ # it's likely to be more like Solaris than SunOS4. ++ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:*:*) ++ case "`/usr/bin/arch -k`" in ++ Series*|S4*) ++ UNAME_RELEASE=`uname -v` ++ ;; ++ esac ++ # Japanese Language versions have a version number like `4.1.3-JL'. ++ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` ++ exit ;; ++ sun3*:SunOS:*:*) ++ echo m68k-sun-sunos${UNAME_RELEASE} ++ exit ;; ++ sun*:*:4.2BSD:*) ++ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` ++ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 ++ case "`/bin/arch`" in ++ sun3) ++ echo m68k-sun-sunos${UNAME_RELEASE} ++ ;; ++ sun4) ++ echo sparc-sun-sunos${UNAME_RELEASE} ++ ;; ++ esac ++ exit ;; ++ aushp:SunOS:*:*) ++ echo sparc-auspex-sunos${UNAME_RELEASE} ++ exit ;; ++ # The situation for MiNT is a little confusing. The machine name ++ # can be virtually everything (everything which is not ++ # "atarist" or "atariste" at least should have a processor ++ # > m68000). The system name ranges from "MiNT" over "FreeMiNT" ++ # to the lowercase version "mint" (or "freemint"). Finally ++ # the system name "TOS" denotes a system which is actually not ++ # MiNT. But MiNT is downward compatible to TOS, so this should ++ # be no problem. ++ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; ++ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; ++ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; ++ m68k:machten:*:*) ++ echo m68k-apple-machten${UNAME_RELEASE} ++ exit ;; ++ powerpc:machten:*:*) ++ echo powerpc-apple-machten${UNAME_RELEASE} ++ exit ;; ++ RISC*:Mach:*:*) ++ echo mips-dec-mach_bsd4.3 ++ exit ;; ++ RISC*:ULTRIX:*:*) ++ echo mips-dec-ultrix${UNAME_RELEASE} ++ exit ;; ++ VAX*:ULTRIX*:*:*) ++ echo vax-dec-ultrix${UNAME_RELEASE} ++ exit ;; ++ 2020:CLIX:*:* | 2430:CLIX:*:*) ++ echo clipper-intergraph-clix${UNAME_RELEASE} ++ exit ;; ++ mips:*:*:UMIPS | mips:*:*:RISCos) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++#ifdef __cplusplus ++#include /* for printf() prototype */ ++ int main (int argc, char *argv[]) { ++#else ++ int main (argc, argv) int argc; char *argv[]; { ++#endif ++ #if defined (host_mips) && defined (MIPSEB) ++ #if defined (SYSTYPE_SYSV) ++ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); ++ #endif ++ #if defined (SYSTYPE_SVR4) ++ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); ++ #endif ++ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) ++ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); ++ #endif ++ #endif ++ exit (-1); ++ } ++EOF ++ $CC_FOR_BUILD -o $dummy $dummy.c && ++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && ++ SYSTEM_NAME=`$dummy $dummyarg` && ++ { echo "$SYSTEM_NAME"; exit; } ++ echo mips-mips-riscos${UNAME_RELEASE} ++ exit ;; ++ Motorola:PowerMAX_OS:*:*) ++ echo powerpc-motorola-powermax ++ exit ;; ++ Motorola:*:4.3:PL8-*) ++ echo powerpc-harris-powermax ++ exit ;; ++ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) ++ echo powerpc-harris-powermax ++ exit ;; ++ Night_Hawk:Power_UNIX:*:*) ++ echo powerpc-harris-powerunix ++ exit ;; ++ m88k:CX/UX:7*:*) ++ echo m88k-harris-cxux7 ++ exit ;; ++ m88k:*:4*:R4*) ++ echo m88k-motorola-sysv4 ++ exit ;; ++ m88k:*:3*:R3*) ++ echo m88k-motorola-sysv3 ++ exit ;; ++ AViiON:dgux:*:*) ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] ++ then ++ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ ++ [ ${TARGET_BINARY_INTERFACE}x = x ] ++ then ++ echo m88k-dg-dgux${UNAME_RELEASE} ++ else ++ echo m88k-dg-dguxbcs${UNAME_RELEASE} ++ fi ++ else ++ echo i586-dg-dgux${UNAME_RELEASE} ++ fi ++ exit ;; ++ M88*:DolphinOS:*:*) # DolphinOS (SVR3) ++ echo m88k-dolphin-sysv3 ++ exit ;; ++ M88*:*:R3*:*) ++ # Delta 88k system running SVR3 ++ echo m88k-motorola-sysv3 ++ exit ;; ++ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) ++ echo m88k-tektronix-sysv3 ++ exit ;; ++ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) ++ echo m68k-tektronix-bsd ++ exit ;; ++ *:IRIX*:*:*) ++ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` ++ exit ;; ++ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. ++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id ++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ++ i*86:AIX:*:*) ++ echo i386-ibm-aix ++ exit ;; ++ ia64:AIX:*:*) ++ if [ -x /usr/bin/oslevel ] ; then ++ IBM_REV=`/usr/bin/oslevel` ++ else ++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} ++ fi ++ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} ++ exit ;; ++ *:AIX:2:3) ++ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #include ++ ++ main() ++ { ++ if (!__power_pc()) ++ exit(1); ++ puts("powerpc-ibm-aix3.2.5"); ++ exit(0); ++ } ++EOF ++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` ++ then ++ echo "$SYSTEM_NAME" ++ else ++ echo rs6000-ibm-aix3.2.5 ++ fi ++ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then ++ echo rs6000-ibm-aix3.2.4 ++ else ++ echo rs6000-ibm-aix3.2 ++ fi ++ exit ;; ++ *:AIX:*:[4567]) ++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` ++ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then ++ IBM_ARCH=rs6000 ++ else ++ IBM_ARCH=powerpc ++ fi ++ if [ -x /usr/bin/lslpp ] ; then ++ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | ++ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` ++ else ++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} ++ fi ++ echo ${IBM_ARCH}-ibm-aix${IBM_REV} ++ exit ;; ++ *:AIX:*:*) ++ echo rs6000-ibm-aix ++ exit ;; ++ ibmrt:4.4BSD:*|romp-ibm:BSD:*) ++ echo romp-ibm-bsd4.4 ++ exit ;; ++ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and ++ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to ++ exit ;; # report: romp-ibm BSD 4.3 ++ *:BOSX:*:*) ++ echo rs6000-bull-bosx ++ exit ;; ++ DPX/2?00:B.O.S.:*:*) ++ echo m68k-bull-sysv3 ++ exit ;; ++ 9000/[34]??:4.3bsd:1.*:*) ++ echo m68k-hp-bsd ++ exit ;; ++ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) ++ echo m68k-hp-bsd4.4 ++ exit ;; ++ 9000/[34678]??:HP-UX:*:*) ++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` ++ case "${UNAME_MACHINE}" in ++ 9000/31? ) HP_ARCH=m68000 ;; ++ 9000/[34]?? ) HP_ARCH=m68k ;; ++ 9000/[678][0-9][0-9]) ++ if [ -x /usr/bin/getconf ]; then ++ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; ++ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 ++ esac ;; ++ esac ++ fi ++ if [ "${HP_ARCH}" = "" ]; then ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ ++ #define _HPUX_SOURCE ++ #include ++ #include ++ ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); ++ ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } ++EOF ++ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` ++ test -z "$HP_ARCH" && HP_ARCH=hppa ++ fi ;; ++ esac ++ if [ ${HP_ARCH} = "hppa2.0w" ] ++ then ++ eval $set_cc_for_build ++ ++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating ++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler ++ # generating 64-bit code. GNU and HP use different nomenclature: ++ # ++ # $ CC_FOR_BUILD=cc ./config.guess ++ # => hppa2.0w-hp-hpux11.23 ++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess ++ # => hppa64-hp-hpux11.23 ++ ++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | ++ grep -q __LP64__ ++ then ++ HP_ARCH="hppa2.0w" ++ else ++ HP_ARCH="hppa64" ++ fi ++ fi ++ echo ${HP_ARCH}-hp-hpux${HPUX_REV} ++ exit ;; ++ ia64:HP-UX:*:*) ++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` ++ echo ia64-hp-hpux${HPUX_REV} ++ exit ;; ++ 3050*:HI-UX:*:*) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #include ++ int ++ main () ++ { ++ long cpu = sysconf (_SC_CPU_VERSION); ++ /* The order matters, because CPU_IS_HP_MC68K erroneously returns ++ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct ++ results, however. */ ++ if (CPU_IS_PA_RISC (cpu)) ++ { ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; ++ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; ++ default: puts ("hppa-hitachi-hiuxwe2"); break; ++ } ++ } ++ else if (CPU_IS_HP_MC68K (cpu)) ++ puts ("m68k-hitachi-hiuxwe2"); ++ else puts ("unknown-hitachi-hiuxwe2"); ++ exit (0); ++ } ++EOF ++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } ++ echo unknown-hitachi-hiuxwe2 ++ exit ;; ++ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) ++ echo hppa1.1-hp-bsd ++ exit ;; ++ 9000/8??:4.3bsd:*:*) ++ echo hppa1.0-hp-bsd ++ exit ;; ++ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) ++ echo hppa1.0-hp-mpeix ++ exit ;; ++ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) ++ echo hppa1.1-hp-osf ++ exit ;; ++ hp8??:OSF1:*:*) ++ echo hppa1.0-hp-osf ++ exit ;; ++ i*86:OSF1:*:*) ++ if [ -x /usr/sbin/sysversion ] ; then ++ echo ${UNAME_MACHINE}-unknown-osf1mk ++ else ++ echo ${UNAME_MACHINE}-unknown-osf1 ++ fi ++ exit ;; ++ parisc*:Lites*:*:*) ++ echo hppa1.1-hp-lites ++ exit ;; ++ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) ++ echo c1-convex-bsd ++ exit ;; ++ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) ++ if getsysinfo -f scalar_acc ++ then echo c32-convex-bsd ++ else echo c2-convex-bsd ++ fi ++ exit ;; ++ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) ++ echo c34-convex-bsd ++ exit ;; ++ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) ++ echo c38-convex-bsd ++ exit ;; ++ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) ++ echo c4-convex-bsd ++ exit ;; ++ CRAY*Y-MP:*:*:*) ++ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*[A-Z]90:*:*:*) ++ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ ++ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ ++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ ++ -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*TS:*:*:*) ++ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*T3E:*:*:*) ++ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*SV1:*:*:*) ++ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ *:UNICOS/mp:*:*) ++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) ++ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; ++ 5000:UNIX_System_V:4.*:*) ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; ++ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) ++ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} ++ exit ;; ++ sparc*:BSD/OS:*:*) ++ echo sparc-unknown-bsdi${UNAME_RELEASE} ++ exit ;; ++ *:BSD/OS:*:*) ++ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} ++ exit ;; ++ *:FreeBSD:*:*) ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in ++ amd64) ++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ *) ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ esac ++ exit ;; ++ i*:CYGWIN*:*) ++ echo ${UNAME_MACHINE}-pc-cygwin ++ exit ;; ++ *:MINGW64*:*) ++ echo ${UNAME_MACHINE}-pc-mingw64 ++ exit ;; ++ *:MINGW*:*) ++ echo ${UNAME_MACHINE}-pc-mingw32 ++ exit ;; ++ *:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; ++ i*:windows32*:*) ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 ++ exit ;; ++ i*:PW*:*) ++ echo ${UNAME_MACHINE}-pc-pw32 ++ exit ;; ++ *:Interix*:*) ++ case ${UNAME_MACHINE} in ++ x86) ++ echo i586-pc-interix${UNAME_RELEASE} ++ exit ;; ++ authenticamd | genuineintel | EM64T) ++ echo x86_64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ IA64) ++ echo ia64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ esac ;; ++ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) ++ echo i${UNAME_MACHINE}-pc-mks ++ exit ;; ++ 8664:Windows_NT:*) ++ echo x86_64-pc-mks ++ exit ;; ++ i*:Windows_NT*:* | Pentium*:Windows_NT*:*) ++ # How do we know it's Interix rather than the generic POSIX subsystem? ++ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we ++ # UNAME_MACHINE based on the output of uname instead of i386? ++ echo i586-pc-interix ++ exit ;; ++ i*:UWIN*:*) ++ echo ${UNAME_MACHINE}-pc-uwin ++ exit ;; ++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) ++ echo x86_64-unknown-cygwin ++ exit ;; ++ p*:CYGWIN*:*) ++ echo powerpcle-unknown-cygwin ++ exit ;; ++ prep*:SunOS:5.*:*) ++ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ *:GNU:*:*) ++ # the GNU system ++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` ++ exit ;; ++ *:GNU/*:*:*) ++ # other systems with GNU libc and userland ++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} ++ exit ;; ++ i*86:Minix:*:*) ++ echo ${UNAME_MACHINE}-pc-minix ++ exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ alpha:Linux:*:*) ++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ++ EV5) UNAME_MACHINE=alphaev5 ;; ++ EV56) UNAME_MACHINE=alphaev56 ;; ++ PCA56) UNAME_MACHINE=alphapca56 ;; ++ PCA57) UNAME_MACHINE=alphapca56 ;; ++ EV6) UNAME_MACHINE=alphaev6 ;; ++ EV67) UNAME_MACHINE=alphaev67 ;; ++ EV68*) UNAME_MACHINE=alphaev68 ;; ++ esac ++ objdump --private-headers /bin/sh | grep -q ld.so.1 ++ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ arc:Linux:*:* | arceb:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ arm*:Linux:*:*) ++ eval $set_cc_for_build ++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_EABI__ ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ else ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf ++ fi ++ fi ++ exit ;; ++ avr32*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ cris:Linux:*:*) ++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} ++ exit ;; ++ crisv32:Linux:*:*) ++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} ++ exit ;; ++ e2k:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ frv:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ hexagon:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ i*86:Linux:*:*) ++ echo ${UNAME_MACHINE}-pc-linux-${LIBC} ++ exit ;; ++ ia64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ m32r*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ m68*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ mips:Linux:*:* | mips64:Linux:*:*) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #undef CPU ++ #undef ${UNAME_MACHINE} ++ #undef ${UNAME_MACHINE}el ++ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) ++ CPU=${UNAME_MACHINE}el ++ #else ++ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) ++ CPU=${UNAME_MACHINE} ++ #else ++ CPU= ++ #endif ++ #endif ++EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` ++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ++ ;; ++ openrisc*:Linux:*:*) ++ echo or1k-unknown-linux-${LIBC} ++ exit ;; ++ or32:Linux:*:* | or1k*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ padre:Linux:*:*) ++ echo sparc-unknown-linux-${LIBC} ++ exit ;; ++ parisc64:Linux:*:* | hppa64:Linux:*:*) ++ echo hppa64-unknown-linux-${LIBC} ++ exit ;; ++ parisc:Linux:*:* | hppa:Linux:*:*) ++ # Look for CPU level ++ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in ++ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; ++ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; ++ *) echo hppa-unknown-linux-${LIBC} ;; ++ esac ++ exit ;; ++ ppc64:Linux:*:*) ++ echo powerpc64-unknown-linux-${LIBC} ++ exit ;; ++ ppc:Linux:*:*) ++ echo powerpc-unknown-linux-${LIBC} ++ exit ;; ++ ppc64le:Linux:*:*) ++ echo powerpc64le-unknown-linux-${LIBC} ++ exit ;; ++ ppcle:Linux:*:*) ++ echo powerpcle-unknown-linux-${LIBC} ++ exit ;; ++ s390:Linux:*:* | s390x:Linux:*:*) ++ echo ${UNAME_MACHINE}-ibm-linux-${LIBC} ++ exit ;; ++ sh64*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ sh*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ sparc:Linux:*:* | sparc64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ vax:Linux:*:*) ++ echo ${UNAME_MACHINE}-dec-linux-${LIBC} ++ exit ;; ++ x86_64:Linux:*:*) ++ echo ${UNAME_MACHINE}-pc-linux-${LIBC} ++ exit ;; ++ xtensa*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} ++ exit ;; ++ i*86:DYNIX/ptx:4*:*) ++ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. ++ # earlier versions are messed up and put the nodename in both ++ # sysname and nodename. ++ echo i386-sequent-sysv4 ++ exit ;; ++ i*86:UNIX_SV:4.2MP:2.*) ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, ++ # I just have to hope. -- rms. ++ # Use sysv4.2uw... so that sysv4* matches it. ++ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} ++ exit ;; ++ i*86:OS/2:*:*) ++ # If we were able to find `uname', then EMX Unix compatibility ++ # is probably installed. ++ echo ${UNAME_MACHINE}-pc-os2-emx ++ exit ;; ++ i*86:XTS-300:*:STOP) ++ echo ${UNAME_MACHINE}-unknown-stop ++ exit ;; ++ i*86:atheos:*:*) ++ echo ${UNAME_MACHINE}-unknown-atheos ++ exit ;; ++ i*86:syllable:*:*) ++ echo ${UNAME_MACHINE}-pc-syllable ++ exit ;; ++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) ++ echo i386-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ i*86:*DOS:*:*) ++ echo ${UNAME_MACHINE}-pc-msdosdjgpp ++ exit ;; ++ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) ++ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` ++ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then ++ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} ++ else ++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} ++ fi ++ exit ;; ++ i*86:*:5:[678]*) ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. ++ case `/bin/uname -X | grep "^Machine"` in ++ *486*) UNAME_MACHINE=i486 ;; ++ *Pentium) UNAME_MACHINE=i586 ;; ++ *Pent*|*Celeron) UNAME_MACHINE=i686 ;; ++ esac ++ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ++ exit ;; ++ i*86:*:3.2:*) ++ if test -f /usr/options/cb.name; then ++ UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then ++ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` ++ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 ++ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ ++ && UNAME_MACHINE=i586 ++ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ ++ && UNAME_MACHINE=i686 ++ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ ++ && UNAME_MACHINE=i686 ++ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL ++ else ++ echo ${UNAME_MACHINE}-pc-sysv32 ++ fi ++ exit ;; ++ pc:*:*:*) ++ # Left here for compatibility: ++ # uname -m prints for DJGPP always 'pc', but it prints nothing about ++ # the processor, so we play safe by assuming i586. ++ # Note: whatever this is, it MUST be the same as what config.sub ++ # prints for the "djgpp" host, or else GDB configury will decide that ++ # this is a cross-build. ++ echo i586-pc-msdosdjgpp ++ exit ;; ++ Intel:Mach:3*:*) ++ echo i386-pc-mach3 ++ exit ;; ++ paragon:*:*:*) ++ echo i860-intel-osf1 ++ exit ;; ++ i860:*:4.*:*) # i860-SVR4 ++ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then ++ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 ++ else # Add other i860-SVR4 vendors below as they are discovered. ++ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 ++ fi ++ exit ;; ++ mini*:CTIX:SYS*5:*) ++ # "miniframe" ++ echo m68010-convergent-sysv ++ exit ;; ++ mc68k:UNIX:SYSTEM5:3.51m) ++ echo m68k-convergent-sysv ++ exit ;; ++ M680?0:D-NIX:5.3:*) ++ echo m68k-diab-dnix ++ exit ;; ++ M68*:*:R3V[5678]*:*) ++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; ++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) ++ OS_REL='' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; ++ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; ++ NCR*:*:4.2:* | MPRAS*:*:4.2:*) ++ OS_REL='.3' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; ++ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) ++ echo m68k-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ mc68030:UNIX_System_V:4.*:*) ++ echo m68k-atari-sysv4 ++ exit ;; ++ TSUNAMI:LynxOS:2.*:*) ++ echo sparc-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ rs6000:LynxOS:2.*:*) ++ echo rs6000-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) ++ echo powerpc-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ SM[BE]S:UNIX_SV:*:*) ++ echo mips-dde-sysv${UNAME_RELEASE} ++ exit ;; ++ RM*:ReliantUNIX-*:*:*) ++ echo mips-sni-sysv4 ++ exit ;; ++ RM*:SINIX-*:*:*) ++ echo mips-sni-sysv4 ++ exit ;; ++ *:SINIX-*:*:*) ++ if uname -p 2>/dev/null >/dev/null ; then ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ echo ${UNAME_MACHINE}-sni-sysv4 ++ else ++ echo ns32k-sni-sysv ++ fi ++ exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says ++ echo i586-unisys-sysv4 ++ exit ;; ++ *:UNIX_System_V:4*:FTX*) ++ # From Gerald Hewes . ++ # How about differentiating between stratus architectures? -djm ++ echo hppa1.1-stratus-sysv4 ++ exit ;; ++ *:*:*:FTX*) ++ # From seanf@swdc.stratus.com. ++ echo i860-stratus-sysv4 ++ exit ;; ++ i*86:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo ${UNAME_MACHINE}-stratus-vos ++ exit ;; ++ *:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo hppa1.1-stratus-vos ++ exit ;; ++ mc68*:A/UX:*:*) ++ echo m68k-apple-aux${UNAME_RELEASE} ++ exit ;; ++ news*:NEWS-OS:6*:*) ++ echo mips-sony-newsos6 ++ exit ;; ++ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) ++ if [ -d /usr/nec ]; then ++ echo mips-nec-sysv${UNAME_RELEASE} ++ else ++ echo mips-unknown-sysv${UNAME_RELEASE} ++ fi ++ exit ;; ++ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. ++ echo powerpc-be-beos ++ exit ;; ++ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. ++ echo powerpc-apple-beos ++ exit ;; ++ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. ++ echo i586-pc-beos ++ exit ;; ++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. ++ echo i586-pc-haiku ++ exit ;; ++ x86_64:Haiku:*:*) ++ echo x86_64-unknown-haiku ++ exit ;; ++ SX-4:SUPER-UX:*:*) ++ echo sx4-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-5:SUPER-UX:*:*) ++ echo sx5-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-6:SUPER-UX:*:*) ++ echo sx6-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-7:SUPER-UX:*:*) ++ echo sx7-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8:SUPER-UX:*:*) ++ echo sx8-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8R:SUPER-UX:*:*) ++ echo sx8r-nec-superux${UNAME_RELEASE} ++ exit ;; ++ Power*:Rhapsody:*:*) ++ echo powerpc-apple-rhapsody${UNAME_RELEASE} ++ exit ;; ++ *:Rhapsody:*:*) ++ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} ++ exit ;; ++ *:Darwin:*:*) ++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown ++ eval $set_cc_for_build ++ if test "$UNAME_PROCESSOR" = unknown ; then ++ UNAME_PROCESSOR=powerpc ++ fi ++ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ case $UNAME_PROCESSOR in ++ i386) UNAME_PROCESSOR=x86_64 ;; ++ powerpc) UNAME_PROCESSOR=powerpc64 ;; ++ esac ++ fi ++ fi ++ elif test "$UNAME_PROCESSOR" = i386 ; then ++ # Avoid executing cc on OS X 10.9, as it ships with a stub ++ # that puts up a graphical alert prompting to install ++ # developer tools. Any system running Mac OS X 10.7 or ++ # later (Darwin 11 and later) is required to have a 64-bit ++ # processor. This is not true of the ARM version of Darwin ++ # that Apple uses in portable devices. ++ UNAME_PROCESSOR=x86_64 ++ fi ++ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} ++ exit ;; ++ *:procnto*:*:* | *:QNX:[0123456789]*:*) ++ UNAME_PROCESSOR=`uname -p` ++ if test "$UNAME_PROCESSOR" = "x86"; then ++ UNAME_PROCESSOR=i386 ++ UNAME_MACHINE=pc ++ fi ++ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} ++ exit ;; ++ *:QNX:*:4*) ++ echo i386-pc-qnx ++ exit ;; ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSE-*:NONSTOP_KERNEL:*:*) ++ echo nse-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSR-?:NONSTOP_KERNEL:*:*) ++ echo nsr-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ *:NonStop-UX:*:*) ++ echo mips-compaq-nonstopux ++ exit ;; ++ BS2000:POSIX*:*:*) ++ echo bs2000-siemens-sysv ++ exit ;; ++ DS/*:UNIX_System_V:*:*) ++ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} ++ exit ;; ++ *:Plan9:*:*) ++ # "uname -m" is not consistent, so use $cputype instead. 386 ++ # is converted to i386 for consistency with other x86 ++ # operating systems. ++ if test "$cputype" = "386"; then ++ UNAME_MACHINE=i386 ++ else ++ UNAME_MACHINE="$cputype" ++ fi ++ echo ${UNAME_MACHINE}-unknown-plan9 ++ exit ;; ++ *:TOPS-10:*:*) ++ echo pdp10-unknown-tops10 ++ exit ;; ++ *:TENEX:*:*) ++ echo pdp10-unknown-tenex ++ exit ;; ++ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) ++ echo pdp10-dec-tops20 ++ exit ;; ++ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) ++ echo pdp10-xkl-tops20 ++ exit ;; ++ *:TOPS-20:*:*) ++ echo pdp10-unknown-tops20 ++ exit ;; ++ *:ITS:*:*) ++ echo pdp10-unknown-its ++ exit ;; ++ SEI:*:*:SEIUX) ++ echo mips-sei-seiux${UNAME_RELEASE} ++ exit ;; ++ *:DragonFly:*:*) ++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ++ exit ;; ++ *:*VMS:*:*) ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ case "${UNAME_MACHINE}" in ++ A*) echo alpha-dec-vms ; exit ;; ++ I*) echo ia64-dec-vms ; exit ;; ++ V*) echo vax-dec-vms ; exit ;; ++ esac ;; ++ *:XENIX:*:SysV) ++ echo i386-pc-xenix ++ exit ;; ++ i*86:skyos:*:*) ++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' ++ exit ;; ++ i*86:rdos:*:*) ++ echo ${UNAME_MACHINE}-pc-rdos ++ exit ;; ++ i*86:AROS:*:*) ++ echo ${UNAME_MACHINE}-pc-aros ++ exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; ++esac ++ ++cat >&2 < in order to provide the needed ++information to handle your system. ++ ++config.guess timestamp = $timestamp ++ ++uname -m = `(uname -m) 2>/dev/null || echo unknown` ++uname -r = `(uname -r) 2>/dev/null || echo unknown` ++uname -s = `(uname -s) 2>/dev/null || echo unknown` ++uname -v = `(uname -v) 2>/dev/null || echo unknown` ++ ++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` ++/bin/uname -X = `(/bin/uname -X) 2>/dev/null` ++ ++hostinfo = `(hostinfo) 2>/dev/null` ++/bin/universe = `(/bin/universe) 2>/dev/null` ++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` ++/bin/arch = `(/bin/arch) 2>/dev/null` ++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` ++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` ++ ++UNAME_MACHINE = ${UNAME_MACHINE} ++UNAME_RELEASE = ${UNAME_RELEASE} ++UNAME_SYSTEM = ${UNAME_SYSTEM} ++UNAME_VERSION = ${UNAME_VERSION} ++EOF ++ ++exit 1 ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "timestamp='" ++# time-stamp-format: "%:y-%02m-%02d" ++# time-stamp-end: "'" ++# End: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/config.log +@@ -0,0 +1,2411 @@ ++This file contains any messages produced by compilers while ++running configure, to aid debugging if configure makes a mistake. ++ ++It was created by GStreamer Base Plug-ins configure 1.6.1, which was ++generated by GNU Autoconf 2.69. Invocation command line was ++ ++ $ ./configure ++ ++## --------- ## ++## Platform. ## ++## --------- ## ++ ++hostname = ubuntu ++uname -m = x86_64 ++uname -r = 3.16.0-51-generic ++uname -s = Linux ++uname -v = #69~14.04.1-Ubuntu SMP Wed Oct 7 15:32:41 UTC 2015 ++ ++/usr/bin/uname -p = unknown ++/bin/uname -X = unknown ++ ++/bin/arch = unknown ++/usr/bin/arch -k = unknown ++/usr/convex/getsysinfo = unknown ++/usr/bin/hostinfo = unknown ++/bin/machine = unknown ++/usr/bin/oslevel = unknown ++/bin/universe = unknown ++ ++PATH: /usr/local/sbin ++PATH: /usr/local/bin ++PATH: /usr/sbin ++PATH: /usr/bin ++PATH: /sbin ++PATH: /bin ++ ++ ++## ----------- ## ++## Core tests. ## ++## ----------- ## ++ ++configure:3316: checking build system type ++configure:3330: result: x86_64-unknown-linux-gnu ++configure:3350: checking host system type ++configure:3363: result: x86_64-unknown-linux-gnu ++configure:3383: checking target system type ++configure:3396: result: x86_64-unknown-linux-gnu ++configure:3442: checking for a BSD-compatible install ++configure:3510: result: /usr/bin/install -c ++configure:3521: checking whether build environment is sane ++configure:3576: result: yes ++configure:3727: checking for a thread-safe mkdir -p ++configure:3766: result: /bin/mkdir -p ++configure:3773: checking for gawk ++configure:3803: result: no ++configure:3773: checking for mawk ++configure:3789: found /usr/bin/mawk ++configure:3800: result: mawk ++configure:3811: checking whether make sets $(MAKE) ++configure:3833: result: yes ++configure:3862: checking whether make supports nested variables ++configure:3879: result: yes ++configure:3968: checking whether UID '0' is supported by ustar format ++configure:3971: result: yes ++configure:3978: checking whether GID '0' is supported by ustar format ++configure:3981: result: yes ++configure:3989: checking how to create a ustar tar archive ++configure:4000: tar --version ++tar (GNU tar) 1.27.1 ++Copyright (C) 2013 Free Software Foundation, Inc. ++License GPLv3+: GNU GPL version 3 or later . ++This is free software: you are free to change and redistribute it. ++There is NO WARRANTY, to the extent permitted by law. ++ ++Written by John Gilmore and Jay Fenlason. ++configure:4003: $? = 0 ++configure:4043: tardir=conftest.dir && eval tar --format=ustar -chf - "$tardir" >conftest.tar ++configure:4046: $? = 0 ++configure:4050: tar -xf - &5 ++gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 ++Copyright (C) 2013 Free Software Foundation, Inc. ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ ++configure:4719: $? = 0 ++configure:4708: gcc -v >&5 ++Using built-in specs. ++COLLECT_GCC=gcc ++COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper ++Target: x86_64-linux-gnu ++Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu ++Thread model: posix ++gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) ++configure:4719: $? = 0 ++configure:4708: gcc -V >&5 ++gcc: error: unrecognized command line option '-V' ++gcc: fatal error: no input files ++compilation terminated. ++configure:4719: $? = 4 ++configure:4708: gcc -qversion >&5 ++gcc: error: unrecognized command line option '-qversion' ++gcc: fatal error: no input files ++compilation terminated. ++configure:4719: $? = 4 ++configure:4739: checking whether the C compiler works ++configure:4761: gcc conftest.c >&5 ++configure:4765: $? = 0 ++configure:4813: result: yes ++configure:4816: checking for C compiler default output file name ++configure:4818: result: a.out ++configure:4824: checking for suffix of executables ++configure:4831: gcc -o conftest conftest.c >&5 ++configure:4835: $? = 0 ++configure:4857: result: ++configure:4879: checking whether we are cross compiling ++configure:4887: gcc -o conftest conftest.c >&5 ++configure:4891: $? = 0 ++configure:4898: ./conftest ++configure:4902: $? = 0 ++configure:4917: result: no ++configure:4922: checking for suffix of object files ++configure:4944: gcc -c conftest.c >&5 ++configure:4948: $? = 0 ++configure:4969: result: o ++configure:4973: checking whether we are using the GNU C compiler ++configure:4992: gcc -c conftest.c >&5 ++configure:4992: $? = 0 ++configure:5001: result: yes ++configure:5010: checking whether gcc accepts -g ++configure:5030: gcc -c -g conftest.c >&5 ++configure:5030: $? = 0 ++configure:5071: result: yes ++configure:5088: checking for gcc option to accept ISO C89 ++configure:5151: gcc -c -g -O2 conftest.c >&5 ++configure:5151: $? = 0 ++configure:5164: result: none needed ++configure:5189: checking whether gcc understands -c and -o together ++configure:5211: gcc -c conftest.c -o conftest2.o ++configure:5214: $? = 0 ++configure:5211: gcc -c conftest.c -o conftest2.o ++configure:5214: $? = 0 ++configure:5226: result: yes ++configure:5245: checking dependency style of gcc ++configure:5356: result: gcc3 ++configure:5371: checking for a sed that does not truncate output ++configure:5435: result: /bin/sed ++configure:5453: checking for grep that handles long lines and -e ++configure:5511: result: /bin/grep ++configure:5516: checking for egrep ++configure:5578: result: /bin/grep -E ++configure:5583: checking for fgrep ++configure:5645: result: /bin/grep -F ++configure:5680: checking for ld used by gcc ++configure:5747: result: /usr/bin/ld ++configure:5754: checking if the linker (/usr/bin/ld) is GNU ld ++configure:5769: result: yes ++configure:5781: checking for BSD- or MS-compatible name lister (nm) ++configure:5830: result: /usr/bin/nm -B ++configure:5960: checking the name lister (/usr/bin/nm -B) interface ++configure:5967: gcc -c -g -O2 conftest.c >&5 ++configure:5970: /usr/bin/nm -B "conftest.o" ++configure:5973: output ++0000000000000000 B some_variable ++configure:5980: result: BSD nm ++configure:5983: checking whether ln -s works ++configure:5987: result: yes ++configure:5995: checking the maximum length of command line arguments ++configure:6126: result: 1572864 ++configure:6143: checking whether the shell understands some XSI constructs ++configure:6153: result: yes ++configure:6157: checking whether the shell understands "+=" ++configure:6163: result: yes ++configure:6198: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format ++configure:6238: result: func_convert_file_noop ++configure:6245: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format ++configure:6265: result: func_convert_file_noop ++configure:6272: checking for /usr/bin/ld option to reload object files ++configure:6279: result: -r ++configure:6353: checking for objdump ++configure:6369: found /usr/bin/objdump ++configure:6380: result: objdump ++configure:6409: checking how to recognize dependent libraries ++configure:6607: result: pass_all ++configure:6692: checking for dlltool ++configure:6722: result: no ++configure:6749: checking how to associate runtime and link libraries ++configure:6776: result: printf %s\n ++configure:6837: checking for ar ++configure:6853: found /usr/bin/ar ++configure:6864: result: ar ++configure:6901: checking for archiver @FILE support ++configure:6918: gcc -c -g -O2 conftest.c >&5 ++configure:6918: $? = 0 ++configure:6921: ar cru libconftest.a @conftest.lst >&5 ++configure:6924: $? = 0 ++configure:6929: ar cru libconftest.a @conftest.lst >&5 ++ar: conftest.o: No such file or directory ++configure:6932: $? = 1 ++configure:6944: result: @ ++configure:7002: checking for strip ++configure:7018: found /usr/bin/strip ++configure:7029: result: strip ++configure:7101: checking for ranlib ++configure:7117: found /usr/bin/ranlib ++configure:7128: result: ranlib ++configure:7230: checking command to parse /usr/bin/nm -B output from gcc object ++configure:7350: gcc -c -g -O2 conftest.c >&5 ++configure:7353: $? = 0 ++configure:7357: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm ++configure:7360: $? = 0 ++configure:7426: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 ++configure:7429: $? = 0 ++configure:7467: result: ok ++configure:7504: checking for sysroot ++configure:7534: result: no ++configure:7611: gcc -c -g -O2 conftest.c >&5 ++configure:7614: $? = 0 ++configure:7803: checking for mt ++configure:7819: found /bin/mt ++configure:7830: result: mt ++configure:7853: checking if mt is a manifest tool ++configure:7859: mt '-?' ++configure:7867: result: no ++configure:8509: checking how to run the C preprocessor ++configure:8540: gcc -E conftest.c ++configure:8540: $? = 0 ++configure:8554: gcc -E conftest.c ++conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:8554: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| /* end confdefs.h. */ ++| #include ++configure:8579: result: gcc -E ++configure:8599: gcc -E conftest.c ++configure:8599: $? = 0 ++configure:8613: gcc -E conftest.c ++conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:8613: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| /* end confdefs.h. */ ++| #include ++configure:8642: checking for ANSI C header files ++configure:8662: gcc -c -g -O2 conftest.c >&5 ++configure:8662: $? = 0 ++configure:8735: gcc -o conftest -g -O2 conftest.c >&5 ++configure:8735: $? = 0 ++configure:8735: ./conftest ++configure:8735: $? = 0 ++configure:8746: result: yes ++configure:8759: checking for sys/types.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for sys/stat.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for stdlib.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for string.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for memory.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for strings.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for inttypes.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for stdint.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8759: checking for unistd.h ++configure:8759: gcc -c -g -O2 conftest.c >&5 ++configure:8759: $? = 0 ++configure:8759: result: yes ++configure:8773: checking for dlfcn.h ++configure:8773: gcc -c -g -O2 conftest.c >&5 ++configure:8773: $? = 0 ++configure:8773: result: yes ++configure:9293: checking for objdir ++configure:9308: result: .libs ++configure:9579: checking if gcc supports -fno-rtti -fno-exceptions ++configure:9597: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 ++cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default] ++configure:9601: $? = 0 ++configure:9614: result: no ++configure:9941: checking for gcc option to produce PIC ++configure:9948: result: -fPIC -DPIC ++configure:9956: checking if gcc PIC flag -fPIC -DPIC works ++configure:9974: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 ++configure:9978: $? = 0 ++configure:9991: result: yes ++configure:10020: checking if gcc static flag -static works ++configure:10048: result: yes ++configure:10063: checking if gcc supports -c -o file.o ++configure:10084: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 ++configure:10088: $? = 0 ++configure:10110: result: yes ++configure:10118: checking if gcc supports -c -o file.o ++configure:10165: result: yes ++configure:10198: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:11355: result: yes ++configure:11392: checking whether -lc should be explicitly linked in ++configure:11400: gcc -c -g -O2 conftest.c >&5 ++configure:11403: $? = 0 ++configure:11418: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 ++configure:11421: $? = 0 ++configure:11435: result: no ++configure:11595: checking dynamic linker characteristics ++configure:12095: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 ++configure:12095: $? = 0 ++configure:12329: result: GNU/Linux ld.so ++configure:12436: checking how to hardcode library paths into programs ++configure:12461: result: immediate ++configure:12555: checking for shl_load ++configure:12555: gcc -o conftest -g -O2 conftest.c >&5 ++/tmp/ccZ8Dz9W.o: In function `main': ++/root/debs/gst-plugins-base-1.6.1/conftest.c:58: undefined reference to `shl_load' ++collect2: error: ld returned 1 exit status ++configure:12555: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| /* end confdefs.h. */ ++| /* Define shl_load to an innocuous variant, in case declares shl_load. ++| For example, HP-UX 11i declares gettimeofday. */ ++| #define shl_load innocuous_shl_load ++| ++| /* System header to define __stub macros and hopefully few prototypes, ++| which can conflict with char shl_load (); below. ++| Prefer to if __STDC__ is defined, since ++| exists even on freestanding compilers. */ ++| ++| #ifdef __STDC__ ++| # include ++| #else ++| # include ++| #endif ++| ++| #undef shl_load ++| ++| /* Override any GCC internal prototype to avoid an error. ++| Use char because int might match the return type of a GCC ++| builtin and then its argument prototype would still apply. */ ++| #ifdef __cplusplus ++| extern "C" ++| #endif ++| char shl_load (); ++| /* The GNU C library defines this for functions which it implements ++| to always fail with ENOSYS. Some functions are actually named ++| something starting with __ and the normal name is an alias. */ ++| #if defined __stub_shl_load || defined __stub___shl_load ++| choke me ++| #endif ++| ++| int ++| main () ++| { ++| return shl_load (); ++| ; ++| return 0; ++| } ++configure:12555: result: no ++configure:12559: checking for shl_load in -ldld ++configure:12584: gcc -o conftest -g -O2 conftest.c -ldld >&5 ++/usr/bin/ld: cannot find -ldld ++collect2: error: ld returned 1 exit status ++configure:12584: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| /* end confdefs.h. */ ++| ++| /* Override any GCC internal prototype to avoid an error. ++| Use char because int might match the return type of a GCC ++| builtin and then its argument prototype would still apply. */ ++| #ifdef __cplusplus ++| extern "C" ++| #endif ++| char shl_load (); ++| int ++| main () ++| { ++| return shl_load (); ++| ; ++| return 0; ++| } ++configure:12593: result: no ++configure:12598: checking for dlopen ++configure:12598: gcc -o conftest -g -O2 conftest.c >&5 ++/tmp/cctxaDVX.o: In function `main': ++/root/debs/gst-plugins-base-1.6.1/conftest.c:58: undefined reference to `dlopen' ++collect2: error: ld returned 1 exit status ++configure:12598: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| /* end confdefs.h. */ ++| /* Define dlopen to an innocuous variant, in case declares dlopen. ++| For example, HP-UX 11i declares gettimeofday. */ ++| #define dlopen innocuous_dlopen ++| ++| /* System header to define __stub macros and hopefully few prototypes, ++| which can conflict with char dlopen (); below. ++| Prefer to if __STDC__ is defined, since ++| exists even on freestanding compilers. */ ++| ++| #ifdef __STDC__ ++| # include ++| #else ++| # include ++| #endif ++| ++| #undef dlopen ++| ++| /* Override any GCC internal prototype to avoid an error. ++| Use char because int might match the return type of a GCC ++| builtin and then its argument prototype would still apply. */ ++| #ifdef __cplusplus ++| extern "C" ++| #endif ++| char dlopen (); ++| /* The GNU C library defines this for functions which it implements ++| to always fail with ENOSYS. Some functions are actually named ++| something starting with __ and the normal name is an alias. */ ++| #if defined __stub_dlopen || defined __stub___dlopen ++| choke me ++| #endif ++| ++| int ++| main () ++| { ++| return dlopen (); ++| ; ++| return 0; ++| } ++configure:12598: result: no ++configure:12602: checking for dlopen in -ldl ++configure:12627: gcc -o conftest -g -O2 conftest.c -ldl >&5 ++configure:12627: $? = 0 ++configure:12636: result: yes ++configure:12755: checking whether a program can dlopen itself ++configure:12835: gcc -o conftest -g -O2 -DHAVE_DLFCN_H -Wl,--export-dynamic conftest.c -ldl >&5 ++configure:12838: $? = 0 ++configure:12856: result: yes ++configure:12861: checking whether a statically linked program can dlopen itself ++configure:12941: gcc -o conftest -g -O2 -DHAVE_DLFCN_H -Wl,--export-dynamic -static conftest.c -ldl >&5 ++/tmp/cc4CG5M6.o: In function `main': ++/root/debs/gst-plugins-base-1.6.1/configure:12920: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking ++/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie ++collect2: error: ld returned 1 exit status ++configure:12944: $? = 1 ++configure:12962: result: no ++configure:13001: checking whether stripping libraries is possible ++configure:13006: result: yes ++configure:13041: checking if libtool supports shared libraries ++configure:13043: result: yes ++configure:13046: checking whether to build shared libraries ++configure:13067: result: yes ++configure:13070: checking whether to build static libraries ++configure:13074: result: no ++configure:13186: checking whether NLS is requested ++configure:13195: result: yes ++configure:13236: checking for msgfmt ++configure: trying /usr/bin/msgfmt... ++0 translated messages. ++configure:13268: result: /usr/bin/msgfmt ++configure:13277: checking for gmsgfmt ++configure:13308: result: /usr/bin/msgfmt ++configure:13359: checking for xgettext ++configure: trying /usr/bin/xgettext... ++/usr/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C ++configure:13391: result: /usr/bin/xgettext ++configure:13437: checking for msgmerge ++configure: trying /usr/bin/msgmerge... ++configure:13468: result: /usr/bin/msgmerge ++configure:13525: checking for ld used by GCC ++configure:13589: result: /usr/bin/ld -m elf_x86_64 ++configure:13596: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld ++configure:13609: result: yes ++configure:13616: checking for shared library run path origin ++configure:13629: result: done ++configure:14130: checking for CFPreferencesCopyAppValue ++configure:14148: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 ++conftest.c:24:42: fatal error: CoreFoundation/CFPreferences.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:14148: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| /* end confdefs.h. */ ++| #include ++| int ++| main () ++| { ++| CFPreferencesCopyAppValue(NULL, NULL) ++| ; ++| return 0; ++| } ++configure:14157: result: no ++configure:14164: checking for CFLocaleCopyCurrent ++configure:14182: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 ++conftest.c:24:37: fatal error: CoreFoundation/CFLocale.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:14182: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| /* end confdefs.h. */ ++| #include ++| int ++| main () ++| { ++| CFLocaleCopyCurrent(); ++| ; ++| return 0; ++| } ++configure:14191: result: no ++configure:14240: checking for GNU gettext in libc ++configure:14260: gcc -o conftest -g -O2 conftest.c >&5 ++configure:14260: $? = 0 ++configure:14269: result: yes ++configure:15015: checking whether to use NLS ++configure:15017: result: yes ++configure:15020: checking where the gettext function comes from ++configure:15031: result: libc ++configure:15242: checking for pkg-config ++configure:15260: found /usr/bin/pkg-config ++configure:15272: result: /usr/bin/pkg-config ++configure:15297: checking pkg-config is at least version 0.9.0 ++configure:15300: result: yes ++configure:15326: checking for VALGRIND ++configure:15334: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" ++Package valgrind was not found in the pkg-config search path. ++Perhaps you should add the directory containing `valgrind.pc' ++to the PKG_CONFIG_PATH environment variable ++No package 'valgrind' found ++configure:15337: $? = 1 ++configure:15352: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" ++Package valgrind was not found in the pkg-config search path. ++Perhaps you should add the directory containing `valgrind.pc' ++to the PKG_CONFIG_PATH environment variable ++No package 'valgrind' found ++configure:15355: $? = 1 ++No package 'valgrind' found ++configure:15383: result: no ++configure:15596: Using GStreamer Base Plug-ins source release as package name ++configure:15620: Using Unknown package origin as package origin ++configure:15636: Using GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig ++configure:15684: Using /usr/local/libexec/gst-install-plugins-helper as plugin install helper ++configure:15714: *** checking feature: building of plug-ins with external deps *** ++configure:15775: building external plug-ins ++configure:15818: *** checking feature: building of experimental plug-ins *** ++configure:15895: not building experimental plug-ins ++configure:16142: checking whether byte ordering is bigendian ++configure:16157: gcc -c -g -O2 conftest.c >&5 ++conftest.c:35:9: error: unknown type name 'not' ++ not a universal capable compiler ++ ^ ++conftest.c:35:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' ++ not a universal capable compiler ++ ^ ++conftest.c:35:15: error: unknown type name 'universal' ++configure:16157: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| /* end confdefs.h. */ ++| #ifndef __APPLE_CC__ ++| not a universal capable compiler ++| #endif ++| typedef int dummy; ++| ++configure:16202: gcc -c -g -O2 conftest.c >&5 ++configure:16202: $? = 0 ++configure:16220: gcc -c -g -O2 conftest.c >&5 ++conftest.c: In function 'main': ++conftest.c:41:4: error: unknown type name 'not' ++ not big endian ++ ^ ++conftest.c:41:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' ++ not big endian ++ ^ ++configure:16220: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| /* end confdefs.h. */ ++| #include ++| #include ++| ++| int ++| main () ++| { ++| #if BYTE_ORDER != BIG_ENDIAN ++| not big endian ++| #endif ++| ++| ; ++| return 0; ++| } ++configure:16348: result: no ++configure:16507: checking for special C compiler options needed for large files ++configure:16552: result: no ++configure:16558: checking for _FILE_OFFSET_BITS value needed for large files ++configure:16583: gcc -c -g -O2 conftest.c >&5 ++configure:16583: $? = 0 ++configure:16615: result: no ++configure:16750: checking for gcc ++configure:16777: result: gcc ++configure:17006: checking for C compiler version ++configure:17015: gcc --version >&5 ++gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 ++Copyright (C) 2013 Free Software Foundation, Inc. ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ ++configure:17026: $? = 0 ++configure:17015: gcc -v >&5 ++Using built-in specs. ++COLLECT_GCC=gcc ++COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper ++Target: x86_64-linux-gnu ++Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu ++Thread model: posix ++gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) ++configure:17026: $? = 0 ++configure:17015: gcc -V >&5 ++gcc: error: unrecognized command line option '-V' ++gcc: fatal error: no input files ++compilation terminated. ++configure:17026: $? = 4 ++configure:17015: gcc -qversion >&5 ++gcc: error: unrecognized command line option '-qversion' ++gcc: fatal error: no input files ++compilation terminated. ++configure:17026: $? = 4 ++configure:17030: checking whether we are using the GNU C compiler ++configure:17058: result: yes ++configure:17067: checking whether gcc accepts -g ++configure:17128: result: yes ++configure:17145: checking for gcc option to accept ISO C89 ++configure:17221: result: none needed ++configure:17246: checking whether gcc understands -c and -o together ++configure:17283: result: yes ++configure:17302: checking dependency style of gcc ++configure:17413: result: gcc3 ++configure:17432: checking for gcc option to accept ISO C99 ++configure:17581: gcc -c -g -O2 conftest.c >&5 ++conftest.c:86:29: error: expected ';', ',' or ')' before 'text' ++ test_restrict (ccp restrict text) ++ ^ ++conftest.c: In function 'main': ++conftest.c:140:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' ++ char *restrict newvar = "Another string"; ++ ^ ++conftest.c:140:18: error: 'newvar' undeclared (first use in this function) ++conftest.c:140:18: note: each undeclared identifier is reported only once for each function it appears in ++conftest.c:150:3: error: 'for' loop initial declarations are only allowed in C99 mode ++ for (int i = 0; i < ia->datasize; ++i) ++ ^ ++conftest.c:150:3: note: use option -std=c99 or -std=gnu99 to compile your code ++configure:17581: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| /* end confdefs.h. */ ++| #include ++| #include ++| #include ++| #include ++| #include ++| ++| // Check varargs macros. These examples are taken from C99 6.10.3.5. ++| #define debug(...) fprintf (stderr, __VA_ARGS__) ++| #define showlist(...) puts (#__VA_ARGS__) ++| #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) ++| static void ++| test_varargs_macros (void) ++| { ++| int x = 1234; ++| int y = 5678; ++| debug ("Flag"); ++| debug ("X = %d\n", x); ++| showlist (The first, second, and third items.); ++| report (x>y, "x is %d but y is %d", x, y); ++| } ++| ++| // Check long long types. ++| #define BIG64 18446744073709551615ull ++| #define BIG32 4294967295ul ++| #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) ++| #if !BIG_OK ++| your preprocessor is broken; ++| #endif ++| #if BIG_OK ++| #else ++| your preprocessor is broken; ++| #endif ++| static long long int bignum = -9223372036854775807LL; ++| static unsigned long long int ubignum = BIG64; ++| ++| struct incomplete_array ++| { ++| int datasize; ++| double data[]; ++| }; ++| ++| struct named_init { ++| int number; ++| const wchar_t *name; ++| double average; ++| }; ++| ++| typedef const char *ccp; ++| ++| static inline int ++| test_restrict (ccp restrict text) ++| { ++| // See if C++-style comments work. ++| // Iterate through items via the restricted pointer. ++| // Also check for declarations in for loops. ++| for (unsigned int i = 0; *(text+i) != '\0'; ++i) ++| continue; ++| return 0; ++| } ++| ++| // Check varargs and va_copy. ++| static void ++| test_varargs (const char *format, ...) ++| { ++| va_list args; ++| va_start (args, format); ++| va_list args_copy; ++| va_copy (args_copy, args); ++| ++| const char *str; ++| int number; ++| float fnumber; ++| ++| while (*format) ++| { ++| switch (*format++) ++| { ++| case 's': // string ++| str = va_arg (args_copy, const char *); ++| break; ++| case 'd': // int ++| number = va_arg (args_copy, int); ++| break; ++| case 'f': // float ++| fnumber = va_arg (args_copy, double); ++| break; ++| default: ++| break; ++| } ++| } ++| va_end (args_copy); ++| va_end (args); ++| } ++| ++| int ++| main () ++| { ++| ++| // Check bool. ++| _Bool success = false; ++| ++| // Check restrict. ++| if (test_restrict ("String literal") == 0) ++| success = true; ++| char *restrict newvar = "Another string"; ++| ++| // Check varargs. ++| test_varargs ("s, d' f .", "string", 65, 34.234); ++| test_varargs_macros (); ++| ++| // Check flexible array members. ++| struct incomplete_array *ia = ++| malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ++| ia->datasize = 10; ++| for (int i = 0; i < ia->datasize; ++i) ++| ia->data[i] = i * 1.234; ++| ++| // Check named initializers. ++| struct named_init ni = { ++| .number = 34, ++| .name = L"Test wide string", ++| .average = 543.34343, ++| }; ++| ++| ni.number = 58; ++| ++| int dynamic_array[ni.number]; ++| dynamic_array[ni.number - 1] = 543; ++| ++| // work around unused variable warnings ++| return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' ++| || dynamic_array[ni.number - 1] != 543); ++| ++| ; ++| return 0; ++| } ++configure:17581: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:17581: $? = 0 ++configure:17601: result: -std=gnu99 ++configure:17702: checking for gcc -std=gnu99 option to accept ISO Standard C ++configure:17716: result: -std=gnu99 ++configure:17781: checking for g++ ++configure:17797: found /usr/bin/g++ ++configure:17808: result: g++ ++configure:17835: checking for C++ compiler version ++configure:17844: g++ --version >&5 ++g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 ++Copyright (C) 2013 Free Software Foundation, Inc. ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ ++configure:17855: $? = 0 ++configure:17844: g++ -v >&5 ++Using built-in specs. ++COLLECT_GCC=g++ ++COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper ++Target: x86_64-linux-gnu ++Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu ++Thread model: posix ++gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) ++configure:17855: $? = 0 ++configure:17844: g++ -V >&5 ++g++: error: unrecognized command line option '-V' ++g++: fatal error: no input files ++compilation terminated. ++configure:17855: $? = 4 ++configure:17844: g++ -qversion >&5 ++g++: error: unrecognized command line option '-qversion' ++g++: fatal error: no input files ++compilation terminated. ++configure:17855: $? = 4 ++configure:17859: checking whether we are using the GNU C++ compiler ++configure:17878: g++ -c conftest.cpp >&5 ++configure:17878: $? = 0 ++configure:17887: result: yes ++configure:17896: checking whether g++ accepts -g ++configure:17916: g++ -c -g conftest.cpp >&5 ++configure:17916: $? = 0 ++configure:17957: result: yes ++configure:17982: checking dependency style of g++ ++configure:18093: result: gcc3 ++configure:18126: checking how to run the C++ preprocessor ++configure:18153: g++ -E conftest.cpp ++configure:18153: $? = 0 ++configure:18167: g++ -E conftest.cpp ++conftest.cpp:36:28: fatal error: ac_nonexistent.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:18167: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| /* end confdefs.h. */ ++| #include ++configure:18192: result: g++ -E ++configure:18212: g++ -E conftest.cpp ++configure:18212: $? = 0 ++configure:18226: g++ -E conftest.cpp ++conftest.cpp:36:28: fatal error: ac_nonexistent.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:18226: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| /* end confdefs.h. */ ++| #include ++configure:18395: checking for ld used by g++ ++configure:18462: result: /usr/bin/ld -m elf_x86_64 ++configure:18469: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld ++configure:18484: result: yes ++configure:18539: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:19541: result: yes ++configure:19577: g++ -c conftest.cpp >&5 ++configure:19580: $? = 0 ++configure:20100: checking for g++ option to produce PIC ++configure:20107: result: -fPIC -DPIC ++configure:20115: checking if g++ PIC flag -fPIC -DPIC works ++configure:20133: g++ -c -fPIC -DPIC -DPIC conftest.cpp >&5 ++configure:20137: $? = 0 ++configure:20150: result: yes ++configure:20173: checking if g++ static flag -static works ++configure:20201: result: yes ++configure:20213: checking if g++ supports -c -o file.o ++configure:20234: g++ -c -o out/conftest2.o conftest.cpp >&5 ++configure:20238: $? = 0 ++configure:20260: result: yes ++configure:20265: checking if g++ supports -c -o file.o ++configure:20312: result: yes ++configure:20342: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:20381: result: yes ++configure:20522: checking dynamic linker characteristics ++configure:21190: result: GNU/Linux ld.so ++configure:21243: checking how to hardcode library paths into programs ++configure:21268: result: immediate ++configure:21325: g++ -c conftest.cpp >&5 ++configure:21325: $? = 0 ++configure:21337: working c++ compiler found: yes ++configure:21350: checking for valgrind ++configure:21381: result: no ++configure:21409: checking for gobject-introspection ++configure:21440: $PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.31.1" ++Package gobject-introspection-1.0 was not found in the pkg-config search path. ++Perhaps you should add the directory containing `gobject-introspection-1.0.pc' ++to the PKG_CONFIG_PATH environment variable ++No package 'gobject-introspection-1.0' found ++configure:21443: $? = 1 ++configure:21454: result: no ++configure:21499: checking for gtkdoc-check ++configure:21517: found /usr/bin/gtkdoc-check ++configure:21529: result: /usr/bin/gtkdoc-check ++configure:21541: checking for gtkdoc-rebase ++configure:21559: found /usr/bin/gtkdoc-rebase ++configure:21571: result: /usr/bin/gtkdoc-rebase ++configure:21585: checking for gtkdoc-mkpdf ++configure:21603: found /usr/bin/gtkdoc-mkpdf ++configure:21615: result: /usr/bin/gtkdoc-mkpdf ++configure:21819: checking whether to build gtk-doc documentation ++configure:21821: result: no ++configure:21889: checking for python ++configure:21907: found /usr/bin/python ++configure:21919: result: /usr/bin/python ++configure:21940: checking for python version ++configure:21947: result: 2.7 ++configure:21959: checking for python platform ++configure:21966: result: linux2 ++configure:21992: checking for python script directory ++configure:22027: result: ${prefix}/lib/python2.7/dist-packages ++configure:22036: checking for python extension module directory ++configure:22071: result: ${exec_prefix}/lib/python2.7/dist-packages ++configure:22087: checking whether to build plugin documentation ++configure:22099: result: no (gtk-doc disabled or not available) ++configure:22202: checking for cos in -lm ++configure:22227: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 ++conftest.c:43:6: warning: conflicting types for built-in function 'cos' [enabled by default] ++ char cos (); ++ ^ ++configure:22227: $? = 0 ++configure:22236: result: yes ++configure:22249: checking for ANSI C header files ++configure:22353: result: yes ++configure:22365: checking xmmintrin.h usability ++configure:22365: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:22365: $? = 0 ++configure:22365: result: yes ++configure:22365: checking xmmintrin.h presence ++configure:22365: gcc -E conftest.c ++configure:22365: $? = 0 ++configure:22365: result: yes ++configure:22365: checking for xmmintrin.h ++configure:22365: result: yes ++configure:22365: checking emmintrin.h usability ++configure:22365: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:22365: $? = 0 ++configure:22365: result: yes ++configure:22365: checking emmintrin.h presence ++configure:22365: gcc -E conftest.c ++configure:22365: $? = 0 ++configure:22365: result: yes ++configure:22365: checking for emmintrin.h ++configure:22365: result: yes ++configure:22378: checking for sys/socket.h ++configure:22378: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:22378: $? = 0 ++configure:22378: result: yes ++configure:22402: checking for winsock2.h ++configure:22402: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++conftest.c:74:22: fatal error: winsock2.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:22402: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| #define STDC_HEADERS 1 ++| #define HAVE_XMMINTRIN_H 1 ++| #define HAVE_EMMINTRIN_H 1 ++| #define HAVE_SYS_SOCKET_H 1 ++| /* end confdefs.h. */ ++| #include ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| ++| #include ++configure:22402: result: no ++configure:22431: checking for process.h ++configure:22431: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++conftest.c:74:21: fatal error: process.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:22431: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| #define STDC_HEADERS 1 ++| #define HAVE_XMMINTRIN_H 1 ++| #define HAVE_EMMINTRIN_H 1 ++| #define HAVE_SYS_SOCKET_H 1 ++| /* end confdefs.h. */ ++| #include ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| ++| #include ++configure:22431: result: no ++configure:22431: checking for sys/types.h ++configure:22431: result: yes ++configure:22431: checking for sys/wait.h ++configure:22431: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:22431: $? = 0 ++configure:22431: result: yes ++configure:22431: checking for sys/stat.h ++configure:22431: result: yes ++configure:22443: checking for ARM NEON support in current arch/CFLAGS ++configure:22463: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++conftest.c:45:24: fatal error: arm_neon.h: No such file or directory ++ #include ++ ^ ++compilation terminated. ++configure:22463: $? = 1 ++configure: failed program was: ++| /* confdefs.h */ ++| #define PACKAGE_NAME "GStreamer Base Plug-ins" ++| #define PACKAGE_TARNAME "gst-plugins-base" ++| #define PACKAGE_VERSION "1.6.1" ++| #define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++| #define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++| #define PACKAGE_URL "" ++| #define PACKAGE "gst-plugins-base" ++| #define VERSION "1.6.1" ++| #define GST_API_VERSION "1.0" ++| #define STDC_HEADERS 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| #define HAVE_STDLIB_H 1 ++| #define HAVE_STRING_H 1 ++| #define HAVE_MEMORY_H 1 ++| #define HAVE_STRINGS_H 1 ++| #define HAVE_INTTYPES_H 1 ++| #define HAVE_STDINT_H 1 ++| #define HAVE_UNISTD_H 1 ++| #define HAVE_DLFCN_H 1 ++| #define LT_OBJDIR ".libs/" ++| #define ENABLE_NLS 1 ++| #define HAVE_GETTEXT 1 ++| #define HAVE_DCGETTEXT 1 ++| #define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++| #define LOCALEDIR "/usr/local/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++| #define GST_PACKAGE_ORIGIN "Unknown package origin" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define HAVE_EXTERNAL /**/ ++| #define HAVE_CPU_X86_64 1 ++| #define HOST_CPU "x86_64" ++| #define TARGET_CPU "x86_64" ++| #define STDC_HEADERS 1 ++| #define HAVE_XMMINTRIN_H 1 ++| #define HAVE_EMMINTRIN_H 1 ++| #define HAVE_SYS_SOCKET_H 1 ++| #define HAVE_SYS_TYPES_H 1 ++| #define HAVE_SYS_WAIT_H 1 ++| #define HAVE_SYS_STAT_H 1 ++| /* end confdefs.h. */ ++| ++| ++| #include ++| int32x4_t testfunc(int16_t *a, int16_t *b) { ++| asm volatile ("vmull.s16 q0, d0, d0" : : : "q0"); ++| return vmull_s16(vld1_s16(a), vld1_s16(b)); ++| } ++| ++| int ++| main () ++| { ++| ++| ; ++| return 0; ++| } ++configure:22473: result: no ++configure:22481: checking for stdint types ++configure:22504: gcc -std=gnu99 -c conftest.c >&5 ++configure:22504: $? = 0 ++configure:22548: result: stdint.h (shortcircuit) ++configure:22935: result: make use of stdint.h in _stdint.h (assuming C99 compatible system) ++configure:22946: checking for localtime_r ++configure:22946: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:22946: $? = 0 ++configure:22946: result: yes ++configure:22946: checking for gmtime_r ++configure:22946: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:22946: $? = 0 ++configure:22946: result: yes ++configure:22960: checking for log2 ++configure:22960: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 ++conftest.c:68:6: warning: conflicting types for built-in function 'log2' [enabled by default] ++ char log2 (); ++ ^ ++configure:22960: $? = 0 ++configure:22960: result: yes ++configure:22975: checking for _LARGEFILE_SOURCE value needed for large files ++configure:22994: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:22994: $? = 0 ++configure:23022: result: no ++configure:23046: checking for lrint ++configure:23067: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 ++configure:23067: $? = 0 ++configure:23075: result: yes ++configure:23083: checking for lrintf ++configure:23104: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 ++configure:23104: $? = 0 ++configure:23112: result: yes ++configure:23123: checking whether gcc -std=gnu99 implements __PRETTY_FUNCTION__ ++configure:23140: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:23140: $? = 0 ++configure:23150: result: yes ++configure:23158: checking whether gcc -std=gnu99 implements __FUNCTION__ ++configure:23175: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:23175: $? = 0 ++configure:23185: result: yes ++configure:23193: checking whether gcc -std=gnu99 implements __func__ ++configure:23210: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 ++configure:23210: $? = 0 ++configure:23220: result: yes ++configure:23266: checking for GLIB ++configure:23274: $PKG_CONFIG --exists --print-errors "$which" ++configure:23277: $? = 0 ++configure:23292: $PKG_CONFIG --exists --print-errors "$which" ++configure:23295: $? = 0 ++configure:23347: result: yes ++configure:23406: checking for glib-genmarshal ++configure:23414: result: glib-genmarshal (from pkg-config path) ++configure:23468: checking for glib-mkenums ++configure:23475: result: glib-mkenums ++configure:23488: checking for GIO ++configure:23496: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" ++configure:23499: $? = 0 ++configure:23514: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" ++configure:23517: $? = 0 ++configure:23572: result: yes ++configure:23623: checking for ORC ++configure:23631: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" ++configure:23634: $? = 0 ++configure:23649: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" ++configure:23652: $? = 0 ++configure:23706: result: yes ++configure:23714: checking for usable orcc ++configure:23722: result: /usr/local/bin/orcc ++configure:23769: checking for GST ++configure:23777: $PKG_CONFIG --exists --print-errors "$module >= $minver" ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 ++configure:23780: $? = 1 ++configure:23795: $PKG_CONFIG --exists --print-errors "$module >= $minver" ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 ++configure:23798: $? = 1 ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 ++configure:23826: result: no ++configure:23830: Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 ++configure:23833: error: no gstreamer-1.0 >= 1.6.1 (GStreamer) found ++ ++## ---------------- ## ++## Cache variables. ## ++## ---------------- ## ++ ++ac_cv_build=x86_64-unknown-linux-gnu ++ac_cv_c99_lrint=yes ++ac_cv_c99_lrintf=yes ++ac_cv_c_bigendian=no ++ac_cv_c_compiler_gnu=yes ++ac_cv_cxx_compiler_gnu=yes ++ac_cv_env_ALSA_CFLAGS_set= ++ac_cv_env_ALSA_CFLAGS_value= ++ac_cv_env_ALSA_LIBS_set= ++ac_cv_env_ALSA_LIBS_value= ++ac_cv_env_CCC_set= ++ac_cv_env_CCC_value= ++ac_cv_env_CC_set= ++ac_cv_env_CC_value= ++ac_cv_env_CDPARANOIA_CFLAGS_set= ++ac_cv_env_CDPARANOIA_CFLAGS_value= ++ac_cv_env_CDPARANOIA_LIBS_set= ++ac_cv_env_CDPARANOIA_LIBS_value= ++ac_cv_env_CFLAGS_set= ++ac_cv_env_CFLAGS_value= ++ac_cv_env_CPPFLAGS_set= ++ac_cv_env_CPPFLAGS_value= ++ac_cv_env_CPP_set= ++ac_cv_env_CPP_value= ++ac_cv_env_CXXCPP_set= ++ac_cv_env_CXXCPP_value= ++ac_cv_env_CXXFLAGS_set= ++ac_cv_env_CXXFLAGS_value= ++ac_cv_env_CXX_set= ++ac_cv_env_CXX_value= ++ac_cv_env_FT2_CFLAGS_set= ++ac_cv_env_FT2_CFLAGS_value= ++ac_cv_env_FT2_LIBS_set= ++ac_cv_env_FT2_LIBS_value= ++ac_cv_env_GIO_CFLAGS_set= ++ac_cv_env_GIO_CFLAGS_value= ++ac_cv_env_GIO_LIBS_set= ++ac_cv_env_GIO_LIBS_value= ++ac_cv_env_GIO_UNIX_2_0_CFLAGS_set= ++ac_cv_env_GIO_UNIX_2_0_CFLAGS_value= ++ac_cv_env_GIO_UNIX_2_0_LIBS_set= ++ac_cv_env_GIO_UNIX_2_0_LIBS_value= ++ac_cv_env_GLIB_CFLAGS_set= ++ac_cv_env_GLIB_CFLAGS_value= ++ac_cv_env_GLIB_LIBS_set= ++ac_cv_env_GLIB_LIBS_value= ++ac_cv_env_GST_BASE_CFLAGS_set= ++ac_cv_env_GST_BASE_CFLAGS_value= ++ac_cv_env_GST_BASE_LIBS_set= ++ac_cv_env_GST_BASE_LIBS_value= ++ac_cv_env_GST_CFLAGS_set= ++ac_cv_env_GST_CFLAGS_value= ++ac_cv_env_GST_CHECK_CFLAGS_set= ++ac_cv_env_GST_CHECK_CFLAGS_value= ++ac_cv_env_GST_CHECK_LIBS_set= ++ac_cv_env_GST_CHECK_LIBS_value= ++ac_cv_env_GST_CONTROLLER_CFLAGS_set= ++ac_cv_env_GST_CONTROLLER_CFLAGS_value= ++ac_cv_env_GST_CONTROLLER_LIBS_set= ++ac_cv_env_GST_CONTROLLER_LIBS_value= ++ac_cv_env_GST_LIBS_set= ++ac_cv_env_GST_LIBS_value= ++ac_cv_env_GST_NET_CFLAGS_set= ++ac_cv_env_GST_NET_CFLAGS_value= ++ac_cv_env_GST_NET_LIBS_set= ++ac_cv_env_GST_NET_LIBS_value= ++ac_cv_env_GTKDOC_DEPS_CFLAGS_set= ++ac_cv_env_GTKDOC_DEPS_CFLAGS_value= ++ac_cv_env_GTKDOC_DEPS_LIBS_set= ++ac_cv_env_GTKDOC_DEPS_LIBS_value= ++ac_cv_env_GTK_CFLAGS_set= ++ac_cv_env_GTK_CFLAGS_value= ++ac_cv_env_GTK_LIBS_set= ++ac_cv_env_GTK_LIBS_value= ++ac_cv_env_GTK_QUARTZ_CFLAGS_set= ++ac_cv_env_GTK_QUARTZ_CFLAGS_value= ++ac_cv_env_GTK_QUARTZ_LIBS_set= ++ac_cv_env_GTK_QUARTZ_LIBS_value= ++ac_cv_env_GTK_X11_CFLAGS_set= ++ac_cv_env_GTK_X11_CFLAGS_value= ++ac_cv_env_GTK_X11_LIBS_set= ++ac_cv_env_GTK_X11_LIBS_value= ++ac_cv_env_IVORBIS_CFLAGS_set= ++ac_cv_env_IVORBIS_CFLAGS_value= ++ac_cv_env_IVORBIS_LIBS_set= ++ac_cv_env_IVORBIS_LIBS_value= ++ac_cv_env_LDFLAGS_set= ++ac_cv_env_LDFLAGS_value= ++ac_cv_env_LIBS_set= ++ac_cv_env_LIBS_value= ++ac_cv_env_LIBVISUAL_CFLAGS_set= ++ac_cv_env_LIBVISUAL_CFLAGS_value= ++ac_cv_env_LIBVISUAL_LIBS_set= ++ac_cv_env_LIBVISUAL_LIBS_value= ++ac_cv_env_OGG_CFLAGS_set= ++ac_cv_env_OGG_CFLAGS_value= ++ac_cv_env_OGG_LIBS_set= ++ac_cv_env_OGG_LIBS_value= ++ac_cv_env_ORC_CFLAGS_set= ++ac_cv_env_ORC_CFLAGS_value= ++ac_cv_env_ORC_LIBS_set= ++ac_cv_env_ORC_LIBS_value= ++ac_cv_env_PANGO_CFLAGS_set= ++ac_cv_env_PANGO_CFLAGS_value= ++ac_cv_env_PANGO_LIBS_set= ++ac_cv_env_PANGO_LIBS_value= ++ac_cv_env_PKG_CONFIG_set= ++ac_cv_env_PKG_CONFIG_value= ++ac_cv_env_PYTHON_set= ++ac_cv_env_PYTHON_value= ++ac_cv_env_QT_CFLAGS_set= ++ac_cv_env_QT_CFLAGS_value= ++ac_cv_env_QT_LIBS_set= ++ac_cv_env_QT_LIBS_value= ++ac_cv_env_THEORA_CFLAGS_set= ++ac_cv_env_THEORA_CFLAGS_value= ++ac_cv_env_THEORA_LIBS_set= ++ac_cv_env_THEORA_LIBS_value= ++ac_cv_env_VALGRIND_CFLAGS_set= ++ac_cv_env_VALGRIND_CFLAGS_value= ++ac_cv_env_VALGRIND_LIBS_set= ++ac_cv_env_VALGRIND_LIBS_value= ++ac_cv_env_VORBIS_CFLAGS_set= ++ac_cv_env_VORBIS_CFLAGS_value= ++ac_cv_env_VORBIS_LIBS_set= ++ac_cv_env_VORBIS_LIBS_value= ++ac_cv_env_XSHM_CFLAGS_set= ++ac_cv_env_XSHM_CFLAGS_value= ++ac_cv_env_XSHM_LIBS_set= ++ac_cv_env_XSHM_LIBS_value= ++ac_cv_env_XVIDEO_CFLAGS_set= ++ac_cv_env_XVIDEO_CFLAGS_value= ++ac_cv_env_XVIDEO_LIBS_set= ++ac_cv_env_XVIDEO_LIBS_value= ++ac_cv_env_X_CFLAGS_set= ++ac_cv_env_X_CFLAGS_value= ++ac_cv_env_X_LIBS_set= ++ac_cv_env_X_LIBS_value= ++ac_cv_env_ZLIB_CFLAGS_set= ++ac_cv_env_ZLIB_CFLAGS_value= ++ac_cv_env_ZLIB_LIBS_set= ++ac_cv_env_ZLIB_LIBS_value= ++ac_cv_env_build_alias_set= ++ac_cv_env_build_alias_value= ++ac_cv_env_host_alias_set= ++ac_cv_env_host_alias_value= ++ac_cv_env_target_alias_set= ++ac_cv_env_target_alias_value= ++ac_cv_func_dlopen=no ++ac_cv_func_gmtime_r=yes ++ac_cv_func_localtime_r=yes ++ac_cv_func_log2=yes ++ac_cv_func_shl_load=no ++ac_cv_header_dlfcn_h=yes ++ac_cv_header_emmintrin_h=yes ++ac_cv_header_inttypes_h=yes ++ac_cv_header_memory_h=yes ++ac_cv_header_process_h=no ++ac_cv_header_stdc=yes ++ac_cv_header_stdint=stdint.h ++ac_cv_header_stdint_h=yes ++ac_cv_header_stdint_t=stdint.h ++ac_cv_header_stdlib_h=yes ++ac_cv_header_string_h=yes ++ac_cv_header_strings_h=yes ++ac_cv_header_sys_socket_h=yes ++ac_cv_header_sys_stat_h=yes ++ac_cv_header_sys_types_h=yes ++ac_cv_header_sys_wait_h=yes ++ac_cv_header_unistd_h=yes ++ac_cv_header_winsock2_h=no ++ac_cv_header_xmmintrin_h=yes ++ac_cv_host=x86_64-unknown-linux-gnu ++ac_cv_lib_dl_dlopen=yes ++ac_cv_lib_dld_shl_load=no ++ac_cv_lib_m_cos=yes ++ac_cv_objext=o ++ac_cv_path_EGREP='/bin/grep -E' ++ac_cv_path_FGREP='/bin/grep -F' ++ac_cv_path_GMSGFMT=/usr/bin/msgfmt ++ac_cv_path_GREP=/bin/grep ++ac_cv_path_GTKDOC_CHECK=/usr/bin/gtkdoc-check ++ac_cv_path_GTKDOC_MKPDF=/usr/bin/gtkdoc-mkpdf ++ac_cv_path_GTKDOC_REBASE=/usr/bin/gtkdoc-rebase ++ac_cv_path_MSGFMT=/usr/bin/msgfmt ++ac_cv_path_MSGMERGE=/usr/bin/msgmerge ++ac_cv_path_PYTHON=/usr/bin/python ++ac_cv_path_SED=/bin/sed ++ac_cv_path_VALGRIND_PATH=no ++ac_cv_path_XGETTEXT=/usr/bin/xgettext ++ac_cv_path_ac_pt_PKG_CONFIG=/usr/bin/pkg-config ++ac_cv_path_install='/usr/bin/install -c' ++ac_cv_path_mkdir=/bin/mkdir ++ac_cv_prog_AWK=mawk ++ac_cv_prog_CPP='gcc -E' ++ac_cv_prog_CXXCPP='g++ -E' ++ac_cv_prog_ac_ct_AR=ar ++ac_cv_prog_ac_ct_CC=gcc ++ac_cv_prog_ac_ct_CXX=g++ ++ac_cv_prog_ac_ct_MANIFEST_TOOL=mt ++ac_cv_prog_ac_ct_OBJDUMP=objdump ++ac_cv_prog_ac_ct_RANLIB=ranlib ++ac_cv_prog_ac_ct_STRIP=strip ++ac_cv_prog_cc_c89= ++ac_cv_prog_cc_c99=-std=gnu99 ++ac_cv_prog_cc_g=yes ++ac_cv_prog_cc_stdc=-std=gnu99 ++ac_cv_prog_cxx_g=yes ++ac_cv_prog_make_make_set=yes ++ac_cv_stdint_message='using gnu compiler gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4' ++ac_cv_stdint_result='(assuming C99 compatible system)' ++ac_cv_sys_file_offset_bits=no ++ac_cv_sys_largefile_CC=no ++ac_cv_sys_largefile_source=no ++ac_cv_target=x86_64-unknown-linux-gnu ++acl_cv_hardcode_direct=no ++acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ++acl_cv_hardcode_libdir_separator= ++acl_cv_hardcode_minus_L=no ++acl_cv_libext=a ++acl_cv_libname_spec='lib$name' ++acl_cv_library_names_spec='$libname$shrext' ++acl_cv_path_LD='/usr/bin/ld -m elf_x86_64' ++acl_cv_prog_gnu_ld=yes ++acl_cv_rpath=done ++acl_cv_shlibext=so ++acl_cv_wl=-Wl, ++am_cv_CC_dependencies_compiler_type=gcc3 ++am_cv_CXX_dependencies_compiler_type=gcc3 ++am_cv_make_support_nested_variables=yes ++am_cv_prog_cc_c_o=yes ++am_cv_prog_tar_ustar=gnutar ++am_cv_python_platform=linux2 ++am_cv_python_pyexecdir='${exec_prefix}/lib/python2.7/dist-packages' ++am_cv_python_pythondir='${prefix}/lib/python2.7/dist-packages' ++am_cv_python_version=2.7 ++gst_cv_have_func=yes ++gst_cv_have_function=yes ++gst_cv_have_pretty_function=yes ++gt_cv_func_CFLocaleCopyCurrent=no ++gt_cv_func_CFPreferencesCopyAppValue=no ++gt_cv_func_gnugettext1_libc=yes ++lt_cv_ar_at_file=@ ++lt_cv_archive_cmds_need_lc=no ++lt_cv_deplibs_check_method=pass_all ++lt_cv_dlopen=dlopen ++lt_cv_dlopen_libs=-ldl ++lt_cv_dlopen_self=yes ++lt_cv_dlopen_self_static=no ++lt_cv_file_magic_cmd='$MAGIC_CMD' ++lt_cv_file_magic_test_file= ++lt_cv_ld_reload_flag=-r ++lt_cv_nm_interface='BSD nm' ++lt_cv_objdir=.libs ++lt_cv_path_LD=/usr/bin/ld ++lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64' ++lt_cv_path_NM='/usr/bin/nm -B' ++lt_cv_path_mainfest_tool=no ++lt_cv_prog_compiler_c_o=yes ++lt_cv_prog_compiler_c_o_CXX=yes ++lt_cv_prog_compiler_pic='-fPIC -DPIC' ++lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC' ++lt_cv_prog_compiler_pic_works=yes ++lt_cv_prog_compiler_pic_works_CXX=yes ++lt_cv_prog_compiler_rtti_exceptions=no ++lt_cv_prog_compiler_static_works=yes ++lt_cv_prog_compiler_static_works_CXX=yes ++lt_cv_prog_gnu_ld=yes ++lt_cv_prog_gnu_ldcxx=yes ++lt_cv_sharedlib_from_linklib_cmd='printf %s\n' ++lt_cv_shlibpath_overrides_runpath=no ++lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' ++lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' ++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' ++lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' ++lt_cv_sys_max_cmd_len=1572864 ++lt_cv_to_host_file_cmd=func_convert_file_noop ++lt_cv_to_tool_file_cmd=func_convert_file_noop ++pkg_cv_GIO_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++pkg_cv_GIO_LIBS='-lgio-2.0 -lgobject-2.0 -lglib-2.0 ' ++pkg_cv_GLIB_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++pkg_cv_GLIB_LIBS='-pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ' ++pkg_cv_ORC_CFLAGS='-I/usr/local/include/orc-0.4 ' ++pkg_cv_ORC_LIBS='-L/usr/local/lib -lorc-0.4 ' ++ ++## ----------------- ## ++## Output variables. ## ++## ----------------- ## ++ ++ACLOCAL='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing aclocal-1.15' ++ACLOCAL_AMFLAGS='-I m4 -I common/m4' ++ALSA_CFLAGS='' ++ALSA_LIBS='' ++AMDEPBACKSLASH='\' ++AMDEP_FALSE='#' ++AMDEP_TRUE='' ++AMTAR='$${TAR-tar}' ++AM_BACKSLASH='\' ++AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' ++AM_DEFAULT_VERBOSITY='0' ++AM_V='$(V)' ++AR='ar' ++AS='as' ++AUDIORESAMPLE_FORMAT_AUTO='' ++AUDIORESAMPLE_FORMAT_FLOAT='' ++AUDIORESAMPLE_FORMAT_INT='' ++AUTOCONF='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing autoconf' ++AUTOHEADER='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing autoheader' ++AUTOMAKE='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing automake-1.15' ++AWK='mawk' ++BUILD_EXAMPLES_FALSE='#' ++BUILD_EXAMPLES_TRUE='' ++BUILD_EXPERIMENTAL_FALSE='' ++BUILD_EXPERIMENTAL_TRUE='#' ++BUILD_EXTERNAL_FALSE='#' ++BUILD_EXTERNAL_TRUE='' ++CC='gcc -std=gnu99' ++CCASFLAGS='' ++CCDEPMODE='depmode=gcc3' ++CDPARANOIA_CFLAGS='' ++CDPARANOIA_LIBS='' ++CFLAGS='-g -O2' ++CPP='gcc -E' ++CPPFLAGS='' ++CXX='g++' ++CXXCPP='g++ -E' ++CXXDEPMODE='depmode=gcc3' ++CXXFLAGS='' ++CYGPATH_W='echo' ++DEFAULT_AUDIOSINK='' ++DEFAULT_AUDIOSRC='' ++DEFAULT_VIDEOSINK='' ++DEFAULT_VIDEOSRC='' ++DEFAULT_VISUALIZER='' ++DEFS='' ++DEPDIR='.deps' ++DEPRECATED_CFLAGS='' ++DLLTOOL='false' ++DSYMUTIL='' ++DUMPBIN='' ++ECHO_C='' ++ECHO_N='-n' ++ECHO_T='' ++EGREP='/bin/grep -E' ++ENABLE_GTK_DOC_FALSE='' ++ENABLE_GTK_DOC_TRUE='#' ++ENABLE_PLUGIN_DOCS_FALSE='' ++ENABLE_PLUGIN_DOCS_TRUE='#' ++ERROR_CFLAGS='' ++ERROR_CXXFLAGS='' ++EXEEXT='' ++FFLAGS='' ++FGREP='/bin/grep -F' ++FT2_CFLAGS='' ++FT2_CONFIG='' ++FT2_LIBS='' ++GCOV='' ++GCOV_CFLAGS='' ++GCOV_LIBS='' ++GETTEXT_MACRO_VERSION='0.17' ++GETTEXT_PACKAGE='gst-plugins-base-1.0' ++GIO_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++GIO_LDFLAGS='' ++GIO_LIBS='-lgio-2.0 -lgobject-2.0 -lglib-2.0 ' ++GIO_UNIX_2_0_CFLAGS='' ++GIO_UNIX_2_0_LIBS='' ++GLIB_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++GLIB_EXTRA_CFLAGS=' -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT' ++GLIB_GENMARSHAL='glib-genmarshal' ++GLIB_LIBS='-pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ' ++GLIB_MKENUMS='glib-mkenums' ++GLIB_PREFIX='' ++GLIB_REQ='2.32' ++GMSGFMT='/usr/bin/msgfmt' ++GMSGFMT_015='/usr/bin/msgfmt' ++GREP='/bin/grep' ++GST_AGE='601' ++GST_ALL_LDFLAGS='' ++GST_API_VERSION='1.0' ++GST_BASE_CFLAGS='' ++GST_BASE_LIBS='' ++GST_CFLAGS='' ++GST_CHECK_CFLAGS='' ++GST_CHECK_LIBS='' ++GST_CONTROLLER_CFLAGS='' ++GST_CONTROLLER_LIBS='' ++GST_CURRENT='601' ++GST_CXXFLAGS='' ++GST_GCOV_ENABLED_FALSE='' ++GST_GCOV_ENABLED_TRUE='#' ++GST_INSTALL_PLUGINS_HELPER='/usr/local/libexec/gst-install-plugins-helper' ++GST_LEVEL_DEFAULT='' ++GST_LIBS='' ++GST_LIBVERSION='601:0:601' ++GST_LIB_LDFLAGS='' ++GST_LICENSE='' ++GST_LT_LDFLAGS=' -version-info 601:0:601' ++GST_NET_CFLAGS='' ++GST_NET_LIBS='' ++GST_OPTION_CFLAGS='' ++GST_OPTION_CXXFLAGS='' ++GST_PACKAGE_NAME='GStreamer Base Plug-ins source release' ++GST_PACKAGE_ORIGIN='Unknown package origin' ++GST_PKG_CONFIG_PATH='$(top_builddir)/pkgconfig' ++GST_PLUGINS_ALL='' ++GST_PLUGINS_BASE_CFLAGS='' ++GST_PLUGINS_DIR='' ++GST_PLUGINS_NONPORTED='' ++GST_PLUGINS_SELECTED='' ++GST_PLUGIN_BUILD_STATIC_FALSE='' ++GST_PLUGIN_BUILD_STATIC_TRUE='' ++GST_PLUGIN_LDFLAGS='' ++GST_PLUGIN_LIBTOOLFLAGS='' ++GST_PREFIX='' ++GST_REVISION='0' ++GST_TOOLS_DIR='' ++GTKDOC_CHECK='/usr/bin/gtkdoc-check' ++GTKDOC_DEPS_CFLAGS='' ++GTKDOC_DEPS_LIBS='' ++GTKDOC_MKPDF='/usr/bin/gtkdoc-mkpdf' ++GTKDOC_REBASE='/usr/bin/gtkdoc-rebase' ++GTK_CFLAGS='' ++GTK_DOC_BUILD_HTML_FALSE='#' ++GTK_DOC_BUILD_HTML_TRUE='' ++GTK_DOC_BUILD_PDF_FALSE='' ++GTK_DOC_BUILD_PDF_TRUE='#' ++GTK_DOC_USE_LIBTOOL_FALSE='#' ++GTK_DOC_USE_LIBTOOL_TRUE='' ++GTK_LIBS='' ++GTK_QUARTZ_CFLAGS='' ++GTK_QUARTZ_LIBS='' ++GTK_X11_CFLAGS='' ++GTK_X11_LIBS='' ++HAVE_CDPARANOIA='' ++HAVE_CPU_ALPHA_FALSE='' ++HAVE_CPU_ALPHA_TRUE='#' ++HAVE_CPU_ARC_FALSE='' ++HAVE_CPU_ARC_TRUE='#' ++HAVE_CPU_ARM_FALSE='' ++HAVE_CPU_ARM_TRUE='#' ++HAVE_CPU_CRISV32_FALSE='' ++HAVE_CPU_CRISV32_TRUE='#' ++HAVE_CPU_CRIS_FALSE='' ++HAVE_CPU_CRIS_TRUE='#' ++HAVE_CPU_HPPA_FALSE='' ++HAVE_CPU_HPPA_TRUE='#' ++HAVE_CPU_I386_FALSE='' ++HAVE_CPU_I386_TRUE='#' ++HAVE_CPU_IA64_FALSE='' ++HAVE_CPU_IA64_TRUE='#' ++HAVE_CPU_M68K_FALSE='' ++HAVE_CPU_M68K_TRUE='#' ++HAVE_CPU_MIPS_FALSE='' ++HAVE_CPU_MIPS_TRUE='#' ++HAVE_CPU_PPC64_FALSE='' ++HAVE_CPU_PPC64_TRUE='#' ++HAVE_CPU_PPC_FALSE='' ++HAVE_CPU_PPC_TRUE='#' ++HAVE_CPU_S390_FALSE='' ++HAVE_CPU_S390_TRUE='#' ++HAVE_CPU_SPARC_FALSE='' ++HAVE_CPU_SPARC_TRUE='#' ++HAVE_CPU_X86_64_FALSE='#' ++HAVE_CPU_X86_64_TRUE='' ++HAVE_CXX_FALSE='#' ++HAVE_CXX_TRUE='' ++HAVE_FT2_FALSE='' ++HAVE_FT2_TRUE='' ++HAVE_GST_CHECK_FALSE='' ++HAVE_GST_CHECK_TRUE='' ++HAVE_GTK_FALSE='' ++HAVE_GTK_QUARTZ_FALSE='' ++HAVE_GTK_QUARTZ_TRUE='' ++HAVE_GTK_TRUE='' ++HAVE_GTK_X11_FALSE='' ++HAVE_GTK_X11_TRUE='' ++HAVE_INTROSPECTION_FALSE='' ++HAVE_INTROSPECTION_TRUE='#' ++HAVE_LINUX_JOYSTICK_HEADERS_FALSE='' ++HAVE_LINUX_JOYSTICK_HEADERS_TRUE='' ++HAVE_ORCC_FALSE='#' ++HAVE_ORCC_TRUE='' ++HAVE_ORC_FALSE='#' ++HAVE_ORC_TRUE='' ++HAVE_QT_FALSE='' ++HAVE_QT_MOC_FALSE='' ++HAVE_QT_MOC_TRUE='' ++HAVE_QT_TRUE='' ++HAVE_SYS_SOCKET_H_FALSE='#' ++HAVE_SYS_SOCKET_H_TRUE='' ++HAVE_VALGRIND_FALSE='' ++HAVE_VALGRIND_TRUE='#' ++HAVE_WINSOCK2_H_FALSE='' ++HAVE_WINSOCK2_H_TRUE='#' ++HAVE_XSHM='' ++HAVE_ZLIB='' ++HTML_DIR='${datadir}/gtk-doc/html' ++INSTALL_DATA='${INSTALL} -m 644' ++INSTALL_PROGRAM='${INSTALL}' ++INSTALL_SCRIPT='${INSTALL}' ++INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' ++INTLLIBS='' ++INTL_MACOSX_LIBS='' ++INTROSPECTION_CFLAGS='' ++INTROSPECTION_COMPILER='' ++INTROSPECTION_GENERATE='' ++INTROSPECTION_GIRDIR='' ++INTROSPECTION_INIT='' ++INTROSPECTION_LIBS='' ++INTROSPECTION_MAKEFILE='' ++INTROSPECTION_SCANNER='' ++INTROSPECTION_TYPELIBDIR='' ++IVORBIS_CFLAGS='' ++IVORBIS_LIBS='' ++LD='/usr/bin/ld -m elf_x86_64' ++LDFLAGS='' ++LIBICONV='-liconv' ++LIBINTL='' ++LIBM='-lm' ++LIBOBJS='' ++LIBS='' ++LIBTOOL='$(SHELL) $(top_builddir)/libtool' ++LIBVISUAL_CFLAGS='' ++LIBVISUAL_LIBS='' ++LIPO='' ++LN_S='ln -s' ++LOCALEDIR='/usr/local/share/locale' ++LTLIBICONV='-liconv' ++LTLIBINTL='' ++LTLIBOBJS='' ++MAINT='' ++MAINTAINER_MODE_FALSE='#' ++MAINTAINER_MODE_TRUE='' ++MAKEINFO='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing makeinfo' ++MANIFEST_TOOL=':' ++MKDIR_P='/bin/mkdir -p' ++MSGFMT='/usr/bin/msgfmt' ++MSGFMT_015='/usr/bin/msgfmt' ++MSGMERGE='/usr/bin/msgmerge' ++NM='/usr/bin/nm -B' ++NMEDIT='' ++OBJDUMP='objdump' ++OBJEXT='o' ++OGG_CFLAGS='' ++OGG_LIBS='' ++ORCC='/usr/local/bin/orcc' ++ORCC_FLAGS='--compat 0.4.23' ++ORC_CFLAGS='-I/usr/local/include/orc-0.4 ' ++ORC_LIBS='-L/usr/local/lib -lorc-0.4 ' ++OTOOL64='' ++OTOOL='' ++PACKAGE='gst-plugins-base' ++PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' ++PACKAGE_NAME='GStreamer Base Plug-ins' ++PACKAGE_STRING='GStreamer Base Plug-ins 1.6.1' ++PACKAGE_TARNAME='gst-plugins-base' ++PACKAGE_URL='' ++PACKAGE_VERSION='1.6.1' ++PACKAGE_VERSION_MAJOR='1' ++PACKAGE_VERSION_MICRO='1' ++PACKAGE_VERSION_MINOR='6' ++PACKAGE_VERSION_NANO='0' ++PACKAGE_VERSION_RELEASE='1' ++PANGO_CFLAGS='' ++PANGO_LIBS='' ++PATH_SEPARATOR=':' ++PKG_CONFIG='/usr/bin/pkg-config' ++PLUGINDIR='' ++POSUB='po' ++PROFILE_CFLAGS='' ++PYTHON='/usr/bin/python' ++PYTHON_EXEC_PREFIX='${exec_prefix}' ++PYTHON_PLATFORM='linux2' ++PYTHON_PREFIX='${prefix}' ++PYTHON_VERSION='2.7' ++QTCHOOSER='' ++QT_CFLAGS='' ++QT_LIBS='' ++QT_MOC='' ++RANLIB='ranlib' ++SED='/bin/sed' ++SET_MAKE='' ++SHELL='/bin/bash' ++STRIP='strip' ++THEORA_CFLAGS='' ++THEORA_LIBS='' ++USE_ALSA_FALSE='' ++USE_ALSA_TRUE='' ++USE_CDPARANOIA_FALSE='' ++USE_CDPARANOIA_TRUE='' ++USE_EXPERIMENTAL_FALSE='' ++USE_EXPERIMENTAL_TRUE='#' ++USE_EXTERNAL_FALSE='#' ++USE_EXTERNAL_TRUE='' ++USE_GIO_UNIX_2_0_FALSE='' ++USE_GIO_UNIX_2_0_TRUE='' ++USE_ISO_CODES_FALSE='' ++USE_ISO_CODES_TRUE='' ++USE_IVORBIS_FALSE='' ++USE_IVORBIS_TRUE='' ++USE_LIBVISUAL_FALSE='' ++USE_LIBVISUAL_TRUE='' ++USE_NLS='yes' ++USE_OGG_FALSE='' ++USE_OGG_TRUE='' ++USE_PANGO_FALSE='' ++USE_PANGO_TRUE='' ++USE_PLUGIN_ADDER_FALSE='' ++USE_PLUGIN_ADDER_TRUE='' ++USE_PLUGIN_APP_FALSE='' ++USE_PLUGIN_APP_TRUE='' ++USE_PLUGIN_AUDIOCONVERT_FALSE='' ++USE_PLUGIN_AUDIOCONVERT_TRUE='' ++USE_PLUGIN_AUDIORATE_FALSE='' ++USE_PLUGIN_AUDIORATE_TRUE='' ++USE_PLUGIN_AUDIORESAMPLE_FALSE='' ++USE_PLUGIN_AUDIORESAMPLE_TRUE='' ++USE_PLUGIN_AUDIOTESTSRC_FALSE='' ++USE_PLUGIN_AUDIOTESTSRC_TRUE='' ++USE_PLUGIN_ENCODING_FALSE='' ++USE_PLUGIN_ENCODING_TRUE='' ++USE_PLUGIN_GIO_FALSE='' ++USE_PLUGIN_GIO_TRUE='' ++USE_PLUGIN_PLAYBACK_FALSE='' ++USE_PLUGIN_PLAYBACK_TRUE='' ++USE_PLUGIN_SUBPARSE_FALSE='' ++USE_PLUGIN_SUBPARSE_TRUE='' ++USE_PLUGIN_TCP_FALSE='' ++USE_PLUGIN_TCP_TRUE='' ++USE_PLUGIN_TYPEFIND_FALSE='' ++USE_PLUGIN_TYPEFIND_TRUE='' ++USE_PLUGIN_VIDEOCONVERT_FALSE='' ++USE_PLUGIN_VIDEOCONVERT_TRUE='' ++USE_PLUGIN_VIDEORATE_FALSE='' ++USE_PLUGIN_VIDEORATE_TRUE='' ++USE_PLUGIN_VIDEOSCALE_FALSE='' ++USE_PLUGIN_VIDEOSCALE_TRUE='' ++USE_PLUGIN_VIDEOTESTSRC_FALSE='' ++USE_PLUGIN_VIDEOTESTSRC_TRUE='' ++USE_PLUGIN_VOLUME_FALSE='' ++USE_PLUGIN_VOLUME_TRUE='' ++USE_THEORA_FALSE='' ++USE_THEORA_TRUE='' ++USE_VORBIS_FALSE='' ++USE_VORBIS_TRUE='' ++USE_XSHM_FALSE='' ++USE_XSHM_TRUE='' ++USE_XVIDEO_FALSE='' ++USE_XVIDEO_TRUE='' ++USE_X_FALSE='' ++USE_X_TRUE='' ++USE_ZLIB_FALSE='' ++USE_ZLIB_TRUE='' ++VALGRIND_CFLAGS='' ++VALGRIND_LIBS='' ++VALGRIND_PATH='no' ++VERSION='1.6.1' ++VORBIS_CFLAGS='' ++VORBIS_LIBS='' ++WARNING_CFLAGS='' ++WARNING_CXXFLAGS='' ++WIN32_LIBS='' ++XGETTEXT='/usr/bin/xgettext' ++XGETTEXT_015='/usr/bin/xgettext' ++XGETTEXT_EXTRA_OPTIONS='' ++XSHM_CFLAGS='' ++XSHM_LIBS='' ++XVIDEO_CFLAGS='' ++XVIDEO_LIBS='' ++X_CFLAGS='' ++X_LIBS='' ++ZLIB_CFLAGS='' ++ZLIB_LIBS='' ++ac_ct_AR='ar' ++ac_ct_CC='gcc' ++ac_ct_CXX='g++' ++ac_ct_DUMPBIN='' ++am__EXEEXT_FALSE='' ++am__EXEEXT_TRUE='' ++am__fastdepCC_FALSE='#' ++am__fastdepCC_TRUE='' ++am__fastdepCXX_FALSE='#' ++am__fastdepCXX_TRUE='' ++am__include='include' ++am__isrc='' ++am__leading_dot='.' ++am__nodep='_no' ++am__quote='' ++am__tar='tar --format=ustar -chf - "$$tardir"' ++am__untar='tar -xf -' ++bindir='${exec_prefix}/bin' ++build='x86_64-unknown-linux-gnu' ++build_alias='' ++build_cpu='x86_64' ++build_os='linux-gnu' ++build_vendor='unknown' ++datadir='${datarootdir}' ++datarootdir='${prefix}/share' ++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' ++dvidir='${docdir}' ++exec_prefix='NONE' ++host='x86_64-unknown-linux-gnu' ++host_alias='' ++host_cpu='x86_64' ++host_os='linux-gnu' ++host_vendor='unknown' ++htmldir='${docdir}' ++includedir='${prefix}/include' ++infodir='${datarootdir}/info' ++install_sh='${SHELL} /root/debs/gst-plugins-base-1.6.1/install-sh' ++libdir='${exec_prefix}/lib' ++libexecdir='${exec_prefix}/libexec' ++localedir='${datarootdir}/locale' ++localstatedir='${prefix}/var' ++mandir='${datarootdir}/man' ++mkdir_p='/bin/mkdir -p' ++oldincludedir='/usr/include' ++pdfdir='${docdir}' ++pkgpyexecdir='${pyexecdir}/gst-plugins-base' ++pkgpythondir='${pythondir}/gst-plugins-base' ++plugindir='' ++prefix='NONE' ++program_transform_name='s,x,x,' ++psdir='${docdir}' ++pyexecdir='${exec_prefix}/lib/python2.7/dist-packages' ++pythondir='${prefix}/lib/python2.7/dist-packages' ++runstatedir='${localstatedir}/run' ++sbindir='${exec_prefix}/sbin' ++sharedstatedir='${prefix}/com' ++sysconfdir='${prefix}/etc' ++target='x86_64-unknown-linux-gnu' ++target_alias='' ++target_cpu='x86_64' ++target_os='linux-gnu' ++target_vendor='unknown' ++ ++## ----------- ## ++## confdefs.h. ## ++## ----------- ## ++ ++/* confdefs.h */ ++#define PACKAGE_NAME "GStreamer Base Plug-ins" ++#define PACKAGE_TARNAME "gst-plugins-base" ++#define PACKAGE_VERSION "1.6.1" ++#define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++#define PACKAGE_URL "" ++#define PACKAGE "gst-plugins-base" ++#define VERSION "1.6.1" ++#define GST_API_VERSION "1.0" ++#define STDC_HEADERS 1 ++#define HAVE_SYS_TYPES_H 1 ++#define HAVE_SYS_STAT_H 1 ++#define HAVE_STDLIB_H 1 ++#define HAVE_STRING_H 1 ++#define HAVE_MEMORY_H 1 ++#define HAVE_STRINGS_H 1 ++#define HAVE_INTTYPES_H 1 ++#define HAVE_STDINT_H 1 ++#define HAVE_UNISTD_H 1 ++#define HAVE_DLFCN_H 1 ++#define LT_OBJDIR ".libs/" ++#define ENABLE_NLS 1 ++#define HAVE_GETTEXT 1 ++#define HAVE_DCGETTEXT 1 ++#define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++#define LOCALEDIR "/usr/local/share/locale" ++#define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" ++#define GST_PACKAGE_ORIGIN "Unknown package origin" ++#define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++#define HAVE_EXTERNAL /**/ ++#define HAVE_CPU_X86_64 1 ++#define HOST_CPU "x86_64" ++#define TARGET_CPU "x86_64" ++#define STDC_HEADERS 1 ++#define HAVE_XMMINTRIN_H 1 ++#define HAVE_EMMINTRIN_H 1 ++#define HAVE_SYS_SOCKET_H 1 ++#define HAVE_SYS_TYPES_H 1 ++#define HAVE_SYS_WAIT_H 1 ++#define HAVE_SYS_STAT_H 1 ++#define HAVE_LOCALTIME_R 1 ++#define HAVE_GMTIME_R 1 ++#define HAVE_LOG2 1 ++#define HAVE_FSEEKO 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_PRETTY_FUNCTION 1 ++#define HAVE_FUNCTION 1 ++#define HAVE_FUNC 1 ++#define GST_FUNCTION __PRETTY_FUNCTION__ ++#define GIO_MODULE_DIR "/usr/lib/x86_64-linux-gnu/gio/modules" ++#define GIO_LIBDIR "/usr/lib/x86_64-linux-gnu" ++#define GIO_PREFIX "/usr" ++#define HAVE_ORC 1 ++ ++configure: exit 1 +--- gst-plugins-base1.0-1.6.1.orig/config.sub ++++ gst-plugins-base1.0-1.6.1/config.sub +@@ -1,8 +1,8 @@ + #! /bin/sh + # Configuration validation subroutine script. +-# Copyright 1992-2015 Free Software Foundation, Inc. ++# Copyright 1992-2013 Free Software Foundation, Inc. + +-timestamp='2015-08-20' ++timestamp='2013-08-10' + + # This file is free software; you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by +@@ -25,7 +25,7 @@ timestamp='2015-08-20' + # of the GNU General Public License, version 3 ("GPLv3"). + + +-# Please send patches to . ++# Please send patches with a ChangeLog entry to config-patches@gnu.org. + # + # Configuration subroutine to validate and canonicalize a configuration type. + # Supply the specified configuration type as an argument. +@@ -68,7 +68,7 @@ Report bugs and patches to . ++# ++# As a special exception to the GNU General Public License, if you ++# distribute this file as part of a program that contains a ++# configuration script generated by Autoconf, you may include it under ++# the same distribution terms that you use for the rest of that ++# program. This Exception is an additional permission under section 7 ++# of the GNU General Public License, version 3 ("GPLv3"). ++ ++ ++# Please send patches to . ++# ++# Configuration subroutine to validate and canonicalize a configuration type. ++# Supply the specified configuration type as an argument. ++# If it is invalid, we print an error message on stderr and exit with code 1. ++# Otherwise, we print the canonical config type on stdout and succeed. ++ ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD ++ ++# This file is supposed to be the same for all GNU packages ++# and recognize all the CPU types, system types and aliases ++# that are meaningful with *any* GNU software. ++# Each package is responsible for reporting which valid configurations ++# it does not support. The user should be able to distinguish ++# a failure to support a valid configuration from a meaningless ++# configuration. ++ ++# The goal of this file is to map all the various variations of a given ++# machine specification into a single specification in the form: ++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM ++# or in some cases, the newer four-part form: ++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM ++# It is wrong to echo any other type of specification. ++ ++me=`echo "$0" | sed -e 's,.*/,,'` ++ ++usage="\ ++Usage: $0 [OPTION] CPU-MFR-OPSYS ++ $0 [OPTION] ALIAS ++ ++Canonicalize a configuration name. ++ ++Operation modes: ++ -h, --help print this help, then exit ++ -t, --time-stamp print date of last modification, then exit ++ -v, --version print version number, then exit ++ ++Report bugs and patches to ." ++ ++version="\ ++GNU config.sub ($timestamp) ++ ++Copyright 1992-2015 Free Software Foundation, Inc. ++ ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." ++ ++help=" ++Try \`$me --help' for more information." ++ ++# Parse command line ++while test $# -gt 0 ; do ++ case $1 in ++ --time-stamp | --time* | -t ) ++ echo "$timestamp" ; exit ;; ++ --version | -v ) ++ echo "$version" ; exit ;; ++ --help | --h* | -h ) ++ echo "$usage"; exit ;; ++ -- ) # Stop option processing ++ shift; break ;; ++ - ) # Use stdin as input. ++ break ;; ++ -* ) ++ echo "$me: invalid option $1$help" ++ exit 1 ;; ++ ++ *local*) ++ # First pass through any local machine types. ++ echo $1 ++ exit ;; ++ ++ * ) ++ break ;; ++ esac ++done ++ ++case $# in ++ 0) echo "$me: missing argument$help" >&2 ++ exit 1;; ++ 1) ;; ++ *) echo "$me: too many arguments$help" >&2 ++ exit 1;; ++esac ++ ++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). ++# Here we must recognize all the valid KERNEL-OS combinations. ++maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` ++case $maybe_os in ++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ ++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ ++ kopensolaris*-gnu* | \ ++ storm-chaos* | os2-emx* | rtmk-nova*) ++ os=-$maybe_os ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ++ ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; ++ *) ++ basic_machine=`echo $1 | sed 's/-[^-]*$//'` ++ if [ $basic_machine != $1 ] ++ then os=`echo $1 | sed 's/.*-/-/'` ++ else os=; fi ++ ;; ++esac ++ ++### Let's recognize common machines as not being operating systems so ++### that things like config.sub decstation-3100 work. We also ++### recognize some manufacturers as not being operating systems, so we ++### can provide default operating systems below. ++case $os in ++ -sun*os*) ++ # Prevent following clause from handling this invalid input. ++ ;; ++ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ ++ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ ++ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ ++ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ ++ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ ++ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ ++ -apple | -axis | -knuth | -cray | -microblaze*) ++ os= ++ basic_machine=$1 ++ ;; ++ -bluegene*) ++ os=-cnk ++ ;; ++ -sim | -cisco | -oki | -wec | -winbond) ++ os= ++ basic_machine=$1 ++ ;; ++ -scout) ++ ;; ++ -wrs) ++ os=-vxworks ++ basic_machine=$1 ++ ;; ++ -chorusos*) ++ os=-chorusos ++ basic_machine=$1 ++ ;; ++ -chorusrdb) ++ os=-chorusrdb ++ basic_machine=$1 ++ ;; ++ -hiux*) ++ os=-hiuxwe2 ++ ;; ++ -sco6) ++ os=-sco5v6 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco5) ++ os=-sco3.2v5 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco4) ++ os=-sco3.2v4 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco3.2.[4-9]*) ++ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco3.2v[4-9]*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco5v6*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco*) ++ os=-sco3.2v2 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -udk*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -isc) ++ os=-isc2.2 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -clix*) ++ basic_machine=clipper-intergraph ++ ;; ++ -isc*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -lynx*178) ++ os=-lynxos178 ++ ;; ++ -lynx*5) ++ os=-lynxos5 ++ ;; ++ -lynx*) ++ os=-lynxos ++ ;; ++ -ptx*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ++ ;; ++ -windowsnt*) ++ os=`echo $os | sed -e 's/windowsnt/winnt/'` ++ ;; ++ -psos*) ++ os=-psos ++ ;; ++ -mint | -mint[0-9]*) ++ basic_machine=m68k-atari ++ os=-mint ++ ;; ++esac ++ ++# Decode aliases for certain CPU-COMPANY combinations. ++case $basic_machine in ++ # Recognize the basic CPU types without company name. ++ # Some are omitted here because they have special meanings below. ++ 1750a | 580 \ ++ | a29k \ ++ | aarch64 | aarch64_be \ ++ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ ++ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ ++ | am33_2.0 \ ++ | arc | arceb \ ++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ ++ | avr | avr32 \ ++ | ba \ ++ | be32 | be64 \ ++ | bfin \ ++ | c4x | c8051 | clipper \ ++ | d10v | d30v | dlx | dsp16xx \ ++ | e2k | epiphany \ ++ | fido | fr30 | frv | ft32 \ ++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ++ | hexagon \ ++ | i370 | i860 | i960 | ia64 \ ++ | ip2k | iq2000 \ ++ | k1om \ ++ | le32 | le64 \ ++ | lm32 \ ++ | m32c | m32r | m32rle | m68000 | m68k | m88k \ ++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ ++ | mips | mipsbe | mipseb | mipsel | mipsle \ ++ | mips16 \ ++ | mips64 | mips64el \ ++ | mips64octeon | mips64octeonel \ ++ | mips64orion | mips64orionel \ ++ | mips64r5900 | mips64r5900el \ ++ | mips64vr | mips64vrel \ ++ | mips64vr4100 | mips64vr4100el \ ++ | mips64vr4300 | mips64vr4300el \ ++ | mips64vr5000 | mips64vr5000el \ ++ | mips64vr5900 | mips64vr5900el \ ++ | mipsisa32 | mipsisa32el \ ++ | mipsisa32r2 | mipsisa32r2el \ ++ | mipsisa32r6 | mipsisa32r6el \ ++ | mipsisa64 | mipsisa64el \ ++ | mipsisa64r2 | mipsisa64r2el \ ++ | mipsisa64r6 | mipsisa64r6el \ ++ | mipsisa64sb1 | mipsisa64sb1el \ ++ | mipsisa64sr71k | mipsisa64sr71kel \ ++ | mipsr5900 | mipsr5900el \ ++ | mipstx39 | mipstx39el \ ++ | mn10200 | mn10300 \ ++ | moxie \ ++ | mt \ ++ | msp430 \ ++ | nds32 | nds32le | nds32be \ ++ | nios | nios2 | nios2eb | nios2el \ ++ | ns16k | ns32k \ ++ | open8 | or1k | or1knd | or32 \ ++ | pdp10 | pdp11 | pj | pjl \ ++ | powerpc | powerpc64 | powerpc64le | powerpcle \ ++ | pyramid \ ++ | riscv32 | riscv64 \ ++ | rl78 | rx \ ++ | score \ ++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ ++ | sh64 | sh64le \ ++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ ++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ ++ | spu \ ++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ ++ | ubicom32 \ ++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ ++ | visium \ ++ | we32k \ ++ | x86 | xc16x | xstormy16 | xtensa \ ++ | z8k | z80) ++ basic_machine=$basic_machine-unknown ++ ;; ++ c54x) ++ basic_machine=tic54x-unknown ++ ;; ++ c55x) ++ basic_machine=tic55x-unknown ++ ;; ++ c6x) ++ basic_machine=tic6x-unknown ++ ;; ++ leon|leon[3-9]) ++ basic_machine=sparc-$basic_machine ++ ;; ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ++ ;; ++ ms1) ++ basic_machine=mt-unknown ++ ;; ++ ++ strongarm | thumb | xscale) ++ basic_machine=arm-unknown ++ ;; ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ xscaleeb) ++ basic_machine=armeb-unknown ++ ;; ++ ++ xscaleel) ++ basic_machine=armel-unknown ++ ;; ++ ++ # We use `pc' rather than `unknown' ++ # because (1) that's what they normally are, and ++ # (2) the word "unknown" tends to confuse beginning users. ++ i*86 | x86_64) ++ basic_machine=$basic_machine-pc ++ ;; ++ # Object if more than one company name word. ++ *-*-*) ++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ++ exit 1 ++ ;; ++ # Recognize the basic CPU types with company name. ++ 580-* \ ++ | a29k-* \ ++ | aarch64-* | aarch64_be-* \ ++ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ ++ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ ++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ ++ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ ++ | avr-* | avr32-* \ ++ | ba-* \ ++ | be32-* | be64-* \ ++ | bfin-* | bs2000-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ ++ | c8051-* | clipper-* | craynv-* | cydra-* \ ++ | d10v-* | d30v-* | dlx-* \ ++ | e2k-* | elxsi-* \ ++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ ++ | h8300-* | h8500-* \ ++ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ++ | hexagon-* \ ++ | i*86-* | i860-* | i960-* | ia64-* \ ++ | ip2k-* | iq2000-* \ ++ | k1om-* \ ++ | le32-* | le64-* \ ++ | lm32-* \ ++ | m32c-* | m32r-* | m32rle-* \ ++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ ++ | microblaze-* | microblazeel-* \ ++ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ ++ | mips16-* \ ++ | mips64-* | mips64el-* \ ++ | mips64octeon-* | mips64octeonel-* \ ++ | mips64orion-* | mips64orionel-* \ ++ | mips64r5900-* | mips64r5900el-* \ ++ | mips64vr-* | mips64vrel-* \ ++ | mips64vr4100-* | mips64vr4100el-* \ ++ | mips64vr4300-* | mips64vr4300el-* \ ++ | mips64vr5000-* | mips64vr5000el-* \ ++ | mips64vr5900-* | mips64vr5900el-* \ ++ | mipsisa32-* | mipsisa32el-* \ ++ | mipsisa32r2-* | mipsisa32r2el-* \ ++ | mipsisa32r6-* | mipsisa32r6el-* \ ++ | mipsisa64-* | mipsisa64el-* \ ++ | mipsisa64r2-* | mipsisa64r2el-* \ ++ | mipsisa64r6-* | mipsisa64r6el-* \ ++ | mipsisa64sb1-* | mipsisa64sb1el-* \ ++ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ ++ | mipsr5900-* | mipsr5900el-* \ ++ | mipstx39-* | mipstx39el-* \ ++ | mmix-* \ ++ | mt-* \ ++ | msp430-* \ ++ | nds32-* | nds32le-* | nds32be-* \ ++ | nios-* | nios2-* | nios2eb-* | nios2el-* \ ++ | none-* | np1-* | ns16k-* | ns32k-* \ ++ | open8-* \ ++ | or1k*-* \ ++ | orion-* \ ++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ ++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ ++ | pyramid-* \ ++ | riscv32-* | riscv64-* \ ++ | rl78-* | romp-* | rs6000-* | rx-* \ ++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ ++ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ ++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ ++ | sparclite-* \ ++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ ++ | tahoe-* \ ++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ ++ | tile*-* \ ++ | tron-* \ ++ | ubicom32-* \ ++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ ++ | vax-* \ ++ | visium-* \ ++ | we32k-* \ ++ | x86-* | x86_64-* | xc16x-* | xps100-* \ ++ | xstormy16-* | xtensa*-* \ ++ | ymp-* \ ++ | z8k-* | z80-*) ++ ;; ++ # Recognize the basic CPU types without company name, with glob match. ++ xtensa*) ++ basic_machine=$basic_machine-unknown ++ ;; ++ # Recognize the various machine names and aliases which stand ++ # for a CPU type and a company and sometimes even an OS. ++ 386bsd) ++ basic_machine=i386-unknown ++ os=-bsd ++ ;; ++ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) ++ basic_machine=m68000-att ++ ;; ++ 3b*) ++ basic_machine=we32k-att ++ ;; ++ a29khif) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ abacus) ++ basic_machine=abacus-unknown ++ ;; ++ adobe68k) ++ basic_machine=m68010-adobe ++ os=-scout ++ ;; ++ alliant | fx80) ++ basic_machine=fx80-alliant ++ ;; ++ altos | altos3068) ++ basic_machine=m68k-altos ++ ;; ++ am29k) ++ basic_machine=a29k-none ++ os=-bsd ++ ;; ++ amd64) ++ basic_machine=x86_64-pc ++ ;; ++ amd64-*) ++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ amdahl) ++ basic_machine=580-amdahl ++ os=-sysv ++ ;; ++ amiga | amiga-*) ++ basic_machine=m68k-unknown ++ ;; ++ amigaos | amigados) ++ basic_machine=m68k-unknown ++ os=-amigaos ++ ;; ++ amigaunix | amix) ++ basic_machine=m68k-unknown ++ os=-sysv4 ++ ;; ++ apollo68) ++ basic_machine=m68k-apollo ++ os=-sysv ++ ;; ++ apollo68bsd) ++ basic_machine=m68k-apollo ++ os=-bsd ++ ;; ++ aros) ++ basic_machine=i386-pc ++ os=-aros ++ ;; ++ asmjs) ++ basic_machine=asmjs-unknown ++ ;; ++ aux) ++ basic_machine=m68k-apple ++ os=-aux ++ ;; ++ balance) ++ basic_machine=ns32k-sequent ++ os=-dynix ++ ;; ++ blackfin) ++ basic_machine=bfin-unknown ++ os=-linux ++ ;; ++ blackfin-*) ++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ bluegene*) ++ basic_machine=powerpc-ibm ++ os=-cnk ++ ;; ++ c54x-*) ++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c55x-*) ++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c6x-*) ++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c90) ++ basic_machine=c90-cray ++ os=-unicos ++ ;; ++ cegcc) ++ basic_machine=arm-unknown ++ os=-cegcc ++ ;; ++ convex-c1) ++ basic_machine=c1-convex ++ os=-bsd ++ ;; ++ convex-c2) ++ basic_machine=c2-convex ++ os=-bsd ++ ;; ++ convex-c32) ++ basic_machine=c32-convex ++ os=-bsd ++ ;; ++ convex-c34) ++ basic_machine=c34-convex ++ os=-bsd ++ ;; ++ convex-c38) ++ basic_machine=c38-convex ++ os=-bsd ++ ;; ++ cray | j90) ++ basic_machine=j90-cray ++ os=-unicos ++ ;; ++ craynv) ++ basic_machine=craynv-cray ++ os=-unicosmp ++ ;; ++ cr16 | cr16-*) ++ basic_machine=cr16-unknown ++ os=-elf ++ ;; ++ crds | unos) ++ basic_machine=m68k-crds ++ ;; ++ crisv32 | crisv32-* | etraxfs*) ++ basic_machine=crisv32-axis ++ ;; ++ cris | cris-* | etrax*) ++ basic_machine=cris-axis ++ ;; ++ crx) ++ basic_machine=crx-unknown ++ os=-elf ++ ;; ++ da30 | da30-*) ++ basic_machine=m68k-da30 ++ ;; ++ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) ++ basic_machine=mips-dec ++ ;; ++ decsystem10* | dec10*) ++ basic_machine=pdp10-dec ++ os=-tops10 ++ ;; ++ decsystem20* | dec20*) ++ basic_machine=pdp10-dec ++ os=-tops20 ++ ;; ++ delta | 3300 | motorola-3300 | motorola-delta \ ++ | 3300-motorola | delta-motorola) ++ basic_machine=m68k-motorola ++ ;; ++ delta88) ++ basic_machine=m88k-motorola ++ os=-sysv3 ++ ;; ++ dicos) ++ basic_machine=i686-pc ++ os=-dicos ++ ;; ++ djgpp) ++ basic_machine=i586-pc ++ os=-msdosdjgpp ++ ;; ++ dpx20 | dpx20-*) ++ basic_machine=rs6000-bull ++ os=-bosx ++ ;; ++ dpx2* | dpx2*-bull) ++ basic_machine=m68k-bull ++ os=-sysv3 ++ ;; ++ ebmon29k) ++ basic_machine=a29k-amd ++ os=-ebmon ++ ;; ++ elxsi) ++ basic_machine=elxsi-elxsi ++ os=-bsd ++ ;; ++ encore | umax | mmax) ++ basic_machine=ns32k-encore ++ ;; ++ es1800 | OSE68k | ose68k | ose | OSE) ++ basic_machine=m68k-ericsson ++ os=-ose ++ ;; ++ fx2800) ++ basic_machine=i860-alliant ++ ;; ++ genix) ++ basic_machine=ns32k-ns ++ ;; ++ gmicro) ++ basic_machine=tron-gmicro ++ os=-sysv ++ ;; ++ go32) ++ basic_machine=i386-pc ++ os=-go32 ++ ;; ++ h3050r* | hiux*) ++ basic_machine=hppa1.1-hitachi ++ os=-hiuxwe2 ++ ;; ++ h8300hms) ++ basic_machine=h8300-hitachi ++ os=-hms ++ ;; ++ h8300xray) ++ basic_machine=h8300-hitachi ++ os=-xray ++ ;; ++ h8500hms) ++ basic_machine=h8500-hitachi ++ os=-hms ++ ;; ++ harris) ++ basic_machine=m88k-harris ++ os=-sysv3 ++ ;; ++ hp300-*) ++ basic_machine=m68k-hp ++ ;; ++ hp300bsd) ++ basic_machine=m68k-hp ++ os=-bsd ++ ;; ++ hp300hpux) ++ basic_machine=m68k-hp ++ os=-hpux ++ ;; ++ hp3k9[0-9][0-9] | hp9[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hp9k2[0-9][0-9] | hp9k31[0-9]) ++ basic_machine=m68000-hp ++ ;; ++ hp9k3[2-9][0-9]) ++ basic_machine=m68k-hp ++ ;; ++ hp9k6[0-9][0-9] | hp6[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hp9k7[0-79][0-9] | hp7[0-79][0-9]) ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k78[0-9] | hp78[0-9]) ++ # FIXME: really hppa2.0-hp ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) ++ # FIXME: really hppa2.0-hp ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[0-9][13679] | hp8[0-9][13679]) ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[0-9][0-9] | hp8[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hppa-next) ++ os=-nextstep3 ++ ;; ++ hppaosf) ++ basic_machine=hppa1.1-hp ++ os=-osf ++ ;; ++ hppro) ++ basic_machine=hppa1.1-hp ++ os=-proelf ++ ;; ++ i370-ibm* | ibm*) ++ basic_machine=i370-ibm ++ ;; ++ i*86v32) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv32 ++ ;; ++ i*86v4*) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv4 ++ ;; ++ i*86v) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv ++ ;; ++ i*86sol2) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-solaris2 ++ ;; ++ i386mach) ++ basic_machine=i386-mach ++ os=-mach ++ ;; ++ i386-vsta | vsta) ++ basic_machine=i386-unknown ++ os=-vsta ++ ;; ++ iris | iris4d) ++ basic_machine=mips-sgi ++ case $os in ++ -irix*) ++ ;; ++ *) ++ os=-irix4 ++ ;; ++ esac ++ ;; ++ isi68 | isi) ++ basic_machine=m68k-isi ++ os=-sysv ++ ;; ++ leon-*|leon[3-9]-*) ++ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ++ ;; ++ m68knommu) ++ basic_machine=m68k-unknown ++ os=-linux ++ ;; ++ m68knommu-*) ++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ m88k-omron*) ++ basic_machine=m88k-omron ++ ;; ++ magnum | m3230) ++ basic_machine=mips-mips ++ os=-sysv ++ ;; ++ merlin) ++ basic_machine=ns32k-utek ++ os=-sysv ++ ;; ++ microblaze*) ++ basic_machine=microblaze-xilinx ++ ;; ++ mingw64) ++ basic_machine=x86_64-pc ++ os=-mingw64 ++ ;; ++ mingw32) ++ basic_machine=i686-pc ++ os=-mingw32 ++ ;; ++ mingw32ce) ++ basic_machine=arm-unknown ++ os=-mingw32ce ++ ;; ++ miniframe) ++ basic_machine=m68000-convergent ++ ;; ++ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) ++ basic_machine=m68k-atari ++ os=-mint ++ ;; ++ mips3*-*) ++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ++ ;; ++ mips3*) ++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ++ ;; ++ monitor) ++ basic_machine=m68k-rom68k ++ os=-coff ++ ;; ++ morphos) ++ basic_machine=powerpc-unknown ++ os=-morphos ++ ;; ++ moxiebox) ++ basic_machine=moxie-unknown ++ os=-moxiebox ++ ;; ++ msdos) ++ basic_machine=i386-pc ++ os=-msdos ++ ;; ++ ms1-*) ++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ++ ;; ++ msys) ++ basic_machine=i686-pc ++ os=-msys ++ ;; ++ mvs) ++ basic_machine=i370-ibm ++ os=-mvs ++ ;; ++ nacl) ++ basic_machine=le32-unknown ++ os=-nacl ++ ;; ++ ncr3000) ++ basic_machine=i486-ncr ++ os=-sysv4 ++ ;; ++ netbsd386) ++ basic_machine=i386-unknown ++ os=-netbsd ++ ;; ++ netwinder) ++ basic_machine=armv4l-rebel ++ os=-linux ++ ;; ++ news | news700 | news800 | news900) ++ basic_machine=m68k-sony ++ os=-newsos ++ ;; ++ news1000) ++ basic_machine=m68030-sony ++ os=-newsos ++ ;; ++ news-3600 | risc-news) ++ basic_machine=mips-sony ++ os=-newsos ++ ;; ++ necv70) ++ basic_machine=v70-nec ++ os=-sysv ++ ;; ++ next | m*-next ) ++ basic_machine=m68k-next ++ case $os in ++ -nextstep* ) ++ ;; ++ -ns2*) ++ os=-nextstep2 ++ ;; ++ *) ++ os=-nextstep3 ++ ;; ++ esac ++ ;; ++ nh3000) ++ basic_machine=m68k-harris ++ os=-cxux ++ ;; ++ nh[45]000) ++ basic_machine=m88k-harris ++ os=-cxux ++ ;; ++ nindy960) ++ basic_machine=i960-intel ++ os=-nindy ++ ;; ++ mon960) ++ basic_machine=i960-intel ++ os=-mon960 ++ ;; ++ nonstopux) ++ basic_machine=mips-compaq ++ os=-nonstopux ++ ;; ++ np1) ++ basic_machine=np1-gould ++ ;; ++ neo-tandem) ++ basic_machine=neo-tandem ++ ;; ++ nse-tandem) ++ basic_machine=nse-tandem ++ ;; ++ nsr-tandem) ++ basic_machine=nsr-tandem ++ ;; ++ op50n-* | op60c-*) ++ basic_machine=hppa1.1-oki ++ os=-proelf ++ ;; ++ openrisc | openrisc-*) ++ basic_machine=or32-unknown ++ ;; ++ os400) ++ basic_machine=powerpc-ibm ++ os=-os400 ++ ;; ++ OSE68000 | ose68000) ++ basic_machine=m68000-ericsson ++ os=-ose ++ ;; ++ os68k) ++ basic_machine=m68k-none ++ os=-os68k ++ ;; ++ pa-hitachi) ++ basic_machine=hppa1.1-hitachi ++ os=-hiuxwe2 ++ ;; ++ paragon) ++ basic_machine=i860-intel ++ os=-osf ++ ;; ++ parisc) ++ basic_machine=hppa-unknown ++ os=-linux ++ ;; ++ parisc-*) ++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ pbd) ++ basic_machine=sparc-tti ++ ;; ++ pbb) ++ basic_machine=m68k-tti ++ ;; ++ pc532 | pc532-*) ++ basic_machine=ns32k-pc532 ++ ;; ++ pc98) ++ basic_machine=i386-pc ++ ;; ++ pc98-*) ++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentium | p5 | k5 | k6 | nexgen | viac3) ++ basic_machine=i586-pc ++ ;; ++ pentiumpro | p6 | 6x86 | athlon | athlon_*) ++ basic_machine=i686-pc ++ ;; ++ pentiumii | pentium2 | pentiumiii | pentium3) ++ basic_machine=i686-pc ++ ;; ++ pentium4) ++ basic_machine=i786-pc ++ ;; ++ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) ++ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentiumpro-* | p6-* | 6x86-* | athlon-*) ++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) ++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentium4-*) ++ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pn) ++ basic_machine=pn-gould ++ ;; ++ power) basic_machine=power-ibm ++ ;; ++ ppc | ppcbe) basic_machine=powerpc-unknown ++ ;; ++ ppc-* | ppcbe-*) ++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppcle | powerpclittle | ppc-le | powerpc-little) ++ basic_machine=powerpcle-unknown ++ ;; ++ ppcle-* | powerpclittle-*) ++ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppc64) basic_machine=powerpc64-unknown ++ ;; ++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppc64le | powerpc64little | ppc64-le | powerpc64-little) ++ basic_machine=powerpc64le-unknown ++ ;; ++ ppc64le-* | powerpc64little-*) ++ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ps2) ++ basic_machine=i386-ibm ++ ;; ++ pw32) ++ basic_machine=i586-unknown ++ os=-pw32 ++ ;; ++ rdos | rdos64) ++ basic_machine=x86_64-pc ++ os=-rdos ++ ;; ++ rdos32) ++ basic_machine=i386-pc ++ os=-rdos ++ ;; ++ rom68k) ++ basic_machine=m68k-rom68k ++ os=-coff ++ ;; ++ rm[46]00) ++ basic_machine=mips-siemens ++ ;; ++ rtpc | rtpc-*) ++ basic_machine=romp-ibm ++ ;; ++ s390 | s390-*) ++ basic_machine=s390-ibm ++ ;; ++ s390x | s390x-*) ++ basic_machine=s390x-ibm ++ ;; ++ sa29200) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ sb1) ++ basic_machine=mipsisa64sb1-unknown ++ ;; ++ sb1el) ++ basic_machine=mipsisa64sb1el-unknown ++ ;; ++ sde) ++ basic_machine=mipsisa32-sde ++ os=-elf ++ ;; ++ sei) ++ basic_machine=mips-sei ++ os=-seiux ++ ;; ++ sequent) ++ basic_machine=i386-sequent ++ ;; ++ sh) ++ basic_machine=sh-hitachi ++ os=-hms ++ ;; ++ sh5el) ++ basic_machine=sh5le-unknown ++ ;; ++ sh64) ++ basic_machine=sh64-unknown ++ ;; ++ sparclite-wrs | simso-wrs) ++ basic_machine=sparclite-wrs ++ os=-vxworks ++ ;; ++ sps7) ++ basic_machine=m68k-bull ++ os=-sysv2 ++ ;; ++ spur) ++ basic_machine=spur-unknown ++ ;; ++ st2000) ++ basic_machine=m68k-tandem ++ ;; ++ stratus) ++ basic_machine=i860-stratus ++ os=-sysv4 ++ ;; ++ strongarm-* | thumb-*) ++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ sun2) ++ basic_machine=m68000-sun ++ ;; ++ sun2os3) ++ basic_machine=m68000-sun ++ os=-sunos3 ++ ;; ++ sun2os4) ++ basic_machine=m68000-sun ++ os=-sunos4 ++ ;; ++ sun3os3) ++ basic_machine=m68k-sun ++ os=-sunos3 ++ ;; ++ sun3os4) ++ basic_machine=m68k-sun ++ os=-sunos4 ++ ;; ++ sun4os3) ++ basic_machine=sparc-sun ++ os=-sunos3 ++ ;; ++ sun4os4) ++ basic_machine=sparc-sun ++ os=-sunos4 ++ ;; ++ sun4sol2) ++ basic_machine=sparc-sun ++ os=-solaris2 ++ ;; ++ sun3 | sun3-*) ++ basic_machine=m68k-sun ++ ;; ++ sun4) ++ basic_machine=sparc-sun ++ ;; ++ sun386 | sun386i | roadrunner) ++ basic_machine=i386-sun ++ ;; ++ sv1) ++ basic_machine=sv1-cray ++ os=-unicos ++ ;; ++ symmetry) ++ basic_machine=i386-sequent ++ os=-dynix ++ ;; ++ t3e) ++ basic_machine=alphaev5-cray ++ os=-unicos ++ ;; ++ t90) ++ basic_machine=t90-cray ++ os=-unicos ++ ;; ++ tile*) ++ basic_machine=$basic_machine-unknown ++ os=-linux-gnu ++ ;; ++ tx39) ++ basic_machine=mipstx39-unknown ++ ;; ++ tx39el) ++ basic_machine=mipstx39el-unknown ++ ;; ++ toad1) ++ basic_machine=pdp10-xkl ++ os=-tops20 ++ ;; ++ tower | tower-32) ++ basic_machine=m68k-ncr ++ ;; ++ tpf) ++ basic_machine=s390x-ibm ++ os=-tpf ++ ;; ++ udi29k) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ ultra3) ++ basic_machine=a29k-nyu ++ os=-sym1 ++ ;; ++ v810 | necv810) ++ basic_machine=v810-nec ++ os=-none ++ ;; ++ vaxv) ++ basic_machine=vax-dec ++ os=-sysv ++ ;; ++ vms) ++ basic_machine=vax-dec ++ os=-vms ++ ;; ++ vpp*|vx|vx-*) ++ basic_machine=f301-fujitsu ++ ;; ++ vxworks960) ++ basic_machine=i960-wrs ++ os=-vxworks ++ ;; ++ vxworks68) ++ basic_machine=m68k-wrs ++ os=-vxworks ++ ;; ++ vxworks29k) ++ basic_machine=a29k-wrs ++ os=-vxworks ++ ;; ++ w65*) ++ basic_machine=w65-wdc ++ os=-none ++ ;; ++ w89k-*) ++ basic_machine=hppa1.1-winbond ++ os=-proelf ++ ;; ++ xbox) ++ basic_machine=i686-pc ++ os=-mingw32 ++ ;; ++ xps | xps100) ++ basic_machine=xps100-honeywell ++ ;; ++ xscale-* | xscalee[bl]-*) ++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ++ ;; ++ ymp) ++ basic_machine=ymp-cray ++ os=-unicos ++ ;; ++ z8k-*-coff) ++ basic_machine=z8k-unknown ++ os=-sim ++ ;; ++ z80-*-coff) ++ basic_machine=z80-unknown ++ os=-sim ++ ;; ++ none) ++ basic_machine=none-none ++ os=-none ++ ;; ++ ++# Here we handle the default manufacturer of certain CPU types. It is in ++# some cases the only manufacturer, in others, it is the most popular. ++ w89k) ++ basic_machine=hppa1.1-winbond ++ ;; ++ op50n) ++ basic_machine=hppa1.1-oki ++ ;; ++ op60c) ++ basic_machine=hppa1.1-oki ++ ;; ++ romp) ++ basic_machine=romp-ibm ++ ;; ++ mmix) ++ basic_machine=mmix-knuth ++ ;; ++ rs6000) ++ basic_machine=rs6000-ibm ++ ;; ++ vax) ++ basic_machine=vax-dec ++ ;; ++ pdp10) ++ # there are many clones, so DEC is not a safe bet ++ basic_machine=pdp10-unknown ++ ;; ++ pdp11) ++ basic_machine=pdp11-dec ++ ;; ++ we32k) ++ basic_machine=we32k-att ++ ;; ++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) ++ basic_machine=sh-unknown ++ ;; ++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) ++ basic_machine=sparc-sun ++ ;; ++ cydra) ++ basic_machine=cydra-cydrome ++ ;; ++ orion) ++ basic_machine=orion-highlevel ++ ;; ++ orion105) ++ basic_machine=clipper-highlevel ++ ;; ++ mac | mpw | mac-mpw) ++ basic_machine=m68k-apple ++ ;; ++ pmac | pmac-mpw) ++ basic_machine=powerpc-apple ++ ;; ++ *-unknown) ++ # Make sure to match an already-canonicalized machine name. ++ ;; ++ *) ++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ++ exit 1 ++ ;; ++esac ++ ++# Here we canonicalize certain aliases for manufacturers. ++case $basic_machine in ++ *-digital*) ++ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ++ ;; ++ *-commodore*) ++ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ++ ;; ++ *) ++ ;; ++esac ++ ++# Decode manufacturer-specific aliases for certain operating systems. ++ ++if [ x"$os" != x"" ] ++then ++case $os in ++ # First match some system type aliases ++ # that might get confused with valid system types. ++ # -solaris* is a basic system type, with this one exception. ++ -auroraux) ++ os=-auroraux ++ ;; ++ -solaris1 | -solaris1.*) ++ os=`echo $os | sed -e 's|solaris1|sunos4|'` ++ ;; ++ -solaris) ++ os=-solaris2 ++ ;; ++ -svr4*) ++ os=-sysv4 ++ ;; ++ -unixware*) ++ os=-sysv4.2uw ++ ;; ++ -gnu/linux*) ++ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ++ ;; ++ # First accept the basic system types. ++ # The portable systems comes first. ++ # Each alternative MUST END IN A *, to match a version number. ++ # -sysv* is not here because it comes later, after sysvr4. ++ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ ++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ ++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ ++ | -sym* | -kopensolaris* | -plan9* \ ++ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ ++ | -aos* | -aros* | -cloudabi* | -sortix* \ ++ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ ++ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ ++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ ++ | -bitrig* | -openbsd* | -solidbsd* \ ++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ ++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ ++ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ ++ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ ++ | -chorusos* | -chorusrdb* | -cegcc* \ ++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ ++ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ ++ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ ++ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ ++ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ ++ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ ++ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ ++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ ++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) ++ # Remember, each alternative MUST END IN *, to match a version number. ++ ;; ++ -qnx*) ++ case $basic_machine in ++ x86-* | i*86-*) ++ ;; ++ *) ++ os=-nto$os ++ ;; ++ esac ++ ;; ++ -nto-qnx*) ++ ;; ++ -nto*) ++ os=`echo $os | sed -e 's|nto|nto-qnx|'` ++ ;; ++ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ ++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ ++ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ++ ;; ++ -mac*) ++ os=`echo $os | sed -e 's|mac|macos|'` ++ ;; ++ -linux-dietlibc) ++ os=-linux-dietlibc ++ ;; ++ -linux*) ++ os=`echo $os | sed -e 's|linux|linux-gnu|'` ++ ;; ++ -sunos5*) ++ os=`echo $os | sed -e 's|sunos5|solaris2|'` ++ ;; ++ -sunos6*) ++ os=`echo $os | sed -e 's|sunos6|solaris3|'` ++ ;; ++ -opened*) ++ os=-openedition ++ ;; ++ -os400*) ++ os=-os400 ++ ;; ++ -wince*) ++ os=-wince ++ ;; ++ -osfrose*) ++ os=-osfrose ++ ;; ++ -osf*) ++ os=-osf ++ ;; ++ -utek*) ++ os=-bsd ++ ;; ++ -dynix*) ++ os=-bsd ++ ;; ++ -acis*) ++ os=-aos ++ ;; ++ -atheos*) ++ os=-atheos ++ ;; ++ -syllable*) ++ os=-syllable ++ ;; ++ -386bsd) ++ os=-bsd ++ ;; ++ -ctix* | -uts*) ++ os=-sysv ++ ;; ++ -nova*) ++ os=-rtmk-nova ++ ;; ++ -ns2 ) ++ os=-nextstep2 ++ ;; ++ -nsk*) ++ os=-nsk ++ ;; ++ # Preserve the version number of sinix5. ++ -sinix5.*) ++ os=`echo $os | sed -e 's|sinix|sysv|'` ++ ;; ++ -sinix*) ++ os=-sysv4 ++ ;; ++ -tpf*) ++ os=-tpf ++ ;; ++ -triton*) ++ os=-sysv3 ++ ;; ++ -oss*) ++ os=-sysv3 ++ ;; ++ -svr4) ++ os=-sysv4 ++ ;; ++ -svr3) ++ os=-sysv3 ++ ;; ++ -sysvr4) ++ os=-sysv4 ++ ;; ++ # This must come after -sysvr4. ++ -sysv*) ++ ;; ++ -ose*) ++ os=-ose ++ ;; ++ -es1800*) ++ os=-ose ++ ;; ++ -xenix) ++ os=-xenix ++ ;; ++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) ++ os=-mint ++ ;; ++ -aros*) ++ os=-aros ++ ;; ++ -zvmoe) ++ os=-zvmoe ++ ;; ++ -dicos*) ++ os=-dicos ++ ;; ++ -nacl*) ++ ;; ++ -none) ++ ;; ++ *) ++ # Get rid of the `-' at the beginning of $os. ++ os=`echo $os | sed 's/[^-]*-//'` ++ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 ++ exit 1 ++ ;; ++esac ++else ++ ++# Here we handle the default operating systems that come with various machines. ++# The value should be what the vendor currently ships out the door with their ++# machine or put another way, the most popular os provided with the machine. ++ ++# Note that if you're going to try to match "-MANUFACTURER" here (say, ++# "-sun"), then you have to tell the case statement up towards the top ++# that MANUFACTURER isn't an operating system. Otherwise, code above ++# will signal an error saying that MANUFACTURER isn't an operating ++# system, and we'll never get to this point. ++ ++case $basic_machine in ++ score-*) ++ os=-elf ++ ;; ++ spu-*) ++ os=-elf ++ ;; ++ *-acorn) ++ os=-riscix1.2 ++ ;; ++ arm*-rebel) ++ os=-linux ++ ;; ++ arm*-semi) ++ os=-aout ++ ;; ++ c4x-* | tic4x-*) ++ os=-coff ++ ;; ++ c8051-*) ++ os=-elf ++ ;; ++ hexagon-*) ++ os=-elf ++ ;; ++ tic54x-*) ++ os=-coff ++ ;; ++ tic55x-*) ++ os=-coff ++ ;; ++ tic6x-*) ++ os=-coff ++ ;; ++ # This must come before the *-dec entry. ++ pdp10-*) ++ os=-tops20 ++ ;; ++ pdp11-*) ++ os=-none ++ ;; ++ *-dec | vax-*) ++ os=-ultrix4.2 ++ ;; ++ m68*-apollo) ++ os=-domain ++ ;; ++ i386-sun) ++ os=-sunos4.0.2 ++ ;; ++ m68000-sun) ++ os=-sunos3 ++ ;; ++ m68*-cisco) ++ os=-aout ++ ;; ++ mep-*) ++ os=-elf ++ ;; ++ mips*-cisco) ++ os=-elf ++ ;; ++ mips*-*) ++ os=-elf ++ ;; ++ or32-*) ++ os=-coff ++ ;; ++ *-tti) # must be before sparc entry or we get the wrong os. ++ os=-sysv3 ++ ;; ++ sparc-* | *-sun) ++ os=-sunos4.1.1 ++ ;; ++ *-be) ++ os=-beos ++ ;; ++ *-haiku) ++ os=-haiku ++ ;; ++ *-ibm) ++ os=-aix ++ ;; ++ *-knuth) ++ os=-mmixware ++ ;; ++ *-wec) ++ os=-proelf ++ ;; ++ *-winbond) ++ os=-proelf ++ ;; ++ *-oki) ++ os=-proelf ++ ;; ++ *-hp) ++ os=-hpux ++ ;; ++ *-hitachi) ++ os=-hiux ++ ;; ++ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) ++ os=-sysv ++ ;; ++ *-cbm) ++ os=-amigaos ++ ;; ++ *-dg) ++ os=-dgux ++ ;; ++ *-dolphin) ++ os=-sysv3 ++ ;; ++ m68k-ccur) ++ os=-rtu ++ ;; ++ m88k-omron*) ++ os=-luna ++ ;; ++ *-next ) ++ os=-nextstep ++ ;; ++ *-sequent) ++ os=-ptx ++ ;; ++ *-crds) ++ os=-unos ++ ;; ++ *-ns) ++ os=-genix ++ ;; ++ i370-*) ++ os=-mvs ++ ;; ++ *-next) ++ os=-nextstep3 ++ ;; ++ *-gould) ++ os=-sysv ++ ;; ++ *-highlevel) ++ os=-bsd ++ ;; ++ *-encore) ++ os=-bsd ++ ;; ++ *-sgi) ++ os=-irix ++ ;; ++ *-siemens) ++ os=-sysv4 ++ ;; ++ *-masscomp) ++ os=-rtu ++ ;; ++ f30[01]-fujitsu | f700-fujitsu) ++ os=-uxpv ++ ;; ++ *-rom68k) ++ os=-coff ++ ;; ++ *-*bug) ++ os=-coff ++ ;; ++ *-apple) ++ os=-macos ++ ;; ++ *-atari*) ++ os=-mint ++ ;; ++ *) ++ os=-none ++ ;; ++esac ++fi ++ ++# Here we handle the case where we know the os, and the CPU type, but not the ++# manufacturer. We pick the logical manufacturer. ++vendor=unknown ++case $basic_machine in ++ *-unknown) ++ case $os in ++ -riscix*) ++ vendor=acorn ++ ;; ++ -sunos*) ++ vendor=sun ++ ;; ++ -cnk*|-aix*) ++ vendor=ibm ++ ;; ++ -beos*) ++ vendor=be ++ ;; ++ -hpux*) ++ vendor=hp ++ ;; ++ -mpeix*) ++ vendor=hp ++ ;; ++ -hiux*) ++ vendor=hitachi ++ ;; ++ -unos*) ++ vendor=crds ++ ;; ++ -dgux*) ++ vendor=dg ++ ;; ++ -luna*) ++ vendor=omron ++ ;; ++ -genix*) ++ vendor=ns ++ ;; ++ -mvs* | -opened*) ++ vendor=ibm ++ ;; ++ -os400*) ++ vendor=ibm ++ ;; ++ -ptx*) ++ vendor=sequent ++ ;; ++ -tpf*) ++ vendor=ibm ++ ;; ++ -vxsim* | -vxworks* | -windiss*) ++ vendor=wrs ++ ;; ++ -aux*) ++ vendor=apple ++ ;; ++ -hms*) ++ vendor=hitachi ++ ;; ++ -mpw* | -macos*) ++ vendor=apple ++ ;; ++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) ++ vendor=atari ++ ;; ++ -vos*) ++ vendor=stratus ++ ;; ++ esac ++ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ++ ;; ++esac ++ ++echo $basic_machine$os ++exit ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "timestamp='" ++# time-stamp-format: "%:y-%02m-%02d" ++# time-stamp-end: "'" ++# End: diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/2 gst-plugins-base1.0-1.6.1/debian/patches/2 --- gst-plugins-base1.0-1.4.3/debian/patches/2 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/2 2015-11-01 21:28:23.000000000 +0000 @@ -0,0 +1,443 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium + . + * sync with latest stable release + . + [ Dan Witt ] + * sync with git +Author: Dan Witt + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/win32/common/config.h-new +@@ -0,0 +1,412 @@ ++/* Autogenerated config.h created for win32 Visual Studio builds */ ++ ++/* PREFIX -- specifically added for Windows for easier moving */ ++#define PREFIX "C:\\gstreamer" ++ ++/* Define if building universal (internal helper macro) */ ++#undef AC_APPLE_UNIVERSAL_BUILD ++ ++/* The implementation that should be used for integer audio resampling witll ++ be benchmarked at runtime */ ++#undef AUDIORESAMPLE_FORMAT_AUTO ++ ++/* The float implementation should be used for integer audio resampling */ ++#undef AUDIORESAMPLE_FORMAT_FLOAT ++ ++/* The int implementation should be used for integer audio resampling */ ++#undef AUDIORESAMPLE_FORMAT_INT ++ ++/* defined if cdda headers are in a cdda/ directory */ ++#undef CDPARANOIA_HEADERS_IN_DIR ++ ++/* Default audio sink */ ++#define DEFAULT_AUDIOSINK "directsoundsink" ++ ++/* Default audio source */ ++#undef DEFAULT_AUDIOSRC ++ ++/* Default video sink */ ++#define DEFAULT_VIDEOSINK "directdrawsink" ++ ++/* Default video source */ ++#undef DEFAULT_VIDEOSRC ++ ++/* Default visualizer */ ++#define DEFAULT_VISUALIZER "goom" ++ ++/* Disable Orc */ ++#undef DISABLE_ORC ++ ++/* Define to 1 if translation of program messages to the user's native ++ language is requested. */ ++#undef ENABLE_NLS ++ ++/* gettext package name */ ++#define GETTEXT_PACKAGE "gst-plugins-base-1.0" ++ ++/* The GIO library directory. */ ++#undef GIO_LIBDIR ++ ++/* The GIO modules directory. */ ++#undef GIO_MODULE_DIR ++ ++/* The GIO install prefix. */ ++#undef GIO_PREFIX ++ ++/* major/minor version */ ++#define GST_API_VERSION "1.0" ++ ++/* system wide data directory */ ++#define GST_DATADIR PREFIX "\\share" ++ ++/* Extra platform specific plugin suffix */ ++#undef GST_EXTRA_MODULE_SUFFIX ++ ++/* macro to use to show function name */ ++#undef GST_FUNCTION ++ ++/* Defined if gcov is enabled to force a rebuild due to config.h changing */ ++#undef GST_GCOV_ENABLED ++ ++/* Defined when registry scanning through fork is unsafe */ ++#undef GST_HAVE_UNSAFE_FORK ++ ++/* plugin install helper script */ ++#define GST_INSTALL_PLUGINS_HELPER PREFIX "\\libexec\\gst-install-plugins-helper.exe" ++ ++/* Default errorlevel to use */ ++#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR ++ ++/* GStreamer license */ ++#define GST_LICENSE "LGPL" ++ ++/* package name in plugins */ ++#define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++ ++/* package origin */ ++#define GST_PACKAGE_ORIGIN "Unknown package origin" ++ ++/* GStreamer package release date/time for plugins as YYYY-MM-DD */ ++#define GST_PACKAGE_RELEASE_DATETIME "2015-10-30" ++ ++/* Define if static plugins should be built */ ++#undef GST_PLUGIN_BUILD_STATIC ++ ++/* Define to enable ALSA (used by alsa). */ ++#undef HAVE_ALSA ++ ++/* ARM NEON support is enabled */ ++#undef HAVE_ARM_NEON ++ ++/* Define to enable CDParanoia (used by cdparanoia). */ ++#undef HAVE_CDPARANOIA ++ ++/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the ++ CoreFoundation framework. */ ++#undef HAVE_CFLOCALECOPYCURRENT ++ ++/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in ++ the CoreFoundation framework. */ ++#undef HAVE_CFPREFERENCESCOPYAPPVALUE ++ ++/* Define if the target CPU is AARCH64 */ ++#undef HAVE_CPU_AARCH64 ++ ++/* Define if the target CPU is an Alpha */ ++#undef HAVE_CPU_ALPHA ++ ++/* Define if the target CPU is an ARC */ ++#undef HAVE_CPU_ARC ++ ++/* Define if the target CPU is an ARM */ ++#undef HAVE_CPU_ARM ++ ++/* Define if the target CPU is a CRIS */ ++#undef HAVE_CPU_CRIS ++ ++/* Define if the target CPU is a CRISv32 */ ++#undef HAVE_CPU_CRISV32 ++ ++/* Define if the target CPU is a HPPA */ ++#undef HAVE_CPU_HPPA ++ ++/* Define if the target CPU is an x86 */ ++#define HAVE_CPU_I386 1 ++ ++/* Define if the target CPU is a IA64 */ ++#undef HAVE_CPU_IA64 ++ ++/* Define if the target CPU is a M68K */ ++#undef HAVE_CPU_M68K ++ ++/* Define if the target CPU is a MIPS */ ++#undef HAVE_CPU_MIPS ++ ++/* Define if the target CPU is a PowerPC */ ++#undef HAVE_CPU_PPC ++ ++/* Define if the target CPU is a 64 bit PowerPC */ ++#undef HAVE_CPU_PPC64 ++ ++/* Define if the target CPU is a S390 */ ++#undef HAVE_CPU_S390 ++ ++/* Define if the target CPU is a SPARC */ ++#undef HAVE_CPU_SPARC ++ ++/* Define if the target CPU is a x86_64 */ ++#undef HAVE_CPU_X86_64 ++ ++/* Define if the GNU dcgettext() function is already present or preinstalled. ++ */ ++#undef HAVE_DCGETTEXT ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_DLFCN_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_EMMINTRIN_H ++ ++/* Define to enable building of experimental plug-ins. */ ++#undef HAVE_EXPERIMENTAL ++ ++/* Define to enable building of plug-ins with external deps. */ ++#undef HAVE_EXTERNAL ++ ++/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ ++#undef HAVE_FSEEKO ++ ++/* defined if the compiler implements __func__ */ ++#undef HAVE_FUNC ++ ++/* defined if the compiler implements __FUNCTION__ */ ++#undef HAVE_FUNCTION ++ ++/* Define if the GNU gettext() function is already present or preinstalled. */ ++#undef HAVE_GETTEXT ++ ++/* Define to enable glib GIO unix (used by gio-unix-2.0). */ ++#undef HAVE_GIO_UNIX_2_0 ++ ++/* Define to 1 if you have the `gmtime_r' function. */ ++#undef HAVE_GMTIME_R ++ ++/* Define if you have the iconv() function and it works. */ ++#undef HAVE_ICONV ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_INTTYPES_H ++ ++/* make use of iso-codes for ISO-639 */ ++#undef HAVE_ISO_CODES ++ ++/* Define to enable integer vorbis plug-in (used by ivorbisdec). */ ++#undef HAVE_IVORBIS ++ ++/* Define to 1 if you have the `asound' library (-lasound). */ ++#undef HAVE_LIBASOUND ++ ++/* Define to enable libvisual visualization library (used by libvisual). */ ++#undef HAVE_LIBVISUAL ++ ++/* Define to 1 if you have the `localtime_r' function. */ ++#undef HAVE_LOCALTIME_R ++ ++/* Define to 1 if you have the `log2' function. */ ++#undef HAVE_LOG2 ++ ++/* Define if you have C99's lrint function. */ ++#undef HAVE_LRINT ++ ++/* Define if you have C99's lrintf function. */ ++#undef HAVE_LRINTF ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_MEMORY_H ++ ++/* Defined if mmap is supported */ ++#undef HAVE_MMAP ++ ++/* Define to enable Xiph Ogg library (used by ogg). */ ++#undef HAVE_OGG ++ ++/* Use Orc */ ++#undef HAVE_ORC ++ ++/* Defined if compiling for OSX */ ++#undef HAVE_OSX ++ ++/* Define to enable Pango font rendering (used by pango). */ ++#undef HAVE_PANGO ++ ++/* defined if the compiler implements __PRETTY_FUNCTION__ */ ++#undef HAVE_PRETTY_FUNCTION ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_PROCESS_H 1 ++ ++/* Define if RDTSC is available */ ++#undef HAVE_RDTSC ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STDINT_H ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STRINGS_H ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SYS_SOCKET_H ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SYS_WAIT_H ++ ++/* Define to enable Xiph Theora video codec (used by theora). */ ++#undef HAVE_THEORA ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_UNISTD_H ++ ++/* Define if valgrind should be used */ ++#undef HAVE_VALGRIND ++ ++/* Define to enable Xiph Vorbis audio codec (used by vorbis). */ ++#undef HAVE_VORBIS ++ ++/* defined if vorbis_synthesis_restart is present */ ++#undef HAVE_VORBIS_SYNTHESIS_RESTART ++ ++/* Defined if compiling for Windows */ ++#define HAVE_WIN32 1 ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_WINSOCK2_H ++ ++/* Define to enable X libraries and plugins (used by ximagesink). */ ++#undef HAVE_X ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_XMMINTRIN_H ++ ++/* Define to enable X Shared Memory extension. */ ++#undef HAVE_XSHM ++ ++/* Define to enable X11 XVideo extensions (used by xvimagesink). */ ++#undef HAVE_XVIDEO ++ ++/* Define to enable zlib support for ID3 parsing in libgsttag. */ ++#undef HAVE_ZLIB ++ ++/* the host CPU */ ++#define HOST_CPU "i686" ++ ++/* prefix */ ++#undef ISO_CODES_PREFIX ++ ++/* */ ++#undef ISO_CODES_VERSION ++ ++/* directory in which the detected libvisual's plugins are located */ ++#undef LIBVISUAL_PLUGINSBASEDIR ++ ++/* gettext locale dir */ ++#define LOCALEDIR PREFIX "\\share\\locale" ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#undef LT_OBJDIR ++ ++/* Name of package */ ++#define PACKAGE "gst-plugins-base" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "GStreamer Base Plug-ins" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "gst-plugins-base" ++ ++/* Define to the home page for this package. */ ++#undef PACKAGE_URL ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "1.6.1" ++ ++/* directory where plugins are located */ ++#ifdef _DEBUG ++# define PLUGINDIR PREFIX "\\debug\\lib\\gstreamer-0.11" ++#else ++# define PLUGINDIR PREFIX "\\lib\\gstreamer-0.11" ++#endif ++ ++/* The size of `char', as computed by sizeof. */ ++#undef SIZEOF_CHAR ++ ++/* The size of `int', as computed by sizeof. */ ++#undef SIZEOF_INT ++ ++/* The size of `long', as computed by sizeof. */ ++#undef SIZEOF_LONG ++ ++/* The size of `short', as computed by sizeof. */ ++#undef SIZEOF_SHORT ++ ++/* The size of `void*', as computed by sizeof. */ ++#undef SIZEOF_VOIDP ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#undef STDC_HEADERS ++ ++/* the target CPU */ ++#undef TARGET_CPU ++ ++/* "Define if building for android" */ ++#undef USE_TREMOLO ++ ++/* Version number of package */ ++#define VERSION "1.6.1" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++# undef WORDS_BIGENDIAN ++# endif ++#endif ++ ++/* Enable large inode numbers on Mac OS X 10.5. */ ++#ifndef _DARWIN_USE_64_BIT_INODE ++# define _DARWIN_USE_64_BIT_INODE 1 ++#endif ++ ++/* Number of bits in a file offset, on hosts where this is settable. */ ++#undef _FILE_OFFSET_BITS ++ ++/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ ++#undef _LARGEFILE_SOURCE ++ ++/* Define for large files, on AIX-style hosts. */ ++#undef _LARGE_FILES ++ ++/* We need at least WinXP SP2 for __stat64 */ ++#undef __MSVCRT_VERSION__ diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/3 gst-plugins-base1.0-1.6.1/debian/patches/3 --- gst-plugins-base1.0-1.4.3/debian/patches/3 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/3 2015-11-01 21:47:06.000000000 +0000 @@ -0,0 +1,1390 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium + . + * sync with latest stable release + . + [ Dan Witt ] + * sync with git +Author: Dan Witt + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins-sections.new +@@ -0,0 +1,1020 @@ ++
++element-adder ++adder ++GstAdder ++ ++GstAdderClass ++GST_ADDER ++GST_ADDER_CAST ++GST_IS_ADDER ++GST_ADDER_CLASS ++GST_IS_ADDER_CLASS ++GST_TYPE_ADDER ++ ++gst_adder_get_type ++
++ ++
++element-alsasink ++alsasink ++GstAlsaSink ++ ++GstAlsaSinkClass ++GST_ALSA_SINK ++GST_ALSA_SINK_CAST ++GST_IS_ALSA_SINK ++GST_ALSA_SINK_CLASS ++GST_IS_ALSA_SINK_CLASS ++GST_TYPE_ALSA_SINK ++ ++gst_alsa_sink_get_type ++
++ ++
++element-alsasrc ++alsasrc ++GstAlsaSrc ++ ++GstAlsaSrcClass ++GST_ALSA_SRC ++GST_ALSA_SRC_CAST ++GST_IS_ALSA_SRC ++GST_ALSA_SRC_CLASS ++GST_IS_ALSA_SRC_CLASS ++GST_TYPE_ALSA_SRC ++ ++gst_alsa_src_get_type ++
++ ++
++element-appsink ++appsink ++GstAppSink ++ ++GstAppSinkClass ++GST_APP_SINK ++GST_APP_SINK_CAST ++GST_IS_APP_SINK ++GST_APP_SINK_CLASS ++GST_IS_APP_SINK_CLASS ++GST_TYPE_APP_SINK ++ ++gst_app_sink_get_type ++
++ ++
++element-appsrc ++appsrc ++GstAppSrc ++ ++GstAppSrcClass ++GST_APP_SRC ++GST_APP_SRC_CAST ++GST_IS_APP_SRC ++GST_APP_SRC_CLASS ++GST_IS_APP_SRC_CLASS ++GST_TYPE_APP_SRC ++ ++gst_app_src_get_type ++
++ ++
++element-audioconvert ++audioconvert ++GstAudioConvert ++GstAudioConvertDithering ++GstAudioConvertNoiseShaping ++ ++GstAudioConvertClass ++GST_AUDIO_CONVERT ++GST_AUDIO_CONVERT_CAST ++GST_IS_AUDIO_CONVERT ++GST_AUDIO_CONVERT_CLASS ++GST_IS_AUDIO_CONVERT_CLASS ++GST_TYPE_AUDIO_CONVERT ++ ++gst_audio_convert_get_type ++
++ ++
++element-audiorate ++audiorate ++GstAudioRate ++ ++GstAudioRateClass ++GST_AUDIO_RATE ++GST_AUDIO_RATE_CAST ++GST_IS_AUDIO_RATE ++GST_AUDIO_RATE_CLASS ++GST_IS_AUDIO_RATE_CLASS ++GST_TYPE_AUDIO_RATE ++ ++gst_audio_rate_get_type ++
++ ++
++element-audioresample ++audioresample ++GstAudioResample ++ ++GstAudioResampleClass ++GST_AUDIO_RESAMPLE ++GST_AUDIO_RESAMPLE_CAST ++GST_IS_AUDIO_RESAMPLE ++GST_AUDIO_RESAMPLE_CLASS ++GST_IS_AUDIO_RESAMPLE_CLASS ++GST_TYPE_AUDIO_RESAMPLE ++ ++gst_audio_resample_get_type ++
++ ++
++element-audiotestsrc ++audiotestsrc ++GstAudioTestSrc ++GstAudioTestSrcWave ++ ++GstAudioTestSrcClass ++GST_AUDIO_TEST_SRC ++GST_AUDIO_TEST_SRC_CAST ++GST_IS_AUDIO_TEST_SRC ++GST_AUDIO_TEST_SRC_CLASS ++GST_IS_AUDIO_TEST_SRC_CLASS ++GST_TYPE_AUDIO_TEST_SRC ++ ++gst_audio_test_src_get_type ++
++ ++
++element-cdparanoiasrc ++cdparanoiasrc ++GstCdParanoiaSrc ++ ++GstCdParanoiaSrcClass ++GST_CD_PARANOIA_SRC ++GST_CD_PARANOIA_SRC_CAST ++GST_IS_CD_PARANOIA_SRC ++GST_CD_PARANOIA_SRC_CLASS ++GST_IS_CD_PARANOIA_SRC_CLASS ++GST_TYPE_CD_PARANOIA_SRC ++ ++gst_cd_paranoia_src_get_type ++
++ ++
++element-clockoverlay ++clockoverlay ++GstClockOverlay ++ ++GstClockOverlayClass ++GST_CLOCK_OVERLAY ++GST_CLOCK_OVERLAY_CAST ++GST_IS_CLOCK_OVERLAY ++GST_CLOCK_OVERLAY_CLASS ++GST_IS_CLOCK_OVERLAY_CLASS ++GST_TYPE_CLOCK_OVERLAY ++ ++gst_clock_overlay_get_type ++
++ ++
++element-decodebin ++decodebin ++GstDecodeBin ++ ++GstDecodeBinClass ++GST_DECODE_BIN ++GST_DECODE_BIN_CAST ++GST_IS_DECODE_BIN ++GST_DECODE_BIN_CLASS ++GST_IS_DECODE_BIN_CLASS ++GST_TYPE_DECODE_BIN ++ ++gst_decode_bin_get_type ++
++ ++
++element-encodebin ++encodebin ++GstEncodeBin ++GstEncodeBinFlags ++ ++GstEncodeBinClass ++GST_ENCODE_BIN ++GST_ENCODE_BIN_CAST ++GST_IS_ENCODE_BIN ++GST_ENCODE_BIN_CLASS ++GST_IS_ENCODE_BIN_CLASS ++GST_TYPE_ENCODE_BIN ++ ++gst_encode_bin_get_type ++
++ ++
++element-giosink ++giosink ++GstGioSink ++ ++GstGioSinkClass ++GST_GIO_SINK ++GST_GIO_SINK_CAST ++GST_IS_GIO_SINK ++GST_GIO_SINK_CLASS ++GST_IS_GIO_SINK_CLASS ++GST_TYPE_GIO_SINK ++ ++gst_gio_sink_get_type ++
++ ++
++element-giosrc ++giosrc ++GstGioSrc ++ ++GstGioSrcClass ++GST_GIO_SRC ++GST_GIO_SRC_CAST ++GST_IS_GIO_SRC ++GST_GIO_SRC_CLASS ++GST_IS_GIO_SRC_CLASS ++GST_TYPE_GIO_SRC ++ ++gst_gio_src_get_type ++
++ ++
++element-giostreamsink ++giostreamsink ++GstGioStreamSink ++ ++GstGioStreamSinkClass ++GST_GIO_STREAM_SINK ++GST_GIO_STREAM_SINK_CAST ++GST_IS_GIO_STREAM_SINK ++GST_GIO_STREAM_SINK_CLASS ++GST_IS_GIO_STREAM_SINK_CLASS ++GST_TYPE_GIO_STREAM_SINK ++ ++gst_gio_stream_sink_get_type ++
++ ++
++element-giostreamsrc ++giostreamsrc ++GstGioStreamSrc ++ ++GstGioStreamSrcClass ++GST_GIO_STREAM_SRC ++GST_GIO_STREAM_SRC_CAST ++GST_IS_GIO_STREAM_SRC ++GST_GIO_STREAM_SRC_CLASS ++GST_IS_GIO_STREAM_SRC_CLASS ++GST_TYPE_GIO_STREAM_SRC ++ ++gst_gio_stream_src_get_type ++
++ ++
++element-multifdsink ++multifdsink ++GstMultiFdSink ++ ++GstMultiFdSinkClass ++GST_MULTI_FD_SINK ++GST_MULTI_FD_SINK_CAST ++GST_IS_MULTI_FD_SINK ++GST_MULTI_FD_SINK_CLASS ++GST_IS_MULTI_FD_SINK_CLASS ++GST_TYPE_MULTI_FD_SINK ++ ++gst_multi_fd_sink_get_type ++
++ ++
++element-multisocketsink ++multisocketsink ++GstMultiSocketSink ++ ++GstMultiSocketSinkClass ++GST_MULTI_SOCKET_SINK ++GST_MULTI_SOCKET_SINK_CAST ++GST_IS_MULTI_SOCKET_SINK ++GST_MULTI_SOCKET_SINK_CLASS ++GST_IS_MULTI_SOCKET_SINK_CLASS ++GST_TYPE_MULTI_SOCKET_SINK ++ ++gst_multi_socket_sink_get_type ++
++ ++
++element-oggaviparse ++oggaviparse ++GstOggAviParse ++ ++GstOggAviParseClass ++GST_OGG_AVI_PARSE ++GST_OGG_AVI_PARSE_CAST ++GST_IS_OGG_AVI_PARSE ++GST_OGG_AVI_PARSE_CLASS ++GST_IS_OGG_AVI_PARSE_CLASS ++GST_TYPE_OGG_AVI_PARSE ++ ++gst_ogg_avi_parse_get_type ++
++ ++
++element-oggdemux ++oggdemux ++GstOggDemux ++ ++GstOggDemuxClass ++GST_OGG_DEMUX ++GST_OGG_DEMUX_CAST ++GST_IS_OGG_DEMUX ++GST_OGG_DEMUX_CLASS ++GST_IS_OGG_DEMUX_CLASS ++GST_TYPE_OGG_DEMUX ++ ++gst_ogg_demux_get_type ++
++ ++
++element-oggmux ++oggmux ++GstOggMux ++ ++GstOggMuxClass ++GST_OGG_MUX ++GST_OGG_MUX_CAST ++GST_IS_OGG_MUX ++GST_OGG_MUX_CLASS ++GST_IS_OGG_MUX_CLASS ++GST_TYPE_OGG_MUX ++ ++gst_ogg_mux_get_type ++
++ ++
++element-oggparse ++oggparse ++GstOggParse ++ ++GstOggParseClass ++GST_OGG_PARSE ++GST_OGG_PARSE_CAST ++GST_IS_OGG_PARSE ++GST_OGG_PARSE_CLASS ++GST_IS_OGG_PARSE_CLASS ++GST_TYPE_OGG_PARSE ++ ++gst_ogg_parse_get_type ++
++ ++
++element-ogmaudioparse ++ogmaudioparse ++GstOgmAudioParse ++ ++GstOgmAudioParseClass ++GST_OGM_AUDIO_PARSE ++GST_OGM_AUDIO_PARSE_CAST ++GST_IS_OGM_AUDIO_PARSE ++GST_OGM_AUDIO_PARSE_CLASS ++GST_IS_OGM_AUDIO_PARSE_CLASS ++GST_TYPE_OGM_AUDIO_PARSE ++ ++gst_ogm_audio_parse_get_type ++
++ ++
++element-ogmtextparse ++ogmtextparse ++GstOgmTextParse ++ ++GstOgmTextParseClass ++GST_OGM_TEXT_PARSE ++GST_OGM_TEXT_PARSE_CAST ++GST_IS_OGM_TEXT_PARSE ++GST_OGM_TEXT_PARSE_CLASS ++GST_IS_OGM_TEXT_PARSE_CLASS ++GST_TYPE_OGM_TEXT_PARSE ++ ++gst_ogm_text_parse_get_type ++
++ ++
++element-ogmvideoparse ++ogmvideoparse ++GstOgmVideoParse ++ ++GstOgmVideoParseClass ++GST_OGM_VIDEO_PARSE ++GST_OGM_VIDEO_PARSE_CAST ++GST_IS_OGM_VIDEO_PARSE ++GST_OGM_VIDEO_PARSE_CLASS ++GST_IS_OGM_VIDEO_PARSE_CLASS ++GST_TYPE_OGM_VIDEO_PARSE ++ ++gst_ogm_video_parse_get_type ++
++ ++
++element-playbin ++playbin ++GstPlayBin ++ ++GstPlayBinClass ++GST_PLAY_BIN ++GST_PLAY_BIN_CAST ++GST_IS_PLAY_BIN ++GST_PLAY_BIN_CLASS ++GST_IS_PLAY_BIN_CLASS ++GST_TYPE_PLAY_BIN ++ ++gst_play_bin_get_type ++
++ ++
++element-playsink ++playsink ++GstPlaySink ++GstPlaySinkSendEventMode ++ ++GstPlaySinkClass ++GST_PLAY_SINK ++GST_PLAY_SINK_CAST ++GST_IS_PLAY_SINK ++GST_PLAY_SINK_CLASS ++GST_IS_PLAY_SINK_CLASS ++GST_TYPE_PLAY_SINK ++ ++gst_play_sink_get_type ++
++ ++
++element-socketsrc ++socketsrc ++GstSocketSrc ++ ++GstSocketSrcClass ++GST_SOCKET_SRC ++GST_SOCKET_SRC_CAST ++GST_IS_SOCKET_SRC ++GST_SOCKET_SRC_CLASS ++GST_IS_SOCKET_SRC_CLASS ++GST_TYPE_SOCKET_SRC ++ ++gst_socket_src_get_type ++
++ ++
++element-ssaparse ++ssaparse ++GstSsaParse ++ ++GstSsaParseClass ++GST_SSA_PARSE ++GST_SSA_PARSE_CAST ++GST_IS_SSA_PARSE ++GST_SSA_PARSE_CLASS ++GST_IS_SSA_PARSE_CLASS ++GST_TYPE_SSA_PARSE ++ ++gst_ssa_parse_get_type ++
++ ++
++element-streamsynchronizer ++streamsynchronizer ++GstStreamSynchronizer ++ ++GstStreamSynchronizerClass ++GST_STREAM_SYNCHRONIZER ++GST_STREAM_SYNCHRONIZER_CAST ++GST_IS_STREAM_SYNCHRONIZER ++GST_STREAM_SYNCHRONIZER_CLASS ++GST_IS_STREAM_SYNCHRONIZER_CLASS ++GST_TYPE_STREAM_SYNCHRONIZER ++ ++gst_stream_synchronizer_get_type ++
++ ++
++element-subparse ++subparse ++GstSubParse ++ ++GstSubParseClass ++GST_SUB_PARSE ++GST_SUB_PARSE_CAST ++GST_IS_SUB_PARSE ++GST_SUB_PARSE_CLASS ++GST_IS_SUB_PARSE_CLASS ++GST_TYPE_SUB_PARSE ++ ++gst_sub_parse_get_type ++
++ ++
++element-subtitleoverlay ++subtitleoverlay ++GstSubtitleOverlay ++ ++GstSubtitleOverlayClass ++GST_SUBTITLE_OVERLAY ++GST_SUBTITLE_OVERLAY_CAST ++GST_IS_SUBTITLE_OVERLAY ++GST_SUBTITLE_OVERLAY_CLASS ++GST_IS_SUBTITLE_OVERLAY_CLASS ++GST_TYPE_SUBTITLE_OVERLAY ++ ++gst_subtitle_overlay_get_type ++
++ ++
++element-tcpclientsink ++tcpclientsink ++GstTCPClientSink ++ ++GstTCPClientSinkClass ++GST_TCP_CLIENT_SINK ++GST_TCP_CLIENT_SINK_CAST ++GST_IS_TCP_CLIENT_SINK ++GST_TCP_CLIENT_SINK_CLASS ++GST_IS_TCP_CLIENT_SINK_CLASS ++GST_TYPE_TCP_CLIENT_SINK ++ ++gst_tcp_client_sink_get_type ++
++ ++
++element-tcpclientsrc ++tcpclientsrc ++GstTCPClientSrc ++ ++GstTCPClientSrcClass ++GST_TCP_CLIENT_SRC ++GST_TCP_CLIENT_SRC_CAST ++GST_IS_TCP_CLIENT_SRC ++GST_TCP_CLIENT_SRC_CLASS ++GST_IS_TCP_CLIENT_SRC_CLASS ++GST_TYPE_TCP_CLIENT_SRC ++ ++gst_tcp_client_src_get_type ++
++ ++
++element-tcpserversink ++tcpserversink ++GstTCPServerSink ++ ++GstTCPServerSinkClass ++GST_TCP_SERVER_SINK ++GST_TCP_SERVER_SINK_CAST ++GST_IS_TCP_SERVER_SINK ++GST_TCP_SERVER_SINK_CLASS ++GST_IS_TCP_SERVER_SINK_CLASS ++GST_TYPE_TCP_SERVER_SINK ++ ++gst_tcp_server_sink_get_type ++
++ ++
++element-tcpserversrc ++tcpserversrc ++GstTCPServerSrc ++ ++GstTCPServerSrcClass ++GST_TCP_SERVER_SRC ++GST_TCP_SERVER_SRC_CAST ++GST_IS_TCP_SERVER_SRC ++GST_TCP_SERVER_SRC_CLASS ++GST_IS_TCP_SERVER_SRC_CLASS ++GST_TYPE_TCP_SERVER_SRC ++ ++gst_tcp_server_src_get_type ++
++ ++
++element-textoverlay ++textoverlay ++GstTextOverlay ++ ++GstTextOverlayClass ++GST_TEXT_OVERLAY ++GST_TEXT_OVERLAY_CAST ++GST_IS_TEXT_OVERLAY ++GST_TEXT_OVERLAY_CLASS ++GST_IS_TEXT_OVERLAY_CLASS ++GST_TYPE_TEXT_OVERLAY ++ ++gst_text_overlay_get_type ++
++ ++
++element-textrender ++textrender ++GstTextRender ++GstTextRenderHAlign ++GstTextRenderLineAlign ++GstTextRenderVAlign ++ ++GstTextRenderClass ++GST_TEXT_RENDER ++GST_TEXT_RENDER_CAST ++GST_IS_TEXT_RENDER ++GST_TEXT_RENDER_CLASS ++GST_IS_TEXT_RENDER_CLASS ++GST_TYPE_TEXT_RENDER ++ ++gst_text_render_get_type ++
++ ++
++element-theoradec ++theoradec ++GstTheoraDec ++ ++GstTheoraDecClass ++GST_THEORA_DEC ++GST_THEORA_DEC_CAST ++GST_IS_THEORA_DEC ++GST_THEORA_DEC_CLASS ++GST_IS_THEORA_DEC_CLASS ++GST_TYPE_THEORA_DEC ++ ++gst_theora_dec_get_type ++
++ ++
++element-theoraenc ++theoraenc ++GstTheoraEnc ++GstTheoraEncMultipassMode ++ ++GstTheoraEncClass ++GST_THEORA_ENC ++GST_THEORA_ENC_CAST ++GST_IS_THEORA_ENC ++GST_THEORA_ENC_CLASS ++GST_IS_THEORA_ENC_CLASS ++GST_TYPE_THEORA_ENC ++ ++gst_theora_enc_get_type ++
++ ++
++element-theoraparse ++theoraparse ++GstTheoraParse ++ ++GstTheoraParseClass ++GST_THEORA_PARSE ++GST_THEORA_PARSE_CAST ++GST_IS_THEORA_PARSE ++GST_THEORA_PARSE_CLASS ++GST_IS_THEORA_PARSE_CLASS ++GST_TYPE_THEORA_PARSE ++ ++gst_theora_parse_get_type ++
++ ++
++element-timeoverlay ++timeoverlay ++GstTimeOverlay ++GstTimeOverlayTimeLine ++ ++GstTimeOverlayClass ++GST_TIME_OVERLAY ++GST_TIME_OVERLAY_CAST ++GST_IS_TIME_OVERLAY ++GST_TIME_OVERLAY_CLASS ++GST_IS_TIME_OVERLAY_CLASS ++GST_TYPE_TIME_OVERLAY ++ ++gst_time_overlay_get_type ++
++ ++
++element-uridecodebin ++uridecodebin ++GstURIDecodeBin ++ ++GstURIDecodeBinClass ++GST_URI_DECODE_BIN ++GST_URI_DECODE_BIN_CAST ++GST_IS_URI_DECODE_BIN ++GST_URI_DECODE_BIN_CLASS ++GST_IS_URI_DECODE_BIN_CLASS ++GST_TYPE_URI_DECODE_BIN ++ ++gst_uri_decode_bin_get_type ++
++ ++
++element-videoconvert ++videoconvert ++GstVideoConvert ++ ++GstVideoConvertClass ++GST_VIDEO_CONVERT ++GST_VIDEO_CONVERT_CAST ++GST_IS_VIDEO_CONVERT ++GST_VIDEO_CONVERT_CLASS ++GST_IS_VIDEO_CONVERT_CLASS ++GST_TYPE_VIDEO_CONVERT ++ ++gst_video_convert_get_type ++
++ ++
++element-videorate ++videorate ++GstVideoRate ++ ++GstVideoRateClass ++GST_VIDEO_RATE ++GST_VIDEO_RATE_CAST ++GST_IS_VIDEO_RATE ++GST_VIDEO_RATE_CLASS ++GST_IS_VIDEO_RATE_CLASS ++GST_TYPE_VIDEO_RATE ++ ++gst_video_rate_get_type ++
++ ++
++element-videoscale ++videoscale ++GstVideoScale ++GstVideoScaleMethod ++ ++GstVideoScaleClass ++GST_VIDEO_SCALE ++GST_VIDEO_SCALE_CAST ++GST_IS_VIDEO_SCALE ++GST_VIDEO_SCALE_CLASS ++GST_IS_VIDEO_SCALE_CLASS ++GST_TYPE_VIDEO_SCALE ++ ++gst_video_scale_get_type ++
++ ++
++element-videotestsrc ++videotestsrc ++GstVideoTestSrc ++GstVideoTestSrcPattern ++ ++GstVideoTestSrcClass ++GST_VIDEO_TEST_SRC ++GST_VIDEO_TEST_SRC_CAST ++GST_IS_VIDEO_TEST_SRC ++GST_VIDEO_TEST_SRC_CLASS ++GST_IS_VIDEO_TEST_SRC_CLASS ++GST_TYPE_VIDEO_TEST_SRC ++ ++gst_video_test_src_get_type ++
++ ++
++element-libvisual_bumpscope ++libvisual_bumpscope ++GstVisualbumpscope ++ ++GstVisualbumpscopeClass ++GST_VISUALBUMPSCOPE ++GST_VISUALBUMPSCOPE_CAST ++GST_IS_VISUALBUMPSCOPE ++GST_VISUALBUMPSCOPE_CLASS ++GST_IS_VISUALBUMPSCOPE_CLASS ++GST_TYPE_VISUALBUMPSCOPE ++ ++gst_visualbumpscope_get_type ++
++ ++
++element-libvisual_corona ++libvisual_corona ++GstVisualcorona ++ ++GstVisualcoronaClass ++GST_VISUALCORONA ++GST_VISUALCORONA_CAST ++GST_IS_VISUALCORONA ++GST_VISUALCORONA_CLASS ++GST_IS_VISUALCORONA_CLASS ++GST_TYPE_VISUALCORONA ++ ++gst_visualcorona_get_type ++
++ ++
++element-libvisual_infinite ++libvisual_infinite ++GstVisualinfinite ++ ++GstVisualinfiniteClass ++GST_VISUALINFINITE ++GST_VISUALINFINITE_CAST ++GST_IS_VISUALINFINITE ++GST_VISUALINFINITE_CLASS ++GST_IS_VISUALINFINITE_CLASS ++GST_TYPE_VISUALINFINITE ++ ++gst_visualinfinite_get_type ++
++ ++
++element-libvisual_jakdaw ++libvisual_jakdaw ++GstVisualjakdaw ++ ++GstVisualjakdawClass ++GST_VISUALJAKDAW ++GST_VISUALJAKDAW_CAST ++GST_IS_VISUALJAKDAW ++GST_VISUALJAKDAW_CLASS ++GST_IS_VISUALJAKDAW_CLASS ++GST_TYPE_VISUALJAKDAW ++ ++gst_visualjakdaw_get_type ++
++ ++
++element-libvisual_jess ++libvisual_jess ++GstVisualjess ++ ++GstVisualjessClass ++GST_VISUALJESS ++GST_VISUALJESS_CAST ++GST_IS_VISUALJESS ++GST_VISUALJESS_CLASS ++GST_IS_VISUALJESS_CLASS ++GST_TYPE_VISUALJESS ++ ++gst_visualjess_get_type ++
++ ++
++element-libvisual_lv_analyzer ++libvisual_lv_analyzer ++GstVisuallv_analyzer ++ ++GstVisuallv_analyzerClass ++GST_VISUALLV_ANALYZER ++GST_VISUALLV_ANALYZER_CAST ++GST_IS_VISUALLV_ANALYZER ++GST_VISUALLV_ANALYZER_CLASS ++GST_IS_VISUALLV_ANALYZER_CLASS ++GST_TYPE_VISUALLV_ANALYZER ++ ++gst_visuallv_analyzer_get_type ++
++ ++
++element-libvisual_lv_scope ++libvisual_lv_scope ++GstVisuallv_scope ++ ++GstVisuallv_scopeClass ++GST_VISUALLV_SCOPE ++GST_VISUALLV_SCOPE_CAST ++GST_IS_VISUALLV_SCOPE ++GST_VISUALLV_SCOPE_CLASS ++GST_IS_VISUALLV_SCOPE_CLASS ++GST_TYPE_VISUALLV_SCOPE ++ ++gst_visuallv_scope_get_type ++
++ ++
++element-libvisual_oinksie ++libvisual_oinksie ++GstVisualoinksie ++ ++GstVisualoinksieClass ++GST_VISUALOINKSIE ++GST_VISUALOINKSIE_CAST ++GST_IS_VISUALOINKSIE ++GST_VISUALOINKSIE_CLASS ++GST_IS_VISUALOINKSIE_CLASS ++GST_TYPE_VISUALOINKSIE ++ ++gst_visualoinksie_get_type ++
++ ++
++element-volume ++volume ++GstVolume ++ ++GstVolumeClass ++GST_VOLUME ++GST_VOLUME_CAST ++GST_IS_VOLUME ++GST_VOLUME_CLASS ++GST_IS_VOLUME_CLASS ++GST_TYPE_VOLUME ++ ++gst_volume_get_type ++
++ ++
++element-vorbisdec ++vorbisdec ++GstVorbisDec ++ ++GstVorbisDecClass ++GST_VORBIS_DEC ++GST_VORBIS_DEC_CAST ++GST_IS_VORBIS_DEC ++GST_VORBIS_DEC_CLASS ++GST_IS_VORBIS_DEC_CLASS ++GST_TYPE_VORBIS_DEC ++ ++gst_vorbis_dec_get_type ++
++ ++
++element-vorbisenc ++vorbisenc ++GstVorbisEnc ++ ++GstVorbisEncClass ++GST_VORBIS_ENC ++GST_VORBIS_ENC_CAST ++GST_IS_VORBIS_ENC ++GST_VORBIS_ENC_CLASS ++GST_IS_VORBIS_ENC_CLASS ++GST_TYPE_VORBIS_ENC ++ ++gst_vorbis_enc_get_type ++
++ ++
++element-vorbisparse ++vorbisparse ++GstVorbisParse ++ ++GstVorbisParseClass ++GST_VORBIS_PARSE ++GST_VORBIS_PARSE_CAST ++GST_IS_VORBIS_PARSE ++GST_VORBIS_PARSE_CLASS ++GST_IS_VORBIS_PARSE_CLASS ++GST_TYPE_VORBIS_PARSE ++ ++gst_vorbis_parse_get_type ++
++ ++
++element-vorbistag ++vorbistag ++GstVorbisTag ++ ++GstVorbisTagClass ++GST_VORBIS_TAG ++GST_VORBIS_TAG_CAST ++GST_IS_VORBIS_TAG ++GST_VORBIS_TAG_CLASS ++GST_IS_VORBIS_TAG_CLASS ++GST_TYPE_VORBIS_TAG ++ ++gst_vorbis_tag_get_type ++
++ ++
++element-ximagesink ++ximagesink ++GstXImageSink ++ ++GstXImageSinkClass ++GST_X_IMAGE_SINK ++GST_X_IMAGE_SINK_CAST ++GST_IS_X_IMAGE_SINK ++GST_X_IMAGE_SINK_CLASS ++GST_IS_X_IMAGE_SINK_CLASS ++GST_TYPE_X_IMAGE_SINK ++ ++gst_x_image_sink_get_type ++
++ ++
++element-xvimagesink ++xvimagesink ++GstXvImageSink ++ ++GstXvImageSinkClass ++GST_XV_IMAGE_SINK ++GST_XV_IMAGE_SINK_CAST ++GST_IS_XV_IMAGE_SINK ++GST_XV_IMAGE_SINK_CLASS ++GST_IS_XV_IMAGE_SINK_CLASS ++GST_TYPE_XV_IMAGE_SINK ++ ++gst_xv_image_sink_get_type ++
++ +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-adder.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-adder.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + adder +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-alsa.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-alsa.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + alsasink +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-app.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-app.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + appsink +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-audioconvert.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioconvert.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + audioconvert +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-audiorate.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiorate.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + audiorate +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-audioresample.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioresample.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + audioresample +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-audiotestsrc.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiotestsrc.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + audiotestsrc +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-cdparanoia.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-cdparanoia.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + cdparanoiasrc +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-encoding.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-encoding.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + encodebin +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-gio.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-gio.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + giosink +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-libvisual.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-libvisual.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + libvisual_bumpscope +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-ogg.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ogg.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + oggaviparse +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-pango.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-pango.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + clockoverlay +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-playback.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-playback.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + decodebin +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-subparse.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-subparse.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + ssaparse +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-tcp.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-tcp.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + multifdsink +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-theora.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-theora.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + theoradec +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-typefindfunctions.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-typefindfunctions.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + +\ No newline at end of file +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-videoconvert.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoconvert.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + videoconvert +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-videorate.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videorate.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + videorate +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-videoscale.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoscale.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + videoscale +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-videotestsrc.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videotestsrc.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + videotestsrc +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-volume.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-volume.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + volume +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-vorbis.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-vorbis.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + vorbisdec +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-ximagesink.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ximagesink.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + ximagesink +--- gst-plugins-base1.0-1.6.1.orig/docs/plugins/inspect/plugin-xvimagesink.xml ++++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-xvimagesink.xml +@@ -6,8 +6,8 @@ + 1.6.1 + LGPL + gst-plugins-base +- GStreamer Base Plug-ins source release +- Unknown package origin ++ GStreamer Base Plugins (Ubuntu) ++ https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 + + + xvimagesink diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/orc_in_system gst-plugins-base1.0-1.6.1/debian/patches/orc_in_system --- gst-plugins-base1.0-1.4.3/debian/patches/orc_in_system 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/orc_in_system 2015-11-02 17:02:10.000000000 +0000 @@ -0,0 +1,11102 @@ +Description: orc files are in /usr/* instead of /usr/local/* + per packaging guidelines, don't make changes to /usr/local + . + gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium + . + * sync with latest stable release + . + [ Dan Witt ] + * sync with git +Author: Dan Witt + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/Makefile +@@ -0,0 +1,1311 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# various tests to make sure we dist the win32 stuff (for MSVC builds) right ++ ++# include this snippet to add a common release: target by using ++# include $(top_srcdir)/common/release.mak ++ ++# checks for left-over files in the (usually uninstalled) tree, ie. for ++# stuff that best be deleted to avoid problems like having old plugin binaries ++# lying around. ++# ++# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++DIST_COMMON = $(top_srcdir)/common/win32.mak \ ++ $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak \ ++ $(top_srcdir)/common/coverage/lcov.mak \ ++ $(top_srcdir)/common/cruft.mak INSTALL NEWS README AUTHORS \ ++ ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ ++ $(top_srcdir)/configure $(am__configure_deps) \ ++ $(srcdir)/config.h.in $(srcdir)/gst-plugins-base.spec.in \ ++ ABOUT-NLS COPYING COPYING.LIB compile config.guess \ ++ config.rpath config.sub install-sh missing ltmain.sh ++subdir = . ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ ++ configure.lineno config.status.lineno ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = config.h ++CONFIG_CLEAN_FILES = gst-plugins-base.spec ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ cscope distdir dist dist-all distcheck ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ ++ $(LISP)config.h.in ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++CSCOPE = cscope ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++distdir = $(PACKAGE)-$(VERSION) ++top_distdir = $(distdir) ++am__remove_distdir = \ ++ if test -d "$(distdir)"; then \ ++ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ ++ && rm -rf "$(distdir)" \ ++ || { sleep 5 && rm -rf "$(distdir)"; }; \ ++ else :; fi ++am__post_remove_distdir = $(am__remove_distdir) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++GZIP_ENV = --best ++DIST_ARCHIVES = $(distdir).tar.xz ++DIST_TARGETS = dist-xz ++distuninstallcheck_listfiles = find . -type f -print ++am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ ++ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' ++distcleancheck_listfiles = find . -type f -print ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/include/orc-0.4 ++ORC_LIBS = -L/usr/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ++top_builddir = . ++top_srcdir = . ++DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc ++#SUBDIRS_EXT = ++SUBDIRS_EXT = ext ++SUBDIRS = \ ++ pkgconfig \ ++ gst-libs \ ++ gst sys $(SUBDIRS_EXT) \ ++ tools \ ++ tests \ ++ docs \ ++ po \ ++ common \ ++ m4 ++ ++DIST_SUBDIRS = \ ++ pkgconfig \ ++ docs \ ++ gst-libs \ ++ gst sys ext \ ++ tools \ ++ tests \ ++ po \ ++ common \ ++ m4 ++ ++ ++# the MANIFEST contains all win32 related files that should be disted ++win32 = $(shell cat $(top_srcdir)/win32/MANIFEST) ++ ++# wildcard is apparently not portable to other makes, hence the use of find ++# these are library .def files with the symbols to export ++win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def') ++ ++# wildcard is apparently not portable to other makes, hence the use of find ++# these are files that need to be disted with CRLF line endings: ++win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp') ++ ++# include before EXTRA_DIST for win32 assignment ++EXTRA_DIST = \ ++ gst-plugins-base.spec depcomp \ ++ AUTHORS COPYING COPYING.LIB NEWS README RELEASE REQUIREMENTS \ ++ ChangeLog gst-plugins-base.doap autogen.sh $(win32) ++ ++DISTCLEANFILES = _stdint.h ++WIN32_COPY = \ ++ $(top_builddir)/gst-libs/gst/*/*-enumtypes.[ch] \ ++ $(top_builddir)/_stdint.h ++ ++ ++# cruft: plugins that have been merged or moved or renamed ++CRUFT_FILES = \ ++ $(top_builddir)/common/shave \ ++ $(top_builddir)/common/shave-libtool \ ++ $(top_builddir)/gst-libs/gst/audio/testchannels \ ++ $(top_builddir)/tests/check/elements/gdppay \ ++ $(top_builddir)/tests/check/elements/gdpdepay \ ++ $(top_builddir)/tests/check/pipelines/streamheader \ ++ $(top_builddir)/tests/examples/audio/testchannels \ ++ $(top_builddir)/tests/examples/volume/volume \ ++ $(top_builddir)/tools/gst-discoverer ++ ++CRUFT_DIRS = \ ++ $(top_srcdir)/docs/plugins/tmpl \ ++ $(top_srcdir)/ext/gio \ ++ $(top_srcdir)/gst/gdp \ ++ $(top_srcdir)/sys/v4l \ ++ $(top_srcdir)/tests/examples/v4l ++ ++all: config.h ++ $(MAKE) $(AM_MAKEFLAGS) all-recursive ++ ++.SUFFIXES: ++am--refresh: Makefile ++ @: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ ++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ ++ && exit 0; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ echo ' $(SHELL) ./config.status'; \ ++ $(SHELL) ./config.status;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ $(SHELL) ./config.status --recheck ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ $(am__cd) $(srcdir) && $(AUTOCONF) ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) ++$(am__aclocal_m4_deps): ++ ++config.h: stamp-h1 ++ @test -f $@ || rm -f stamp-h1 ++ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 ++ ++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status ++ @rm -f stamp-h1 ++ cd $(top_builddir) && $(SHELL) ./config.status config.h ++$(srcdir)/config.h.in: # $(am__configure_deps) ++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) ++ rm -f stamp-h1 ++ touch $@ ++ ++distclean-hdr: ++ -rm -f config.h stamp-h1 ++gst-plugins-base.spec: $(top_builddir)/config.status $(srcdir)/gst-plugins-base.spec.in ++ cd $(top_builddir) && $(SHELL) ./config.status $@ ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++distclean-libtool: ++ -rm -f libtool config.lt ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscope: cscope.files ++ test ! -s cscope.files \ ++ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) ++clean-cscope: ++ -rm -f cscope.files ++cscope.files: clean-cscope cscopelist ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files ++ ++distdir: $(DISTFILES) ++ $(am__remove_distdir) ++ test -d "$(distdir)" || mkdir "$(distdir)" ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$(top_distdir)" distdir="$(distdir)" \ ++ dist-hook ++ -test -n "$(am__skip_mode_fix)" \ ++ || find "$(distdir)" -type d ! -perm -755 \ ++ -exec chmod u+rwx,go+rx {} \; -o \ ++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ ++ || chmod -R a+r "$(distdir)" ++dist-gzip: distdir ++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz ++ $(am__post_remove_distdir) ++ ++dist-bzip2: distdir ++ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 ++ $(am__post_remove_distdir) ++ ++dist-lzip: distdir ++ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz ++ $(am__post_remove_distdir) ++dist-xz: distdir ++ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz ++ $(am__post_remove_distdir) ++ ++dist-tarZ: distdir ++ @echo WARNING: "Support for shar distribution archives is" \ ++ "deprecated." >&2 ++ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 ++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z ++ $(am__post_remove_distdir) ++ ++dist-shar: distdir ++ @echo WARNING: "Support for distribution archives compressed with" \ ++ "legacy program 'compress' is deprecated." >&2 ++ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 ++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz ++ $(am__post_remove_distdir) ++ ++dist-zip: distdir ++ -rm -f $(distdir).zip ++ zip -rq $(distdir).zip $(distdir) ++ $(am__post_remove_distdir) ++ ++dist dist-all: ++ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' ++ $(am__post_remove_distdir) ++ ++# This target untars the dist file and tries a VPATH configuration. Then ++# it guarantees that the distribution is self-contained by making another ++# tarfile. ++distcheck: dist ++ case '$(DIST_ARCHIVES)' in \ ++ *.tar.gz*) \ ++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ ++ *.tar.bz2*) \ ++ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ ++ *.tar.lz*) \ ++ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ ++ *.tar.xz*) \ ++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ ++ *.tar.Z*) \ ++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ ++ *.shar.gz*) \ ++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ ++ *.zip*) \ ++ unzip $(distdir).zip ;;\ ++ esac ++ chmod -R a-w $(distdir) ++ chmod u+w $(distdir) ++ mkdir $(distdir)/_build $(distdir)/_inst ++ chmod a-w $(distdir) ++ test -d $(distdir)/_build || exit 0; \ ++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ ++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ ++ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ ++ && am__cwd=`pwd` \ ++ && $(am__cd) $(distdir)/_build \ ++ && ../configure \ ++ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ ++ $(DISTCHECK_CONFIGURE_FLAGS) \ ++ --srcdir=.. --prefix="$$dc_install_base" \ ++ && $(MAKE) $(AM_MAKEFLAGS) \ ++ && $(MAKE) $(AM_MAKEFLAGS) dvi \ ++ && $(MAKE) $(AM_MAKEFLAGS) check \ ++ && $(MAKE) $(AM_MAKEFLAGS) install \ ++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ ++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ ++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ ++ distuninstallcheck \ ++ && chmod -R a-w "$$dc_install_base" \ ++ && ({ \ ++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ ++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ ++ } || { rm -rf "$$dc_destdir"; exit 1; }) \ ++ && rm -rf "$$dc_destdir" \ ++ && $(MAKE) $(AM_MAKEFLAGS) dist \ ++ && rm -rf $(DIST_ARCHIVES) \ ++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ ++ && cd "$$am__cwd" \ ++ || exit 1 ++ $(am__post_remove_distdir) ++ @(echo "$(distdir) archives ready for distribution: "; \ ++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ ++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' ++distuninstallcheck: ++ @test -n '$(distuninstallcheck_dir)' || { \ ++ echo 'ERROR: trying to run $@ with an empty' \ ++ '$$(distuninstallcheck_dir)' >&2; \ ++ exit 1; \ ++ }; \ ++ $(am__cd) '$(distuninstallcheck_dir)' || { \ ++ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ ++ exit 1; \ ++ }; \ ++ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ ++ || { echo "ERROR: files left after uninstall:" ; \ ++ if test -n "$(DESTDIR)"; then \ ++ echo " (check DESTDIR support)"; \ ++ fi ; \ ++ $(distuninstallcheck_listfiles) ; \ ++ exit 1; } >&2 ++distcleancheck: distclean ++ @if test '$(srcdir)' = . ; then \ ++ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ ++ exit 1 ; \ ++ fi ++ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ ++ || { echo "ERROR: files left in build directory after distclean:" ; \ ++ $(distcleancheck_listfiles) ; \ ++ exit 1; } >&2 ++check-am: all-am ++check: check-recursive ++all-am: Makefile config.h all-local ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f $(am__CONFIG_DISTCLEAN_FILES) ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-hdr \ ++ distclean-libtool distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f $(am__CONFIG_DISTCLEAN_FILES) ++ -rm -rf $(top_srcdir)/autom4te.cache ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) all install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ ++ am--refresh check check-am clean clean-cscope clean-generic \ ++ clean-libtool cscope cscopelist-am ctags ctags-am dist \ ++ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ ++ dist-tarZ dist-xz dist-zip distcheck distclean \ ++ distclean-generic distclean-hdr distclean-libtool \ ++ distclean-tags distcleancheck distdir distuninstallcheck dvi \ ++ dvi-am html html-am info info-am install install-am \ ++ install-data install-data-am install-dvi install-dvi-am \ ++ install-exec install-exec-am install-html install-html-am \ ++ install-info install-info-am install-man install-pdf \ ++ install-pdf-am install-ps install-ps-am install-strip \ ++ installcheck installcheck-am installdirs installdirs-am \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ ++ tags tags-am uninstall uninstall-am ++ ++ ++win32-debug: ++ @echo; \ ++ echo win32 = $(win32); \ ++ echo; \ ++ echo win32defs = $(win32defs); \ ++ echo; \ ++ echo win32crlf = $(win32crlf); \ ++ echo ++ ++win32-check-crlf: ++ @echo Checking win32 files for CR LF line endings ...; \ ++ fail=0 ; \ ++ for each in $(win32crlf) ; do \ ++ result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \ ++ if test "$$result" = 0 ; then \ ++ echo $$each must be fixed to have CRLF line endings ; \ ++ fail=1; \ ++ fi ; \ ++ done ; \ ++ exit $$fail ++ ++# make sure all symbols we export on linux are defined in the win32 .def too ++# (don't care about other unixes for now, it's enough if it works on one of ++# the linux build bots; we assume .so ) ++check-exports: ++ @fail=0 ; \ ++ for l in $(win32defs); do \ ++ libbase=`basename "$$l" ".def"`; \ ++ libso=`find "$(top_builddir)" -name "$$libbase-1.0.so" | grep -v /_build/ | head -n1`; \ ++ libdef="$(top_srcdir)/win32/common/$$libbase.def"; \ ++ if test "x$$libso" != "x"; then \ ++ echo Checking symbols in $$libso; \ ++ if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \ ++ fail=1; \ ++ fi; \ ++ fi; \ ++ done ; \ ++ if test $$fail != 0; then \ ++ echo '-----------------------------------------------------------'; \ ++ echo 'Run this to update the .def files:'; \ ++ echo 'make update-exports'; \ ++ echo '-----------------------------------------------------------'; \ ++ fi; \ ++ exit $$fail ++ ++update-exports: ++ make check-exports 2>&1 | patch -p1 ++ git add win32/common/libgst*.def ++ git diff --cached -- win32/common/ ++ echo '^^^--- updated and staged changes above' ++ ++# complain about nonportable printf format strings (%lld, %llu, %zu etc.) ++check-nonportable-print-format: ++ @fail=0 ; \ ++ loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \ ++ if test "x$$loc" != "x"; then \ ++ echo "Please fix the following print format strings:" ; \ ++ find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \ ++ fail=1; \ ++ fi; \ ++ exit $$fail ++ ++dist-hook: check-exports win32-check-crlf ++ ++release: dist ++ @$(MAKE) $(PACKAGE)-$(VERSION).tar.xz.sha256sum ++ @echo ++ @echo "=================================================================================================" ++ @echo "http://gstreamer.freedesktop.org/src/$(PACKAGE)/$(PACKAGE)-$(VERSION).tar.xz" ++ @cat $(PACKAGE)-$(VERSION).tar.xz.sha256sum ++ @echo "=================================================================================================" ++ @if [ -d ~/releases/ ]; then \ ++ cp -v $(PACKAGE)-$(VERSION).tar.xz ~/releases/; \ ++ fi ++ @if [ -d ../www/data/src ]; then \ ++ mv -v $(PACKAGE)-$(VERSION).tar.xz ../www/data/src/$(PACKAGE)/ ; \ ++ mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../www/data/src/$(PACKAGE)/ ; \ ++ fi ++ @echo "=================================================================================================" ++ ++# generate sha256 sum files ++%.sha256sum: % ++ @sha256sum $< > $@ ++ ++# check that no marshal or enumtypes files are included ++# this in turn ensures that distcheck fails for missing .list files which is currently ++# shadowed when the corresponding .c and .h files are included. ++distcheck-hook: ++ @test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \ ++ test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \ ++ ( echo "*** Leftover enumtypes or marshal files in the tarball." && \ ++ echo "*** Make sure the following files are not disted:" && \ ++ find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \ ++ find $(distdir) -name \*-marshal.[ch] && \ ++ false ) ++ ++# rule to download the latest .po files ++download-po: $(top_srcdir)/common/download-translations ++ $(top_srcdir)/common/download-translations $(PACKAGE) ++ ++check-valgrind: ++ $(MAKE) -C tests/check check-valgrind ++ ++check-torture: ++ $(MAKE) -C tests/check torture ++build-checks: ++ $(MAKE) -C tests/check build-checks ++#check-torture: ++# true ++#build-checks: ++# true ++ ++win32-update: ++ for f in $(WIN32_COPY); do cp -v $$f win32/common; done; \ ++ for f in win32/common/*-enumtypes.c; do \ ++ echo "Indenting $$f"; \ ++ gst-indent $$f; gst-indent $$f; \ ++ done ++ cp -v $(top_builddir)/win32/common/config.h-new \ ++ $(top_srcdir)/win32/common/config.h ++.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload lcov-clean ++ ++# run lcov from scratch, always ++lcov-reset: ++ $(MAKE) lcov-run ++ $(MAKE) lcov-report ++ ++# run lcov from scratch if the dir is not there ++lcov: ++ $(MAKE) lcov-reset ++ ++# reset lcov stats ++#lcov-clean: ++# @-rm -rf lcov ++# lcov --directory . --zerocounters ++ ++# reset run coverage tests ++#lcov-run: ++# -$(MAKE) lcov-clean ++# -if test -d tests/check; then $(MAKE) -C tests/check inspect; fi ++# -$(MAKE) check ++ ++# generate report based on current coverage data ++#lcov-report: ++# mkdir lcov ++# lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info ++# lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove ++# lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove ++# lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove ++# lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info ++# rm lcov/remove ++# mv lcov/lcov.cleaned.info lcov/lcov.info ++# genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info ++ ++#lcov-upload: lcov ++# rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE) ++ ++lcov-run: ++ echo "Need to reconfigure with --enable-gcov" ++ ++lcov-report: ++ echo "Need to reconfigure with --enable-gcov" ++ ++check: check-exports ++ ++check-cruft: ++ @cruft_files=""; cruft_dirs=""; \ ++ for f in $(CRUFT_FILES); do \ ++ if test -e $$f; then \ ++ cruft_files="$$cruft_files $$f"; \ ++ fi \ ++ done; \ ++ for d in $(CRUFT_DIRS); do \ ++ if test -e $$d; then \ ++ cruft_dirs="$$cruft_dirs $$d"; \ ++ fi \ ++ done; \ ++ if test "x$$cruft_files$$cruft_dirs" != x; then \ ++ echo; \ ++ echo "**** CRUFT ALERT *****"; \ ++ echo; \ ++ echo "The following files and directories may not be needed any "; \ ++ echo "longer (usually because a plugin has been merged into "; \ ++ echo "another plugin, moved to a different module, or been "; \ ++ echo "renamed), and you probably want to clean them up if you "; \ ++ echo "don't have local changes: "; \ ++ echo; \ ++ for f in $$cruft_files; do echo "file $$f"; done; \ ++ echo; \ ++ for d in $$cruft_dirs; do echo "directory $$d"; done; \ ++ echo; \ ++ echo "'make clean-cruft' will remove these for you."; \ ++ echo; \ ++ fi ++ ++clean-cruft-dirs: ++ @for d in $(CRUFT_DIRS); do \ ++ if test -e $$d; then \ ++ rm -r "$$d" && echo "Removed directory $$d"; \ ++ fi \ ++ done ++ ++clean-cruft-files: ++ @for f in $(CRUFT_FILES); do \ ++ if test -e $$f; then \ ++ rm "$$f" && echo "Removed file $$f"; \ ++ fi \ ++ done ++ ++clean-cruft: clean-cruft-dirs clean-cruft-files ++ ++# also might want to add this to your Makefile.am: ++# ++# all-local: check-cruft ++ ++all-local: check-cruft ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/common/Makefile +@@ -0,0 +1,833 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# common/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = common ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog \ ++ README ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DIST_SUBDIRS = $(SUBDIRS) ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/common ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/common ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++SUBDIRS = m4 ++EXTRA_DIST = \ ++ ChangeLog \ ++ gettext.patch \ ++ glib-gen.mak gtk-doc.mak upload-doc.mak \ ++ cruft.mak release.mak win32.mak po.mak \ ++ parallel-subdirs.mak \ ++ gst-autogen.sh \ ++ check-exports \ ++ c-to-xml.py mangle-db.py scangobj-merge.py \ ++ gtk-doc-plugins.mak \ ++ plugins.xsl gstdoc-scangobj \ ++ gst.supp check.mak \ ++ coverage/lcov.mak \ ++ coverage/coverage-report.pl \ ++ coverage/coverage-report.xsl \ ++ coverage/coverage-report-entry.pl \ ++ download-translations \ ++ extract-release-date-from-doap-file \ ++ gst-indent \ ++ orc.mak ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu common/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/docs/Makefile +@@ -0,0 +1,823 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# docs/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = docs ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ ++ $(srcdir)/version.entities.in ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = version.entities ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/docs ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/docs ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++#PLUGIN_DOCS_DIRS = plugins ++#PLUGIN_DOCS_DIRS = ++PLUGIN_DOCS_DIRS = plugins ++SUBDIRS = design libs $(PLUGIN_DOCS_DIRS) ++DIST_SUBDIRS = design libs plugins ++EXTRA_DIST = \ ++ version.entities.in ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu docs/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++version.entities: $(top_builddir)/config.status $(srcdir)/version.entities.in ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++upload: ++ @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/docs/design/Makefile +@@ -0,0 +1,826 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# docs/design/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = docs/design ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DIST_SUBDIRS = $(SUBDIRS) ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/docs/design ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/docs/design ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../../ ++top_builddir = ../.. ++top_srcdir = ../.. ++SUBDIRS = ++EXTRA_DIST = \ ++ design-audiosinks.txt \ ++ design-decodebin.txt \ ++ design-encoding.txt \ ++ design-orc-integration.txt \ ++ draft-hw-acceleration.txt \ ++ draft-keyframe-force.txt \ ++ draft-subtitle-overlays.txt\ ++ draft-va.txt \ ++ part-interlaced-video.txt \ ++ part-mediatype-audio-raw.txt\ ++ part-mediatype-text-raw.txt\ ++ part-mediatype-video-raw.txt\ ++ part-playbin.txt ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/design/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu docs/design/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/ext/Makefile +@@ -0,0 +1,858 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# ext/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# include this at the end of $MODULE/ext/Makefile.am to force make to ++# build subdirectories in parallel when make -jN is used. We will end up ++# descending into all subdirectories a second time, but only after the first ++# (parallel) run has finished, so it should go right through the second time. ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ ++ $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++subdir = ext ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/ext ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/ext ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++#ALSA_DIR = ++ALSA_DIR = alsa ++#CDPARANOIA_DIR = ++CDPARANOIA_DIR = cdparanoia ++#LIBVISUAL_DIR = ++LIBVISUAL_DIR = libvisual ++#OGG_DIR = ++OGG_DIR = ogg ++#PANGO_DIR = ++PANGO_DIR = pango ++#VORBIS_DIR = ++#VORBIS_DIR = vorbis ++VORBIS_DIR = vorbis ++#THEORA_DIR = ++THEORA_DIR = theora ++SUBDIRS = \ ++ $(ALSA_DIR) \ ++ $(CDPARANOIA_DIR) \ ++ $(LIBVISUAL_DIR) \ ++ $(OGG_DIR) \ ++ $(PANGO_DIR) \ ++ $(THEORA_DIR) \ ++ $(VORBIS_DIR) ++ ++DIST_SUBDIRS = \ ++ alsa \ ++ cdparanoia \ ++ libvisual \ ++ ogg \ ++ pango \ ++ theora \ ++ vorbis ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu ext/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/common/parallel-subdirs.mak: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++.PHONY: independent-subdirs $(SUBDIRS) ++ ++independent-subdirs: $(SUBDIRS) ++ ++$(SUBDIRS): ++ $(MAKE) -C $@ ++ ++all-recursive: independent-subdirs ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/gst-libs/Makefile +@@ -0,0 +1,811 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# gst-libs/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = gst-libs ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DIST_SUBDIRS = $(SUBDIRS) ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/gst-libs ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/gst-libs ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++SUBDIRS = gst ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu gst-libs/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/gst-libs/gst/Makefile +@@ -0,0 +1,850 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# gst-libs/gst/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = gst-libs/gst ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ ++ $(noinst_HEADERS) ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++HEADERS = $(noinst_HEADERS) ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DIST_SUBDIRS = $(SUBDIRS) ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/gst-libs/gst ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/gst-libs/gst ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../../ ++top_builddir = ../.. ++top_srcdir = ../.. ++SUBDIRS = \ ++ tag \ ++ fft \ ++ sdp \ ++ rtsp \ ++ video \ ++ audio \ ++ rtp \ ++ pbutils \ ++ riff \ ++ app \ ++ allocators ++ ++noinst_HEADERS = gettext.h gst-i18n-app.h gst-i18n-plugin.h glib-compat-private.h ++INDEPENDENT_SUBDIRS = \ ++ tag audio fft sdp video app ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu gst-libs/gst/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile $(HEADERS) ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++# dependencies: ++audio: tag ++ ++riff: tag audio ++ ++rtsp: sdp ++ ++pbutils: video audio ++ ++rtp: audio ++ ++.PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS) ++ ++independent-subdirs: $(INDEPENDENT_SUBDIRS) ++ ++$(INDEPENDENT_SUBDIRS): ++ $(MAKE) -C $@ ++ ++all-recursive: independent-subdirs ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/gst/Makefile +@@ -0,0 +1,827 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# gst/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# include this at the end of $MODULE/ext/Makefile.am to force make to ++# build subdirectories in parallel when make -jN is used. We will end up ++# descending into all subdirectories a second time, but only after the first ++# (parallel) run has finished, so it should go right through the second time. ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ ++ $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++subdir = gst ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/gst ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/gst ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++SUBDIRS = $(GST_PLUGINS_SELECTED) ++DIST_SUBDIRS = $(GST_PLUGINS_ALL) ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu gst/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/common/parallel-subdirs.mak: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++.PHONY: independent-subdirs $(SUBDIRS) ++ ++independent-subdirs: $(SUBDIRS) ++ ++$(SUBDIRS): ++ $(MAKE) -C $@ ++ ++all-recursive: independent-subdirs ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/sys/Makefile +@@ -0,0 +1,837 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# sys/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# include this at the end of $MODULE/ext/Makefile.am to force make to ++# build subdirectories in parallel when make -jN is used. We will end up ++# descending into all subdirectories a second time, but only after the first ++# (parallel) run has finished, so it should go right through the second time. ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ ++ $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++subdir = sys ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/sys ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/sys ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++#XIMAGE_DIR = ++XIMAGE_DIR = ximage ++#XVIMAGE_DIR = ++XVIMAGE_DIR = xvimage ++SUBDIRS = \ ++ $(XIMAGE_DIR) \ ++ $(XVIMAGE_DIR) ++ ++DIST_SUBDIRS = \ ++ ximage \ ++ xvimage ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu sys/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/common/parallel-subdirs.mak: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++.PHONY: independent-subdirs $(SUBDIRS) ++ ++independent-subdirs: $(SUBDIRS) ++ ++$(SUBDIRS): ++ $(MAKE) -C $@ ++ ++all-recursive: independent-subdirs ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/tests/Makefile +@@ -0,0 +1,826 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# tests/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++subdir = tests ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/tests ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/tests ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../ ++top_builddir = .. ++top_srcdir = .. ++SUBDIRS_EXAMPLES = ++#SUBDIRS_EXAMPLES = examples ++#SUBDIRS_CHECK = ++SUBDIRS_CHECK = check ++#SUBDIRS_ICLES = ++SUBDIRS_ICLES = icles ++SUBDIRS = \ ++ $(SUBDIRS_CHECK) \ ++ $(SUBDIRS_EXAMPLES) \ ++ $(SUBDIRS_ICLES) ++ ++DIST_SUBDIRS = \ ++ check \ ++ examples \ ++ files \ ++ icles ++ ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu tests/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/tests/examples/Makefile +@@ -0,0 +1,830 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# tests/examples/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# include this at the end of $MODULE/ext/Makefile.am to force make to ++# build subdirectories in parallel when make -jN is used. We will end up ++# descending into all subdirectories a second time, but only after the first ++# (parallel) run has finished, so it should go right through the second time. ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ ++ $(srcdir)/Makefile.in $(srcdir)/Makefile.am ++subdir = tests/examples ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/tests/examples ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/tests/examples ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../../ ++top_builddir = ../.. ++top_srcdir = ../.. ++#FT2_SUBDIRS = ++FT2_SUBDIRS = seek snapshot ++#GTK_SUBDIRS = playback ++SUBDIRS = app audio dynamic fft $(FT2_SUBDIRS) $(GTK_SUBDIRS) gio overlay playrec encoding ++DIST_SUBDIRS = app audio dynamic fft gio playback overlay seek snapshot playrec encoding ++all: all-recursive ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu tests/examples/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++$(top_srcdir)/common/parallel-subdirs.mak: ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-generic mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ++ ctags-am distclean distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ++ ps ps-am tags tags-am uninstall uninstall-am ++ ++ ++.PHONY: independent-subdirs $(SUBDIRS) ++ ++independent-subdirs: $(SUBDIRS) ++ ++$(SUBDIRS): ++ $(MAKE) -C $@ ++ ++all-recursive: independent-subdirs ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +--- /dev/null ++++ gst-plugins-base1.0-1.6.1/tests/icles/Makefile +@@ -0,0 +1,1410 @@ ++# Makefile.in generated by automake 1.14.1 from Makefile.am. ++# tests/icles/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2013 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++ ++am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/gst-plugins-base ++pkgincludedir = $(includedir)/gst-plugins-base ++pkglibdir = $(libdir)/gst-plugins-base ++pkglibexecdir = $(libexecdir)/gst-plugins-base ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = x86_64-pc-linux-gnu ++host_triplet = x86_64-pc-linux-gnu ++target_triplet = x86_64-pc-linux-gnu ++#am__append_1 = test-colorkey test-videooverlay ++noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) \ ++ audio-trickplay$(EXEEXT) playbin-text$(EXEEXT) \ ++ position-formats$(EXEEXT) stress-playbin$(EXEEXT) \ ++ test-scale$(EXEEXT) test-box$(EXEEXT) \ ++ test-effect-switch$(EXEEXT) test-overlay-blending$(EXEEXT) \ ++ test-reverseplay$(EXEEXT) ++subdir = tests/icles ++DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ ++ $(top_srcdir)/depcomp ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ ++ $(top_srcdir)/common/m4/as-auto-alt.m4 \ ++ $(top_srcdir)/common/m4/as-compiler-flag.m4 \ ++ $(top_srcdir)/common/m4/as-libtool.m4 \ ++ $(top_srcdir)/common/m4/as-version.m4 \ ++ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ ++ $(top_srcdir)/common/m4/gst-arch.m4 \ ++ $(top_srcdir)/common/m4/gst-args.m4 \ ++ $(top_srcdir)/common/m4/gst-check.m4 \ ++ $(top_srcdir)/common/m4/gst-default.m4 \ ++ $(top_srcdir)/common/m4/gst-error.m4 \ ++ $(top_srcdir)/common/m4/gst-feature.m4 \ ++ $(top_srcdir)/common/m4/gst-function.m4 \ ++ $(top_srcdir)/common/m4/gst-gettext.m4 \ ++ $(top_srcdir)/common/m4/gst-glib2.m4 \ ++ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ ++ $(top_srcdir)/common/m4/gst-platform.m4 \ ++ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ ++ $(top_srcdir)/common/m4/gst-plugindir.m4 \ ++ $(top_srcdir)/common/m4/gst.m4 \ ++ $(top_srcdir)/common/m4/gtk-doc.m4 \ ++ $(top_srcdir)/common/m4/introspection.m4 \ ++ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ ++ $(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \ ++ $(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/iconv.m4 \ ++ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ ++ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ ++ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/lrint.m4 \ ++ $(top_srcdir)/m4/lrintf.m4 $(top_srcdir)/m4/ltoptions.m4 \ ++ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ ++ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ ++ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++#am__EXEEXT_1 = test-colorkey$(EXEEXT) \ ++# test-videooverlay$(EXEEXT) ++am__EXEEXT_2 = stress-videooverlay$(EXEEXT) \ ++ $(am__EXEEXT_1) output-selector-test$(EXEEXT) \ ++ input-selector-test$(EXEEXT) ++am__EXEEXT_3 = test-textoverlay$(EXEEXT) ++PROGRAMS = $(noinst_PROGRAMS) ++am_audio_trickplay_OBJECTS = \ ++ audio_trickplay-audio-trickplay.$(OBJEXT) ++audio_trickplay_OBJECTS = $(am_audio_trickplay_OBJECTS) ++am__DEPENDENCIES_1 = ++audio_trickplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ++AM_V_lt = $(am__v_lt_$(V)) ++am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) ++am__v_lt_0 = --silent ++am__v_lt_1 = ++audio_trickplay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(audio_trickplay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ ++ -o $@ ++am__input_selector_test_SOURCES_DIST = input-selector-test.c ++am_input_selector_test_OBJECTS = \ ++ input_selector_test-input-selector-test.$(OBJEXT) ++input_selector_test_OBJECTS = $(am_input_selector_test_OBJECTS) ++input_selector_test_DEPENDENCIES = $(am__DEPENDENCIES_1) ++input_selector_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(input_selector_test_CFLAGS) $(CFLAGS) \ ++ $(input_selector_test_LDFLAGS) $(LDFLAGS) -o $@ ++am__output_selector_test_SOURCES_DIST = output-selector-test.c ++am_output_selector_test_OBJECTS = output_selector_test-output-selector-test.$(OBJEXT) ++output_selector_test_OBJECTS = $(am_output_selector_test_OBJECTS) ++output_selector_test_DEPENDENCIES = $(am__DEPENDENCIES_1) ++output_selector_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(output_selector_test_CFLAGS) $(CFLAGS) \ ++ $(output_selector_test_LDFLAGS) $(LDFLAGS) -o $@ ++am_playbin_text_OBJECTS = playbin_text-playbin-text.$(OBJEXT) ++playbin_text_OBJECTS = $(am_playbin_text_OBJECTS) ++playbin_text_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++playbin_text_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(playbin_text_CFLAGS) \ ++ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++am_position_formats_OBJECTS = \ ++ position_formats-position-formats.$(OBJEXT) ++position_formats_OBJECTS = $(am_position_formats_OBJECTS) ++position_formats_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++position_formats_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(position_formats_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ ++ -o $@ ++am_stress_playbin_OBJECTS = stress_playbin-stress-playbin.$(OBJEXT) ++stress_playbin_OBJECTS = $(am_stress_playbin_OBJECTS) ++stress_playbin_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++stress_playbin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(stress_playbin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ ++ $@ ++am__stress_videooverlay_SOURCES_DIST = stress-videooverlay.c ++am_stress_videooverlay_OBJECTS = \ ++ stress_videooverlay-stress-videooverlay.$(OBJEXT) ++stress_videooverlay_OBJECTS = $(am_stress_videooverlay_OBJECTS) ++stress_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++stress_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(stress_videooverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ ++ $(LDFLAGS) -o $@ ++am_test_box_OBJECTS = test_box-test-box.$(OBJEXT) ++test_box_OBJECTS = $(am_test_box_OBJECTS) ++test_box_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ++test_box_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_box_CFLAGS) \ ++ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++am__test_colorkey_SOURCES_DIST = test-colorkey.c ++#am_test_colorkey_OBJECTS = test_colorkey-test-colorkey.$(OBJEXT) ++test_colorkey_OBJECTS = $(am_test_colorkey_OBJECTS) ++#test_colorkey_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) ++test_colorkey_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_colorkey_CFLAGS) \ ++ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++am_test_effect_switch_OBJECTS = \ ++ test_effect_switch-test-effect-switch.$(OBJEXT) ++test_effect_switch_OBJECTS = $(am_test_effect_switch_OBJECTS) ++test_effect_switch_DEPENDENCIES = $(am__DEPENDENCIES_1) ++test_effect_switch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(test_effect_switch_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ ++ $(LDFLAGS) -o $@ ++am_test_overlay_blending_OBJECTS = \ ++ test_overlay_blending-test-overlay-blending.$(OBJEXT) ++test_overlay_blending_OBJECTS = $(am_test_overlay_blending_OBJECTS) ++test_overlay_blending_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++test_overlay_blending_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(test_overlay_blending_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ ++ $(LDFLAGS) -o $@ ++am_test_reverseplay_OBJECTS = \ ++ test_reverseplay-test-reverseplay.$(OBJEXT) ++test_reverseplay_OBJECTS = $(am_test_reverseplay_OBJECTS) ++test_reverseplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++test_reverseplay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(test_reverseplay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ ++ -o $@ ++am_test_scale_OBJECTS = test_scale-test-scale.$(OBJEXT) ++test_scale_OBJECTS = $(am_test_scale_OBJECTS) ++test_scale_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) ++test_scale_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_scale_CFLAGS) \ ++ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++am__test_textoverlay_SOURCES_DIST = test-textoverlay.c ++am_test_textoverlay_OBJECTS = \ ++ test_textoverlay-test-textoverlay.$(OBJEXT) ++test_textoverlay_OBJECTS = $(am_test_textoverlay_OBJECTS) ++test_textoverlay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_1) ++test_textoverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(test_textoverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ ++ -o $@ ++am__test_videooverlay_SOURCES_DIST = test-videooverlay.c ++#am_test_videooverlay_OBJECTS = test_videooverlay-test-videooverlay.$(OBJEXT) ++test_videooverlay_OBJECTS = $(am_test_videooverlay_OBJECTS) ++#test_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) \ ++# $(am__DEPENDENCIES_1) ++test_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ ++ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ ++ $(test_videooverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ ++ -o $@ ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++DEFAULT_INCLUDES = -I. -I$(top_builddir) ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__depfiles_maybe = depfiles ++am__mv = mv -f ++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ ++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ ++ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ ++ $(AM_CFLAGS) $(CFLAGS) ++AM_V_CC = $(am__v_CC_$(V)) ++am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) ++am__v_CC_0 = @echo " CC " $@; ++am__v_CC_1 = ++CCLD = $(CC) ++LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ ++ $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++AM_V_CCLD = $(am__v_CCLD_$(V)) ++am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) ++am__v_CCLD_0 = @echo " CCLD " $@; ++am__v_CCLD_1 = ++SOURCES = $(audio_trickplay_SOURCES) $(input_selector_test_SOURCES) \ ++ $(output_selector_test_SOURCES) $(playbin_text_SOURCES) \ ++ $(position_formats_SOURCES) $(stress_playbin_SOURCES) \ ++ $(stress_videooverlay_SOURCES) $(test_box_SOURCES) \ ++ $(test_colorkey_SOURCES) $(test_effect_switch_SOURCES) \ ++ $(test_overlay_blending_SOURCES) $(test_reverseplay_SOURCES) \ ++ $(test_scale_SOURCES) $(test_textoverlay_SOURCES) \ ++ $(test_videooverlay_SOURCES) ++DIST_SOURCES = $(audio_trickplay_SOURCES) \ ++ $(am__input_selector_test_SOURCES_DIST) \ ++ $(am__output_selector_test_SOURCES_DIST) \ ++ $(playbin_text_SOURCES) $(position_formats_SOURCES) \ ++ $(stress_playbin_SOURCES) \ ++ $(am__stress_videooverlay_SOURCES_DIST) $(test_box_SOURCES) \ ++ $(am__test_colorkey_SOURCES_DIST) \ ++ $(test_effect_switch_SOURCES) $(test_overlay_blending_SOURCES) \ ++ $(test_reverseplay_SOURCES) $(test_scale_SOURCES) \ ++ $(am__test_textoverlay_SOURCES_DIST) \ ++ $(am__test_videooverlay_SOURCES_DIST) ++RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ++ ctags-recursive dvi-recursive html-recursive info-recursive \ ++ install-data-recursive install-dvi-recursive \ ++ install-exec-recursive install-html-recursive \ ++ install-info-recursive install-pdf-recursive \ ++ install-ps-recursive install-recursive installcheck-recursive \ ++ installdirs-recursive pdf-recursive ps-recursive \ ++ tags-recursive uninstall-recursive ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ ++ distclean-recursive maintainer-clean-recursive ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ ++ distdir ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++ETAGS = etags ++CTAGS = ctags ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++am__relativize = \ ++ dir0=`pwd`; \ ++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ ++ sed_rest='s,^[^/]*/*,,'; \ ++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ ++ sed_butlast='s,/*[^/]*$$,,'; \ ++ while test -n "$$dir1"; do \ ++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ ++ if test "$$first" != "."; then \ ++ if test "$$first" = ".."; then \ ++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ ++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ ++ else \ ++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ ++ if test "$$first2" = "$$first"; then \ ++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ ++ else \ ++ dir2="../$$dir2"; \ ++ fi; \ ++ dir0="$$dir0"/"$$first"; \ ++ fi; \ ++ fi; \ ++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ ++ done; \ ++ reldir="$$dir2" ++ACLOCAL = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14 ++ACLOCAL_AMFLAGS = -I m4 -I common/m4 ++ALSA_CFLAGS = -I/usr/include/alsa ++ALSA_LIBS = -lasound ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = ar ++AS = as ++AUDIORESAMPLE_FORMAT_AUTO = ++AUDIORESAMPLE_FORMAT_FLOAT = ++AUDIORESAMPLE_FORMAT_INT = ++AUTOCONF = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf ++AUTOHEADER = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader ++AUTOMAKE = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14 ++AWK = gawk ++CC = gcc -std=gnu99 ++CCASFLAGS = ++CCDEPMODE = depmode=none ++CDPARANOIA_CFLAGS = ++CDPARANOIA_LIBS = -lcdda_interface -lcdda_paranoia ++CFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CPP = gcc -E ++CPPFLAGS = -D_FORTIFY_SOURCE=2 ++CXX = g++ ++CXXCPP = g++ -E ++CXXDEPMODE = depmode=none ++CXXFLAGS = -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include ++CYGPATH_W = echo ++DEFAULT_AUDIOSINK = autoaudiosink ++DEFAULT_AUDIOSRC = alsasrc ++DEFAULT_VIDEOSINK = autovideosink ++DEFAULT_VIDEOSRC = v4l2src ++DEFAULT_VISUALIZER = goom ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DEPRECATED_CFLAGS = ++DLLTOOL = false ++DSYMUTIL = ++DUMPBIN = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /bin/grep -E ++ERROR_CFLAGS = ++ERROR_CXXFLAGS = ++EXEEXT = ++FFLAGS = ++FGREP = /bin/grep -F ++FT2_CFLAGS = -I/usr/include/freetype2 ++FT2_CONFIG = ++FT2_LIBS = -lfreetype ++GCOV = ++GCOV_CFLAGS = ++GCOV_LIBS = ++GETTEXT_MACRO_VERSION = 0.17 ++GETTEXT_PACKAGE = gst-plugins-base-1.0 ++GIO_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_LDFLAGS = ++GIO_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GIO_UNIX_2_0_CFLAGS = -pthread -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GIO_UNIX_2_0_LIBS = -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GLIB_EXTRA_CFLAGS = -DG_THREADS_MANDATORY -DG_DISABLE_CAST_CHECKS -DG_DISABLE_ASSERT ++GLIB_GENMARSHAL = glib-genmarshal ++GLIB_LIBS = -pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ++GLIB_MKENUMS = glib-mkenums ++GLIB_PREFIX = /usr ++GLIB_REQ = 2.32 ++GMSGFMT = /usr/bin/msgfmt ++GMSGFMT_015 = /usr/bin/msgfmt ++GREP = /bin/grep ++GST_AGE = 601 ++GST_ALL_LDFLAGS = -no-undefined -Wl,-Bsymbolic-functions ++GST_API_VERSION = 1.0 ++GST_BASE_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_BASE_LIBS = -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CFLAGS) ++GST_CHECK_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CHECK_LIBS = -lgstcheck-1.0 -lm -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CONTROLLER_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_CONTROLLER_LIBS = -lgstcontroller-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 ++GST_CURRENT = 601 ++GST_CXXFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include $(GLIB_EXTRA_CFLAGS) $(GST_OPTION_CXXFLAGS) ++GST_INSTALL_PLUGINS_HELPER = /usr/bin/gstreamer-codec-install ++GST_LEVEL_DEFAULT = GST_LEVEL_NONE ++GST_LIBS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) ++GST_LIBVERSION = 601:0:601 ++GST_LIB_LDFLAGS = -export-symbols-regex ^_?\(gst_\|Gst\|GST_\).* ++GST_LICENSE = LGPL ++GST_LT_LDFLAGS = -version-info 601:0:601 ++GST_NET_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GST_NET_LIBS = -lgstnet-1.0 -lgstreamer-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 ++GST_OPTION_CFLAGS = $(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_OPTION_CXXFLAGS = $(WARNING_CXXFLAGS) $(ERROR_CXXFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS) ++GST_PACKAGE_NAME = GStreamer Base Plugins (Ubuntu) ++GST_PACKAGE_ORIGIN = https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 ++GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++GST_PLUGINS_ALL = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGINS_BASE_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs ++GST_PLUGINS_DIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++GST_PLUGINS_NONPORTED = ++GST_PLUGINS_SELECTED = adder app audioconvert audiorate audiotestsrc encoding videoconvert gio playback audioresample subparse tcp typefind videotestsrc videorate videoscale volume ++GST_PLUGIN_LDFLAGS = -module -avoid-version -export-symbols-regex '^_*gst_plugin_.*' -no-undefined -Wl,-Bsymbolic-functions ++GST_PLUGIN_LIBTOOLFLAGS = --tag=disable-static ++GST_PREFIX = /usr ++GST_REVISION = 0 ++GST_TOOLS_DIR = /usr/bin ++GTKDOC_CHECK = /usr/bin/gtkdoc-check ++GTKDOC_DEPS_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ++GTKDOC_DEPS_LIBS = -lgobject-2.0 -lglib-2.0 ++GTKDOC_MKPDF = /usr/bin/gtkdoc-mkpdf ++GTKDOC_REBASE = /usr/bin/gtkdoc-rebase ++GTK_CFLAGS = ++GTK_LIBS = ++GTK_QUARTZ_CFLAGS = ++GTK_QUARTZ_LIBS = ++GTK_X11_CFLAGS = ++GTK_X11_LIBS = ++HAVE_CDPARANOIA = yes ++HAVE_XSHM = yes ++HAVE_ZLIB = yes ++HTML_DIR = ${datadir}/gtk-doc/html ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++INTLLIBS = ++INTL_MACOSX_LIBS = ++INTROSPECTION_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ++INTROSPECTION_COMPILER = /usr/bin/g-ir-compiler ++INTROSPECTION_GENERATE = /usr/bin/g-ir-generate ++INTROSPECTION_GIRDIR = /usr/share/gir-1.0 ++INTROSPECTION_INIT = extern void gst_init(gint*,gchar**); gst_init(NULL,NULL); ++INTROSPECTION_LIBS = -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ++INTROSPECTION_MAKEFILE = /usr/share/gobject-introspection-1.0/Makefile.introspection ++INTROSPECTION_SCANNER = /usr/bin/g-ir-scanner ++INTROSPECTION_TYPELIBDIR = /usr/lib/girepository-1.0 ++IVORBIS_CFLAGS = ++IVORBIS_LIBS = ++LD = /usr/bin/ld -m elf_x86_64 ++LDFLAGS = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed ++LIBICONV = -liconv ++LIBINTL = ++LIBM = -lm ++LIBOBJS = ++LIBS = ++LIBTOOL = $(SHELL) $(top_builddir)/libtool ++LIBVISUAL_CFLAGS = -I/usr/include/libvisual-0.4 ++LIBVISUAL_LIBS = -lpthread -lm -ldl -lvisual-0.4 ++LIPO = ++LN_S = ln -s ++LOCALEDIR = /usr/share/locale ++LTLIBICONV = -liconv ++LTLIBINTL = ++LTLIBOBJS = ++MAINT = # ++MAKEINFO = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo ++MANIFEST_TOOL = : ++MKDIR_P = /bin/mkdir -p ++MSGFMT = /usr/bin/msgfmt ++MSGFMT_015 = /usr/bin/msgfmt ++MSGMERGE = /usr/bin/msgmerge ++NM = /usr/bin/nm -B ++NMEDIT = ++OBJDUMP = objdump ++OBJEXT = o ++OGG_CFLAGS = ++OGG_LIBS = -logg ++ORCC = /usr/local/bin/orcc ++ORCC_FLAGS = --compat 0.4.23 ++ORC_CFLAGS = -I/usr/local/include/orc-0.4 ++ORC_LIBS = -L/usr/local/lib -lorc-0.4 ++OTOOL = ++OTOOL64 = ++PACKAGE = gst-plugins-base ++PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ++PACKAGE_NAME = GStreamer Base Plug-ins ++PACKAGE_STRING = GStreamer Base Plug-ins 1.6.1 ++PACKAGE_TARNAME = gst-plugins-base ++PACKAGE_URL = ++PACKAGE_VERSION = 1.6.1 ++PACKAGE_VERSION_MAJOR = 1 ++PACKAGE_VERSION_MICRO = 1 ++PACKAGE_VERSION_MINOR = 6 ++PACKAGE_VERSION_NANO = 0 ++PACKAGE_VERSION_RELEASE = 1 ++PANGO_CFLAGS = -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 ++PANGO_LIBS = -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 ++PATH_SEPARATOR = : ++PKG_CONFIG = /usr/bin/pkg-config ++PLUGINDIR = /usr/lib/x86_64-linux-gnu/gstreamer-1.0 ++POSUB = po ++PROFILE_CFLAGS = -g ++PYTHON = /usr/bin/python ++PYTHON_EXEC_PREFIX = ${exec_prefix} ++PYTHON_PLATFORM = linux2 ++PYTHON_PREFIX = ${prefix} ++PYTHON_VERSION = 2.7 ++QTCHOOSER = ++QT_CFLAGS = ++QT_LIBS = ++QT_MOC = ++RANLIB = ranlib ++SED = /bin/sed ++SET_MAKE = ++SHELL = /bin/bash ++STRIP = strip ++THEORA_CFLAGS = ++THEORA_LIBS = -ltheoraenc -ltheoradec -logg ++USE_NLS = yes ++VALGRIND_CFLAGS = ++VALGRIND_LIBS = ++VALGRIND_PATH = no ++VERSION = 1.6.1 ++VORBIS_CFLAGS = ++VORBIS_LIBS = -lvorbisenc -lvorbis -lm -logg ++WARNING_CFLAGS = -Wall -Wdeclaration-after-statement -Wvla -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar -Wnested-externs ++WARNING_CXXFLAGS = -Wall -Wmissing-declarations -Wredundant-decls -Wundef -Wwrite-strings -Wformat-nonliteral -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return -Wno-multichar ++WIN32_LIBS = ++XGETTEXT = /usr/bin/xgettext ++XGETTEXT_015 = /usr/bin/xgettext ++XGETTEXT_EXTRA_OPTIONS = ++XSHM_CFLAGS = ++XSHM_LIBS = -lXext ++XVIDEO_CFLAGS = ++XVIDEO_LIBS = -lX11 -lXv ++X_CFLAGS = ++X_LIBS = -lX11 ++ZLIB_CFLAGS = ++ZLIB_LIBS = -lz ++abs_builddir = /root/debs/gst-plugins-base1.0-1.6.1/tests/icles ++abs_srcdir = /root/debs/gst-plugins-base1.0-1.6.1/tests/icles ++abs_top_builddir = /root/debs/gst-plugins-base1.0-1.6.1 ++abs_top_srcdir = /root/debs/gst-plugins-base1.0-1.6.1 ++ac_ct_AR = ar ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++ac_ct_DUMPBIN = ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = tar --format=ustar -chf - "$$tardir" ++am__untar = tar -xf - ++bindir = ${exec_prefix}/bin ++build = x86_64-pc-linux-gnu ++build_alias = x86_64-linux-gnu ++build_cpu = x86_64 ++build_os = linux-gnu ++build_vendor = pc ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = x86_64-pc-linux-gnu ++host_alias = ++host_cpu = x86_64 ++host_os = linux-gnu ++host_vendor = pc ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${prefix}/share/info ++install_sh = ${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh ++libdir = ${prefix}/lib/x86_64-linux-gnu ++libexecdir = ${prefix}/lib/gst-plugins-base1.0 ++localedir = ${datarootdir}/locale ++localstatedir = /var ++mandir = ${prefix}/share/man ++mkdir_p = /bin/mkdir -p ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++pkgpyexecdir = ${pyexecdir}/gst-plugins-base ++pkgpythondir = ${pythondir}/gst-plugins-base ++plugindir = $(libdir)/gstreamer-1.0 ++prefix = /usr ++program_transform_name = s,x,x, ++psdir = ${docdir} ++pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages ++pythondir = ${prefix}/lib/python2.7/dist-packages ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = /etc ++target = x86_64-pc-linux-gnu ++target_alias = ++target_cpu = x86_64 ++target_os = linux-gnu ++target_vendor = pc ++top_build_prefix = ../../ ++top_builddir = ../.. ++top_srcdir = ../.. ++SUBDIRS = playback ++DIST_SUBDIRS = playback ++#X_TESTS = ++X_TESTS = stress-videooverlay $(am__append_1) \ ++ output-selector-test input-selector-test ++stress_videooverlay_SOURCES = stress-videooverlay.c ++stress_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ ++ $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) ++ ++stress_videooverlay_LDADD = \ ++ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++ $(GST_LIBS) $(X_LIBS) $(LIBM) ++ ++#test_colorkey_SOURCES = test-colorkey.c ++#test_colorkey_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ ++# $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS) ++ ++#test_colorkey_LDADD = \ ++# $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++# $(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS) ++ ++#test_videooverlay_SOURCES = test-videooverlay.c ++#test_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ ++# $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS) ++ ++#test_videooverlay_LDADD = \ ++# $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++# $(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS) ++ ++output_selector_test_SOURCES = output-selector-test.c ++output_selector_test_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++output_selector_test_LDADD = $(GST_LIBS) ++output_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS) ++input_selector_test_SOURCES = input-selector-test.c ++input_selector_test_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++input_selector_test_LDADD = $(GST_LIBS) ++input_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS) ++#PANGO_TESTS = ++PANGO_TESTS = test-textoverlay ++test_textoverlay_SOURCES = test-textoverlay.c ++test_textoverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++test_textoverlay_LDADD = $(GST_LIBS) $(LIBM) ++audio_trickplay_SOURCES = audio-trickplay.c ++audio_trickplay_CFLAGS = $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) ++audio_trickplay_LDADD = $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(LIBM) ++playbin_text_SOURCES = playbin-text.c ++playbin_text_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++playbin_text_LDADD = $(GST_LIBS) $(LIBM) ++position_formats_SOURCES = position-formats.c ++position_formats_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++position_formats_LDADD = $(GST_LIBS) $(LIBM) ++stress_playbin_SOURCES = stress-playbin.c ++stress_playbin_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++stress_playbin_LDADD = $(GST_LIBS) $(LIBM) ++test_effect_switch_SOURCES = test-effect-switch.c ++test_effect_switch_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++test_effect_switch_LDADD = $(GST_LIBS) ++test_overlay_blending_SOURCES = test-overlay-blending.c ++test_overlay_blending_CFLAGS = \ ++ $(GST_PLUGINS_BASE_CFLAGS) \ ++ $(GST_CFLAGS) $(GIO_CFLAGS) ++ ++test_overlay_blending_LDADD = \ ++ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ ++ $(GST_LIBS) $(GIO_LIBS) $(LIBM) ++ ++test_scale_SOURCES = test-scale.c ++test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++test_scale_LDADD = $(GST_LIBS) $(LIBM) ++test_box_SOURCES = test-box.c ++test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++test_box_LDADD = $(GST_LIBS) $(LIBM) ++test_reverseplay_SOURCES = test-reverseplay.c ++test_reverseplay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) ++test_reverseplay_LDADD = $(GST_LIBS) $(LIBM) ++all: all-recursive ++ ++.SUFFIXES: ++.SUFFIXES: .c .lo .o .obj ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu tests/icles/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++clean-noinstPROGRAMS: ++ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list || exit $$?; \ ++ test -n "$(EXEEXT)" || exit 0; \ ++ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ ++ echo " rm -f" $$list; \ ++ rm -f $$list ++ ++audio-trickplay$(EXEEXT): $(audio_trickplay_OBJECTS) $(audio_trickplay_DEPENDENCIES) $(EXTRA_audio_trickplay_DEPENDENCIES) ++ @rm -f audio-trickplay$(EXEEXT) ++ $(AM_V_CCLD)$(audio_trickplay_LINK) $(audio_trickplay_OBJECTS) $(audio_trickplay_LDADD) $(LIBS) ++ ++input-selector-test$(EXEEXT): $(input_selector_test_OBJECTS) $(input_selector_test_DEPENDENCIES) $(EXTRA_input_selector_test_DEPENDENCIES) ++ @rm -f input-selector-test$(EXEEXT) ++ $(AM_V_CCLD)$(input_selector_test_LINK) $(input_selector_test_OBJECTS) $(input_selector_test_LDADD) $(LIBS) ++ ++output-selector-test$(EXEEXT): $(output_selector_test_OBJECTS) $(output_selector_test_DEPENDENCIES) $(EXTRA_output_selector_test_DEPENDENCIES) ++ @rm -f output-selector-test$(EXEEXT) ++ $(AM_V_CCLD)$(output_selector_test_LINK) $(output_selector_test_OBJECTS) $(output_selector_test_LDADD) $(LIBS) ++ ++playbin-text$(EXEEXT): $(playbin_text_OBJECTS) $(playbin_text_DEPENDENCIES) $(EXTRA_playbin_text_DEPENDENCIES) ++ @rm -f playbin-text$(EXEEXT) ++ $(AM_V_CCLD)$(playbin_text_LINK) $(playbin_text_OBJECTS) $(playbin_text_LDADD) $(LIBS) ++ ++position-formats$(EXEEXT): $(position_formats_OBJECTS) $(position_formats_DEPENDENCIES) $(EXTRA_position_formats_DEPENDENCIES) ++ @rm -f position-formats$(EXEEXT) ++ $(AM_V_CCLD)$(position_formats_LINK) $(position_formats_OBJECTS) $(position_formats_LDADD) $(LIBS) ++ ++stress-playbin$(EXEEXT): $(stress_playbin_OBJECTS) $(stress_playbin_DEPENDENCIES) $(EXTRA_stress_playbin_DEPENDENCIES) ++ @rm -f stress-playbin$(EXEEXT) ++ $(AM_V_CCLD)$(stress_playbin_LINK) $(stress_playbin_OBJECTS) $(stress_playbin_LDADD) $(LIBS) ++ ++stress-videooverlay$(EXEEXT): $(stress_videooverlay_OBJECTS) $(stress_videooverlay_DEPENDENCIES) $(EXTRA_stress_videooverlay_DEPENDENCIES) ++ @rm -f stress-videooverlay$(EXEEXT) ++ $(AM_V_CCLD)$(stress_videooverlay_LINK) $(stress_videooverlay_OBJECTS) $(stress_videooverlay_LDADD) $(LIBS) ++ ++test-box$(EXEEXT): $(test_box_OBJECTS) $(test_box_DEPENDENCIES) $(EXTRA_test_box_DEPENDENCIES) ++ @rm -f test-box$(EXEEXT) ++ $(AM_V_CCLD)$(test_box_LINK) $(test_box_OBJECTS) $(test_box_LDADD) $(LIBS) ++ ++test-colorkey$(EXEEXT): $(test_colorkey_OBJECTS) $(test_colorkey_DEPENDENCIES) $(EXTRA_test_colorkey_DEPENDENCIES) ++ @rm -f test-colorkey$(EXEEXT) ++ $(AM_V_CCLD)$(test_colorkey_LINK) $(test_colorkey_OBJECTS) $(test_colorkey_LDADD) $(LIBS) ++ ++test-effect-switch$(EXEEXT): $(test_effect_switch_OBJECTS) $(test_effect_switch_DEPENDENCIES) $(EXTRA_test_effect_switch_DEPENDENCIES) ++ @rm -f test-effect-switch$(EXEEXT) ++ $(AM_V_CCLD)$(test_effect_switch_LINK) $(test_effect_switch_OBJECTS) $(test_effect_switch_LDADD) $(LIBS) ++ ++test-overlay-blending$(EXEEXT): $(test_overlay_blending_OBJECTS) $(test_overlay_blending_DEPENDENCIES) $(EXTRA_test_overlay_blending_DEPENDENCIES) ++ @rm -f test-overlay-blending$(EXEEXT) ++ $(AM_V_CCLD)$(test_overlay_blending_LINK) $(test_overlay_blending_OBJECTS) $(test_overlay_blending_LDADD) $(LIBS) ++ ++test-reverseplay$(EXEEXT): $(test_reverseplay_OBJECTS) $(test_reverseplay_DEPENDENCIES) $(EXTRA_test_reverseplay_DEPENDENCIES) ++ @rm -f test-reverseplay$(EXEEXT) ++ $(AM_V_CCLD)$(test_reverseplay_LINK) $(test_reverseplay_OBJECTS) $(test_reverseplay_LDADD) $(LIBS) ++ ++test-scale$(EXEEXT): $(test_scale_OBJECTS) $(test_scale_DEPENDENCIES) $(EXTRA_test_scale_DEPENDENCIES) ++ @rm -f test-scale$(EXEEXT) ++ $(AM_V_CCLD)$(test_scale_LINK) $(test_scale_OBJECTS) $(test_scale_LDADD) $(LIBS) ++ ++test-textoverlay$(EXEEXT): $(test_textoverlay_OBJECTS) $(test_textoverlay_DEPENDENCIES) $(EXTRA_test_textoverlay_DEPENDENCIES) ++ @rm -f test-textoverlay$(EXEEXT) ++ $(AM_V_CCLD)$(test_textoverlay_LINK) $(test_textoverlay_OBJECTS) $(test_textoverlay_LDADD) $(LIBS) ++ ++test-videooverlay$(EXEEXT): $(test_videooverlay_OBJECTS) $(test_videooverlay_DEPENDENCIES) $(EXTRA_test_videooverlay_DEPENDENCIES) ++ @rm -f test-videooverlay$(EXEEXT) ++ $(AM_V_CCLD)$(test_videooverlay_LINK) $(test_videooverlay_OBJECTS) $(test_videooverlay_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++#include ./$(DEPDIR)/audio_trickplay-audio-trickplay.Po ++#include ./$(DEPDIR)/input_selector_test-input-selector-test.Po ++#include ./$(DEPDIR)/output_selector_test-output-selector-test.Po ++#include ./$(DEPDIR)/playbin_text-playbin-text.Po ++#include ./$(DEPDIR)/position_formats-position-formats.Po ++#include ./$(DEPDIR)/stress_playbin-stress-playbin.Po ++#include ./$(DEPDIR)/stress_videooverlay-stress-videooverlay.Po ++#include ./$(DEPDIR)/test_box-test-box.Po ++#include ./$(DEPDIR)/test_colorkey-test-colorkey.Po ++#include ./$(DEPDIR)/test_effect_switch-test-effect-switch.Po ++#include ./$(DEPDIR)/test_overlay_blending-test-overlay-blending.Po ++#include ./$(DEPDIR)/test_reverseplay-test-reverseplay.Po ++#include ./$(DEPDIR)/test_scale-test-scale.Po ++#include ./$(DEPDIR)/test_textoverlay-test-textoverlay.Po ++#include ./$(DEPDIR)/test_videooverlay-test-videooverlay.Po ++ ++.c.o: ++# $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ ++# $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ ++# $(am__mv) $$depbase.Tpo $$depbase.Po ++# $(AM_V_CC)source='$<' object='$@' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(COMPILE) -c -o $@ $< ++ ++.c.obj: ++# $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ ++# $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ ++# $(am__mv) $$depbase.Tpo $$depbase.Po ++# $(AM_V_CC)source='$<' object='$@' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++.c.lo: ++# $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ ++# $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ ++# $(am__mv) $$depbase.Tpo $$depbase.Plo ++# $(AM_V_CC)source='$<' object='$@' libtool=yes ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< ++ ++audio_trickplay-audio-trickplay.o: audio-trickplay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -MT audio_trickplay-audio-trickplay.o -MD -MP -MF $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo -c -o audio_trickplay-audio-trickplay.o `test -f 'audio-trickplay.c' || echo '$(srcdir)/'`audio-trickplay.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo $(DEPDIR)/audio_trickplay-audio-trickplay.Po ++# $(AM_V_CC)source='audio-trickplay.c' object='audio_trickplay-audio-trickplay.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -c -o audio_trickplay-audio-trickplay.o `test -f 'audio-trickplay.c' || echo '$(srcdir)/'`audio-trickplay.c ++ ++audio_trickplay-audio-trickplay.obj: audio-trickplay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -MT audio_trickplay-audio-trickplay.obj -MD -MP -MF $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo -c -o audio_trickplay-audio-trickplay.obj `if test -f 'audio-trickplay.c'; then $(CYGPATH_W) 'audio-trickplay.c'; else $(CYGPATH_W) '$(srcdir)/audio-trickplay.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo $(DEPDIR)/audio_trickplay-audio-trickplay.Po ++# $(AM_V_CC)source='audio-trickplay.c' object='audio_trickplay-audio-trickplay.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -c -o audio_trickplay-audio-trickplay.obj `if test -f 'audio-trickplay.c'; then $(CYGPATH_W) 'audio-trickplay.c'; else $(CYGPATH_W) '$(srcdir)/audio-trickplay.c'; fi` ++ ++input_selector_test-input-selector-test.o: input-selector-test.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -MT input_selector_test-input-selector-test.o -MD -MP -MF $(DEPDIR)/input_selector_test-input-selector-test.Tpo -c -o input_selector_test-input-selector-test.o `test -f 'input-selector-test.c' || echo '$(srcdir)/'`input-selector-test.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/input_selector_test-input-selector-test.Tpo $(DEPDIR)/input_selector_test-input-selector-test.Po ++# $(AM_V_CC)source='input-selector-test.c' object='input_selector_test-input-selector-test.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -c -o input_selector_test-input-selector-test.o `test -f 'input-selector-test.c' || echo '$(srcdir)/'`input-selector-test.c ++ ++input_selector_test-input-selector-test.obj: input-selector-test.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -MT input_selector_test-input-selector-test.obj -MD -MP -MF $(DEPDIR)/input_selector_test-input-selector-test.Tpo -c -o input_selector_test-input-selector-test.obj `if test -f 'input-selector-test.c'; then $(CYGPATH_W) 'input-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/input-selector-test.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/input_selector_test-input-selector-test.Tpo $(DEPDIR)/input_selector_test-input-selector-test.Po ++# $(AM_V_CC)source='input-selector-test.c' object='input_selector_test-input-selector-test.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -c -o input_selector_test-input-selector-test.obj `if test -f 'input-selector-test.c'; then $(CYGPATH_W) 'input-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/input-selector-test.c'; fi` ++ ++output_selector_test-output-selector-test.o: output-selector-test.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -MT output_selector_test-output-selector-test.o -MD -MP -MF $(DEPDIR)/output_selector_test-output-selector-test.Tpo -c -o output_selector_test-output-selector-test.o `test -f 'output-selector-test.c' || echo '$(srcdir)/'`output-selector-test.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/output_selector_test-output-selector-test.Tpo $(DEPDIR)/output_selector_test-output-selector-test.Po ++# $(AM_V_CC)source='output-selector-test.c' object='output_selector_test-output-selector-test.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -c -o output_selector_test-output-selector-test.o `test -f 'output-selector-test.c' || echo '$(srcdir)/'`output-selector-test.c ++ ++output_selector_test-output-selector-test.obj: output-selector-test.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -MT output_selector_test-output-selector-test.obj -MD -MP -MF $(DEPDIR)/output_selector_test-output-selector-test.Tpo -c -o output_selector_test-output-selector-test.obj `if test -f 'output-selector-test.c'; then $(CYGPATH_W) 'output-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/output-selector-test.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/output_selector_test-output-selector-test.Tpo $(DEPDIR)/output_selector_test-output-selector-test.Po ++# $(AM_V_CC)source='output-selector-test.c' object='output_selector_test-output-selector-test.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -c -o output_selector_test-output-selector-test.obj `if test -f 'output-selector-test.c'; then $(CYGPATH_W) 'output-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/output-selector-test.c'; fi` ++ ++playbin_text-playbin-text.o: playbin-text.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -MT playbin_text-playbin-text.o -MD -MP -MF $(DEPDIR)/playbin_text-playbin-text.Tpo -c -o playbin_text-playbin-text.o `test -f 'playbin-text.c' || echo '$(srcdir)/'`playbin-text.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/playbin_text-playbin-text.Tpo $(DEPDIR)/playbin_text-playbin-text.Po ++# $(AM_V_CC)source='playbin-text.c' object='playbin_text-playbin-text.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -c -o playbin_text-playbin-text.o `test -f 'playbin-text.c' || echo '$(srcdir)/'`playbin-text.c ++ ++playbin_text-playbin-text.obj: playbin-text.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -MT playbin_text-playbin-text.obj -MD -MP -MF $(DEPDIR)/playbin_text-playbin-text.Tpo -c -o playbin_text-playbin-text.obj `if test -f 'playbin-text.c'; then $(CYGPATH_W) 'playbin-text.c'; else $(CYGPATH_W) '$(srcdir)/playbin-text.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/playbin_text-playbin-text.Tpo $(DEPDIR)/playbin_text-playbin-text.Po ++# $(AM_V_CC)source='playbin-text.c' object='playbin_text-playbin-text.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -c -o playbin_text-playbin-text.obj `if test -f 'playbin-text.c'; then $(CYGPATH_W) 'playbin-text.c'; else $(CYGPATH_W) '$(srcdir)/playbin-text.c'; fi` ++ ++position_formats-position-formats.o: position-formats.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -MT position_formats-position-formats.o -MD -MP -MF $(DEPDIR)/position_formats-position-formats.Tpo -c -o position_formats-position-formats.o `test -f 'position-formats.c' || echo '$(srcdir)/'`position-formats.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/position_formats-position-formats.Tpo $(DEPDIR)/position_formats-position-formats.Po ++# $(AM_V_CC)source='position-formats.c' object='position_formats-position-formats.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -c -o position_formats-position-formats.o `test -f 'position-formats.c' || echo '$(srcdir)/'`position-formats.c ++ ++position_formats-position-formats.obj: position-formats.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -MT position_formats-position-formats.obj -MD -MP -MF $(DEPDIR)/position_formats-position-formats.Tpo -c -o position_formats-position-formats.obj `if test -f 'position-formats.c'; then $(CYGPATH_W) 'position-formats.c'; else $(CYGPATH_W) '$(srcdir)/position-formats.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/position_formats-position-formats.Tpo $(DEPDIR)/position_formats-position-formats.Po ++# $(AM_V_CC)source='position-formats.c' object='position_formats-position-formats.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -c -o position_formats-position-formats.obj `if test -f 'position-formats.c'; then $(CYGPATH_W) 'position-formats.c'; else $(CYGPATH_W) '$(srcdir)/position-formats.c'; fi` ++ ++stress_playbin-stress-playbin.o: stress-playbin.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -MT stress_playbin-stress-playbin.o -MD -MP -MF $(DEPDIR)/stress_playbin-stress-playbin.Tpo -c -o stress_playbin-stress-playbin.o `test -f 'stress-playbin.c' || echo '$(srcdir)/'`stress-playbin.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/stress_playbin-stress-playbin.Tpo $(DEPDIR)/stress_playbin-stress-playbin.Po ++# $(AM_V_CC)source='stress-playbin.c' object='stress_playbin-stress-playbin.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -c -o stress_playbin-stress-playbin.o `test -f 'stress-playbin.c' || echo '$(srcdir)/'`stress-playbin.c ++ ++stress_playbin-stress-playbin.obj: stress-playbin.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -MT stress_playbin-stress-playbin.obj -MD -MP -MF $(DEPDIR)/stress_playbin-stress-playbin.Tpo -c -o stress_playbin-stress-playbin.obj `if test -f 'stress-playbin.c'; then $(CYGPATH_W) 'stress-playbin.c'; else $(CYGPATH_W) '$(srcdir)/stress-playbin.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/stress_playbin-stress-playbin.Tpo $(DEPDIR)/stress_playbin-stress-playbin.Po ++# $(AM_V_CC)source='stress-playbin.c' object='stress_playbin-stress-playbin.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -c -o stress_playbin-stress-playbin.obj `if test -f 'stress-playbin.c'; then $(CYGPATH_W) 'stress-playbin.c'; else $(CYGPATH_W) '$(srcdir)/stress-playbin.c'; fi` ++ ++stress_videooverlay-stress-videooverlay.o: stress-videooverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -MT stress_videooverlay-stress-videooverlay.o -MD -MP -MF $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo -c -o stress_videooverlay-stress-videooverlay.o `test -f 'stress-videooverlay.c' || echo '$(srcdir)/'`stress-videooverlay.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo $(DEPDIR)/stress_videooverlay-stress-videooverlay.Po ++# $(AM_V_CC)source='stress-videooverlay.c' object='stress_videooverlay-stress-videooverlay.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -c -o stress_videooverlay-stress-videooverlay.o `test -f 'stress-videooverlay.c' || echo '$(srcdir)/'`stress-videooverlay.c ++ ++stress_videooverlay-stress-videooverlay.obj: stress-videooverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -MT stress_videooverlay-stress-videooverlay.obj -MD -MP -MF $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo -c -o stress_videooverlay-stress-videooverlay.obj `if test -f 'stress-videooverlay.c'; then $(CYGPATH_W) 'stress-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/stress-videooverlay.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo $(DEPDIR)/stress_videooverlay-stress-videooverlay.Po ++# $(AM_V_CC)source='stress-videooverlay.c' object='stress_videooverlay-stress-videooverlay.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -c -o stress_videooverlay-stress-videooverlay.obj `if test -f 'stress-videooverlay.c'; then $(CYGPATH_W) 'stress-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/stress-videooverlay.c'; fi` ++ ++test_box-test-box.o: test-box.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -MT test_box-test-box.o -MD -MP -MF $(DEPDIR)/test_box-test-box.Tpo -c -o test_box-test-box.o `test -f 'test-box.c' || echo '$(srcdir)/'`test-box.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_box-test-box.Tpo $(DEPDIR)/test_box-test-box.Po ++# $(AM_V_CC)source='test-box.c' object='test_box-test-box.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -c -o test_box-test-box.o `test -f 'test-box.c' || echo '$(srcdir)/'`test-box.c ++ ++test_box-test-box.obj: test-box.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -MT test_box-test-box.obj -MD -MP -MF $(DEPDIR)/test_box-test-box.Tpo -c -o test_box-test-box.obj `if test -f 'test-box.c'; then $(CYGPATH_W) 'test-box.c'; else $(CYGPATH_W) '$(srcdir)/test-box.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_box-test-box.Tpo $(DEPDIR)/test_box-test-box.Po ++# $(AM_V_CC)source='test-box.c' object='test_box-test-box.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -c -o test_box-test-box.obj `if test -f 'test-box.c'; then $(CYGPATH_W) 'test-box.c'; else $(CYGPATH_W) '$(srcdir)/test-box.c'; fi` ++ ++test_colorkey-test-colorkey.o: test-colorkey.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -MT test_colorkey-test-colorkey.o -MD -MP -MF $(DEPDIR)/test_colorkey-test-colorkey.Tpo -c -o test_colorkey-test-colorkey.o `test -f 'test-colorkey.c' || echo '$(srcdir)/'`test-colorkey.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_colorkey-test-colorkey.Tpo $(DEPDIR)/test_colorkey-test-colorkey.Po ++# $(AM_V_CC)source='test-colorkey.c' object='test_colorkey-test-colorkey.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -c -o test_colorkey-test-colorkey.o `test -f 'test-colorkey.c' || echo '$(srcdir)/'`test-colorkey.c ++ ++test_colorkey-test-colorkey.obj: test-colorkey.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -MT test_colorkey-test-colorkey.obj -MD -MP -MF $(DEPDIR)/test_colorkey-test-colorkey.Tpo -c -o test_colorkey-test-colorkey.obj `if test -f 'test-colorkey.c'; then $(CYGPATH_W) 'test-colorkey.c'; else $(CYGPATH_W) '$(srcdir)/test-colorkey.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_colorkey-test-colorkey.Tpo $(DEPDIR)/test_colorkey-test-colorkey.Po ++# $(AM_V_CC)source='test-colorkey.c' object='test_colorkey-test-colorkey.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -c -o test_colorkey-test-colorkey.obj `if test -f 'test-colorkey.c'; then $(CYGPATH_W) 'test-colorkey.c'; else $(CYGPATH_W) '$(srcdir)/test-colorkey.c'; fi` ++ ++test_effect_switch-test-effect-switch.o: test-effect-switch.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_effect_switch_CFLAGS) $(CFLAGS) -MT test_effect_switch-test-effect-switch.o -MD -MP -MF $(DEPDIR)/test_effect_switch-test-effect-switch.Tpo -c -o test_effect_switch-test-effect-switch.o `test -f 'test-effect-switch.c' || echo '$(srcdir)/'`test-effect-switch.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_effect_switch-test-effect-switch.Tpo $(DEPDIR)/test_effect_switch-test-effect-switch.Po ++# $(AM_V_CC)source='test-effect-switch.c' object='test_effect_switch-test-effect-switch.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_effect_switch_CFLAGS) $(CFLAGS) -c -o test_effect_switch-test-effect-switch.o `test -f 'test-effect-switch.c' || echo '$(srcdir)/'`test-effect-switch.c ++ ++test_effect_switch-test-effect-switch.obj: test-effect-switch.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_effect_switch_CFLAGS) $(CFLAGS) -MT test_effect_switch-test-effect-switch.obj -MD -MP -MF $(DEPDIR)/test_effect_switch-test-effect-switch.Tpo -c -o test_effect_switch-test-effect-switch.obj `if test -f 'test-effect-switch.c'; then $(CYGPATH_W) 'test-effect-switch.c'; else $(CYGPATH_W) '$(srcdir)/test-effect-switch.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_effect_switch-test-effect-switch.Tpo $(DEPDIR)/test_effect_switch-test-effect-switch.Po ++# $(AM_V_CC)source='test-effect-switch.c' object='test_effect_switch-test-effect-switch.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_effect_switch_CFLAGS) $(CFLAGS) -c -o test_effect_switch-test-effect-switch.obj `if test -f 'test-effect-switch.c'; then $(CYGPATH_W) 'test-effect-switch.c'; else $(CYGPATH_W) '$(srcdir)/test-effect-switch.c'; fi` ++ ++test_overlay_blending-test-overlay-blending.o: test-overlay-blending.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.o -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po ++# $(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c ++ ++test_overlay_blending-test-overlay-blending.obj: test-overlay-blending.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.obj -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po ++# $(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi` ++ ++test_reverseplay-test-reverseplay.o: test-reverseplay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.o -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po ++# $(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c ++ ++test_reverseplay-test-reverseplay.obj: test-reverseplay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.obj -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po ++# $(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi` ++ ++test_scale-test-scale.o: test-scale.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.o -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po ++# $(AM_V_CC)source='test-scale.c' object='test_scale-test-scale.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c ++ ++test_scale-test-scale.obj: test-scale.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.obj -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.obj `if test -f 'test-scale.c'; then $(CYGPATH_W) 'test-scale.c'; else $(CYGPATH_W) '$(srcdir)/test-scale.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po ++# $(AM_V_CC)source='test-scale.c' object='test_scale-test-scale.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -c -o test_scale-test-scale.obj `if test -f 'test-scale.c'; then $(CYGPATH_W) 'test-scale.c'; else $(CYGPATH_W) '$(srcdir)/test-scale.c'; fi` ++ ++test_textoverlay-test-textoverlay.o: test-textoverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -MT test_textoverlay-test-textoverlay.o -MD -MP -MF $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo -c -o test_textoverlay-test-textoverlay.o `test -f 'test-textoverlay.c' || echo '$(srcdir)/'`test-textoverlay.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo $(DEPDIR)/test_textoverlay-test-textoverlay.Po ++# $(AM_V_CC)source='test-textoverlay.c' object='test_textoverlay-test-textoverlay.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -c -o test_textoverlay-test-textoverlay.o `test -f 'test-textoverlay.c' || echo '$(srcdir)/'`test-textoverlay.c ++ ++test_textoverlay-test-textoverlay.obj: test-textoverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -MT test_textoverlay-test-textoverlay.obj -MD -MP -MF $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo -c -o test_textoverlay-test-textoverlay.obj `if test -f 'test-textoverlay.c'; then $(CYGPATH_W) 'test-textoverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-textoverlay.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo $(DEPDIR)/test_textoverlay-test-textoverlay.Po ++# $(AM_V_CC)source='test-textoverlay.c' object='test_textoverlay-test-textoverlay.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -c -o test_textoverlay-test-textoverlay.obj `if test -f 'test-textoverlay.c'; then $(CYGPATH_W) 'test-textoverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-textoverlay.c'; fi` ++ ++test_videooverlay-test-videooverlay.o: test-videooverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -MT test_videooverlay-test-videooverlay.o -MD -MP -MF $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo -c -o test_videooverlay-test-videooverlay.o `test -f 'test-videooverlay.c' || echo '$(srcdir)/'`test-videooverlay.c ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo $(DEPDIR)/test_videooverlay-test-videooverlay.Po ++# $(AM_V_CC)source='test-videooverlay.c' object='test_videooverlay-test-videooverlay.o' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -c -o test_videooverlay-test-videooverlay.o `test -f 'test-videooverlay.c' || echo '$(srcdir)/'`test-videooverlay.c ++ ++test_videooverlay-test-videooverlay.obj: test-videooverlay.c ++# $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -MT test_videooverlay-test-videooverlay.obj -MD -MP -MF $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo -c -o test_videooverlay-test-videooverlay.obj `if test -f 'test-videooverlay.c'; then $(CYGPATH_W) 'test-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-videooverlay.c'; fi` ++# $(AM_V_at)$(am__mv) $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo $(DEPDIR)/test_videooverlay-test-videooverlay.Po ++# $(AM_V_CC)source='test-videooverlay.c' object='test_videooverlay-test-videooverlay.obj' libtool=no ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) ++ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -c -o test_videooverlay-test-videooverlay.obj `if test -f 'test-videooverlay.c'; then $(CYGPATH_W) 'test-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-videooverlay.c'; fi` ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ ++# This directory's subdirectories are mostly independent; you can cd ++# into them and run 'make' without going through this Makefile. ++# To change the values of 'make' variables: instead of editing Makefiles, ++# (1) if the variable is set in 'config.status', edit 'config.status' ++# (which will cause the Makefiles to be regenerated when you run 'make'); ++# (2) otherwise, pass the desired values on the 'make' command line. ++$(am__recursive_targets): ++ @fail=; \ ++ if $(am__make_keepgoing); then \ ++ failcom='fail=yes'; \ ++ else \ ++ failcom='exit 1'; \ ++ fi; \ ++ dot_seen=no; \ ++ target=`echo $@ | sed s/-recursive//`; \ ++ case "$@" in \ ++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ ++ *) list='$(SUBDIRS)' ;; \ ++ esac; \ ++ for subdir in $$list; do \ ++ echo "Making $$target in $$subdir"; \ ++ if test "$$subdir" = "."; then \ ++ dot_seen=yes; \ ++ local_target="$$target-am"; \ ++ else \ ++ local_target="$$target"; \ ++ fi; \ ++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ ++ || eval $$failcom; \ ++ done; \ ++ if test "$$dot_seen" = "no"; then \ ++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ ++ fi; test -z "$$fail" ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-recursive ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ ++ include_option=--etags-include; \ ++ empty_fix=.; \ ++ else \ ++ include_option=--include; \ ++ empty_fix=; \ ++ fi; \ ++ list='$(SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ test ! -f $$subdir/TAGS || \ ++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ ++ fi; \ ++ done; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-recursive ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ ++ if test "$$subdir" = .; then :; else \ ++ $(am__make_dryrun) \ ++ || test -d "$(distdir)/$$subdir" \ ++ || $(MKDIR_P) "$(distdir)/$$subdir" \ ++ || exit 1; \ ++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ ++ $(am__relativize); \ ++ new_distdir=$$reldir; \ ++ dir1=$$subdir; dir2="$(top_distdir)"; \ ++ $(am__relativize); \ ++ new_top_distdir=$$reldir; \ ++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ ++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ++ ($(am__cd) $$subdir && \ ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$$new_top_distdir" \ ++ distdir="$$new_distdir" \ ++ am__remove_distdir=: \ ++ am__skip_length_check=: \ ++ am__skip_mode_fix=: \ ++ distdir) \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++check: check-recursive ++all-am: Makefile $(PROGRAMS) ++installdirs: installdirs-recursive ++installdirs-am: ++install: install-recursive ++install-exec: install-exec-recursive ++install-data: install-data-recursive ++uninstall: uninstall-recursive ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-recursive ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-recursive ++ ++clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ ++ mostlyclean-am ++ ++distclean: distclean-recursive ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-tags ++ ++dvi: dvi-recursive ++ ++dvi-am: ++ ++html: html-recursive ++ ++html-am: ++ ++info: info-recursive ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-recursive ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-recursive ++ ++install-html-am: ++ ++install-info: install-info-recursive ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-recursive ++ ++install-pdf-am: ++ ++install-ps: install-ps-recursive ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-recursive ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-recursive ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic \ ++ mostlyclean-libtool ++ ++pdf: pdf-recursive ++ ++pdf-am: ++ ++ps: ps-recursive ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: $(am__recursive_targets) install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ ++ check-am clean clean-generic clean-libtool \ ++ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ ++ distclean-compile distclean-generic distclean-libtool \ ++ distclean-tags distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ installdirs-am maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-compile mostlyclean-generic \ ++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ ++ uninstall-am ++ ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/q5 gst-plugins-base1.0-1.6.1/debian/patches/q5 --- gst-plugins-base1.0-1.4.3/debian/patches/q5 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/q5 2015-11-02 15:35:26.000000000 +0000 @@ -0,0 +1,2118 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + gst-plugins-base1.0 (1.6.1-0) trusty; urgency=medium + . + * sync with latest stable release + . + [ Dan Witt ] + * sync with git +Author: Dan Witt + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- gst-plugins-base1.0-1.6.1.orig/config.log ++++ gst-plugins-base1.0-1.6.1/config.log +@@ -4,7 +4,7 @@ running configure, to aid debugging if c + It was created by GStreamer Base Plug-ins configure 1.6.1, which was + generated by GNU Autoconf 2.69. Invocation command line was + +- $ ./configure ++ $ /root/debs/gst-plugins-base1.0-1.6.1/./configure --build=x86_64-linux-gnu --prefix=/usr --includedir=${prefix}/include --mandir=${prefix}/share/man --infodir=${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --libexecdir=${prefix}/lib/gst-plugins-base1.0 --srcdir=. --disable-maintainer-mode --disable-dependency-tracking --disable-silent-rules --disable-failing-tests --disable-examples --enable-DEBUG --enable-debug --enable-experimental --libdir=${prefix}/lib/x86_64-linux-gnu --with-package-name=GStreamer Base Plugins (Ubuntu) --with-package-origin=https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 --with-install-plugins-helper=/usr/bin/gstreamer-codec-install --enable-gtk-doc + + ## --------- ## + ## Platform. ## +@@ -39,33 +39,31 @@ PATH: /bin + ## Core tests. ## + ## ----------- ## + +-configure:3316: checking build system type +-configure:3330: result: x86_64-unknown-linux-gnu +-configure:3350: checking host system type +-configure:3363: result: x86_64-unknown-linux-gnu +-configure:3383: checking target system type +-configure:3396: result: x86_64-unknown-linux-gnu +-configure:3442: checking for a BSD-compatible install +-configure:3510: result: /usr/bin/install -c +-configure:3521: checking whether build environment is sane +-configure:3576: result: yes +-configure:3727: checking for a thread-safe mkdir -p +-configure:3766: result: /bin/mkdir -p +-configure:3773: checking for gawk +-configure:3803: result: no +-configure:3773: checking for mawk +-configure:3789: found /usr/bin/mawk +-configure:3800: result: mawk +-configure:3811: checking whether make sets $(MAKE) +-configure:3833: result: yes +-configure:3862: checking whether make supports nested variables +-configure:3879: result: yes +-configure:3968: checking whether UID '0' is supported by ustar format +-configure:3971: result: yes +-configure:3978: checking whether GID '0' is supported by ustar format +-configure:3981: result: yes +-configure:3989: checking how to create a ustar tar archive +-configure:4000: tar --version ++configure:3304: checking build system type ++configure:3318: result: x86_64-pc-linux-gnu ++configure:3338: checking host system type ++configure:3351: result: x86_64-pc-linux-gnu ++configure:3371: checking target system type ++configure:3384: result: x86_64-pc-linux-gnu ++configure:3430: checking for a BSD-compatible install ++configure:3498: result: /usr/bin/install -c ++configure:3509: checking whether build environment is sane ++configure:3564: result: yes ++configure:3715: checking for a thread-safe mkdir -p ++configure:3754: result: /bin/mkdir -p ++configure:3761: checking for gawk ++configure:3777: found /usr/bin/gawk ++configure:3788: result: gawk ++configure:3799: checking whether make sets $(MAKE) ++configure:3821: result: yes ++configure:3850: checking whether make supports nested variables ++configure:3867: result: yes ++configure:3956: checking whether UID '0' is supported by ustar format ++configure:3959: result: yes ++configure:3966: checking whether GID '0' is supported by ustar format ++configure:3969: result: yes ++configure:3977: checking how to create a ustar tar archive ++configure:3988: tar --version + tar (GNU tar) 1.27.1 + Copyright (C) 2013 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later . +@@ -73,37 +71,37 @@ This is free software: you are free to c + There is NO WARRANTY, to the extent permitted by law. + + Written by John Gilmore and Jay Fenlason. +-configure:4003: $? = 0 +-configure:4043: tardir=conftest.dir && eval tar --format=ustar -chf - "$tardir" >conftest.tar +-configure:4046: $? = 0 +-configure:4050: tar -xf - conftest.tar ++configure:4034: $? = 0 ++configure:4038: tar -xf - &5 ++configure:4046: $? = 0 ++configure:4059: result: gnutar ++configure:4120: checking nano version ++configure:4126: result: 0 (release) ++configure:4152: checking whether to enable maintainer-specific portions of Makefiles ++configure:4161: result: no ++configure:4188: checking whether make supports nested variables ++configure:4205: result: yes ++configure:4271: checking how to print strings ++configure:4298: result: printf ++configure:4331: checking for style of include used by make ++configure:4359: result: GNU ++configure:4430: checking for gcc ++configure:4446: found /usr/bin/gcc ++configure:4457: result: gcc ++configure:4686: checking for C compiler version ++configure:4695: gcc --version >&5 + gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 + Copyright (C) 2013 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +-configure:4719: $? = 0 +-configure:4708: gcc -v >&5 ++configure:4706: $? = 0 ++configure:4695: gcc -v >&5 + Using built-in specs. + COLLECT_GCC=gcc + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper +@@ -111,145 +109,145 @@ Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) +-configure:4719: $? = 0 +-configure:4708: gcc -V >&5 ++configure:4706: $? = 0 ++configure:4695: gcc -V >&5 + gcc: error: unrecognized command line option '-V' + gcc: fatal error: no input files + compilation terminated. +-configure:4719: $? = 4 +-configure:4708: gcc -qversion >&5 ++configure:4706: $? = 4 ++configure:4695: gcc -qversion >&5 + gcc: error: unrecognized command line option '-qversion' + gcc: fatal error: no input files + compilation terminated. +-configure:4719: $? = 4 +-configure:4739: checking whether the C compiler works +-configure:4761: gcc conftest.c >&5 +-configure:4765: $? = 0 +-configure:4813: result: yes +-configure:4816: checking for C compiler default output file name +-configure:4818: result: a.out +-configure:4824: checking for suffix of executables +-configure:4831: gcc -o conftest conftest.c >&5 +-configure:4835: $? = 0 +-configure:4857: result: +-configure:4879: checking whether we are cross compiling +-configure:4887: gcc -o conftest conftest.c >&5 +-configure:4891: $? = 0 +-configure:4898: ./conftest +-configure:4902: $? = 0 +-configure:4917: result: no +-configure:4922: checking for suffix of object files +-configure:4944: gcc -c conftest.c >&5 +-configure:4948: $? = 0 +-configure:4969: result: o +-configure:4973: checking whether we are using the GNU C compiler +-configure:4992: gcc -c conftest.c >&5 +-configure:4992: $? = 0 +-configure:5001: result: yes +-configure:5010: checking whether gcc accepts -g +-configure:5030: gcc -c -g conftest.c >&5 +-configure:5030: $? = 0 +-configure:5071: result: yes +-configure:5088: checking for gcc option to accept ISO C89 +-configure:5151: gcc -c -g -O2 conftest.c >&5 +-configure:5151: $? = 0 +-configure:5164: result: none needed +-configure:5189: checking whether gcc understands -c and -o together +-configure:5211: gcc -c conftest.c -o conftest2.o +-configure:5214: $? = 0 +-configure:5211: gcc -c conftest.c -o conftest2.o +-configure:5214: $? = 0 +-configure:5226: result: yes +-configure:5245: checking dependency style of gcc +-configure:5356: result: gcc3 +-configure:5371: checking for a sed that does not truncate output +-configure:5435: result: /bin/sed +-configure:5453: checking for grep that handles long lines and -e +-configure:5511: result: /bin/grep +-configure:5516: checking for egrep +-configure:5578: result: /bin/grep -E +-configure:5583: checking for fgrep +-configure:5645: result: /bin/grep -F +-configure:5680: checking for ld used by gcc +-configure:5747: result: /usr/bin/ld +-configure:5754: checking if the linker (/usr/bin/ld) is GNU ld +-configure:5769: result: yes +-configure:5781: checking for BSD- or MS-compatible name lister (nm) +-configure:5830: result: /usr/bin/nm -B +-configure:5960: checking the name lister (/usr/bin/nm -B) interface +-configure:5967: gcc -c -g -O2 conftest.c >&5 +-configure:5970: /usr/bin/nm -B "conftest.o" +-configure:5973: output ++configure:4706: $? = 4 ++configure:4726: checking whether the C compiler works ++configure:4748: gcc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:4752: $? = 0 ++configure:4800: result: yes ++configure:4803: checking for C compiler default output file name ++configure:4805: result: a.out ++configure:4811: checking for suffix of executables ++configure:4818: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:4822: $? = 0 ++configure:4844: result: ++configure:4866: checking whether we are cross compiling ++configure:4874: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:4878: $? = 0 ++configure:4885: ./conftest ++configure:4889: $? = 0 ++configure:4904: result: no ++configure:4909: checking for suffix of object files ++configure:4931: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:4935: $? = 0 ++configure:4956: result: o ++configure:4960: checking whether we are using the GNU C compiler ++configure:4979: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:4979: $? = 0 ++configure:4988: result: yes ++configure:4997: checking whether gcc accepts -g ++configure:5017: gcc -c -g -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:5017: $? = 0 ++configure:5058: result: yes ++configure:5075: checking for gcc option to accept ISO C89 ++configure:5138: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:5138: $? = 0 ++configure:5151: result: none needed ++configure:5176: checking whether gcc understands -c and -o together ++configure:5198: gcc -c conftest.c -o conftest2.o ++configure:5201: $? = 0 ++configure:5198: gcc -c conftest.c -o conftest2.o ++configure:5201: $? = 0 ++configure:5213: result: yes ++configure:5232: checking dependency style of gcc ++configure:5343: result: none ++configure:5358: checking for a sed that does not truncate output ++configure:5422: result: /bin/sed ++configure:5440: checking for grep that handles long lines and -e ++configure:5498: result: /bin/grep ++configure:5503: checking for egrep ++configure:5565: result: /bin/grep -E ++configure:5570: checking for fgrep ++configure:5632: result: /bin/grep -F ++configure:5667: checking for ld used by gcc ++configure:5734: result: /usr/bin/ld ++configure:5741: checking if the linker (/usr/bin/ld) is GNU ld ++configure:5756: result: yes ++configure:5768: checking for BSD- or MS-compatible name lister (nm) ++configure:5817: result: /usr/bin/nm -B ++configure:5947: checking the name lister (/usr/bin/nm -B) interface ++configure:5954: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:5957: /usr/bin/nm -B "conftest.o" ++configure:5960: output + 0000000000000000 B some_variable +-configure:5980: result: BSD nm +-configure:5983: checking whether ln -s works +-configure:5987: result: yes +-configure:5995: checking the maximum length of command line arguments +-configure:6126: result: 1572864 +-configure:6143: checking whether the shell understands some XSI constructs +-configure:6153: result: yes +-configure:6157: checking whether the shell understands "+=" +-configure:6163: result: yes +-configure:6198: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format +-configure:6238: result: func_convert_file_noop +-configure:6245: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format +-configure:6265: result: func_convert_file_noop +-configure:6272: checking for /usr/bin/ld option to reload object files +-configure:6279: result: -r +-configure:6353: checking for objdump +-configure:6369: found /usr/bin/objdump +-configure:6380: result: objdump +-configure:6409: checking how to recognize dependent libraries +-configure:6607: result: pass_all +-configure:6692: checking for dlltool +-configure:6722: result: no +-configure:6749: checking how to associate runtime and link libraries +-configure:6776: result: printf %s\n +-configure:6837: checking for ar +-configure:6853: found /usr/bin/ar +-configure:6864: result: ar +-configure:6901: checking for archiver @FILE support +-configure:6918: gcc -c -g -O2 conftest.c >&5 +-configure:6918: $? = 0 +-configure:6921: ar cru libconftest.a @conftest.lst >&5 +-configure:6924: $? = 0 +-configure:6929: ar cru libconftest.a @conftest.lst >&5 ++configure:5967: result: BSD nm ++configure:5970: checking whether ln -s works ++configure:5974: result: yes ++configure:5982: checking the maximum length of command line arguments ++configure:6113: result: 3458764513820540925 ++configure:6130: checking whether the shell understands some XSI constructs ++configure:6140: result: yes ++configure:6144: checking whether the shell understands "+=" ++configure:6150: result: yes ++configure:6185: checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format ++configure:6225: result: func_convert_file_noop ++configure:6232: checking how to convert x86_64-pc-linux-gnu file names to toolchain format ++configure:6252: result: func_convert_file_noop ++configure:6259: checking for /usr/bin/ld option to reload object files ++configure:6266: result: -r ++configure:6340: checking for objdump ++configure:6356: found /usr/bin/objdump ++configure:6367: result: objdump ++configure:6396: checking how to recognize dependent libraries ++configure:6594: result: pass_all ++configure:6679: checking for dlltool ++configure:6709: result: no ++configure:6736: checking how to associate runtime and link libraries ++configure:6763: result: printf %s\n ++configure:6824: checking for ar ++configure:6840: found /usr/bin/ar ++configure:6851: result: ar ++configure:6888: checking for archiver @FILE support ++configure:6905: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:6905: $? = 0 ++configure:6908: ar cru libconftest.a @conftest.lst >&5 ++configure:6911: $? = 0 ++configure:6916: ar cru libconftest.a @conftest.lst >&5 + ar: conftest.o: No such file or directory +-configure:6932: $? = 1 +-configure:6944: result: @ +-configure:7002: checking for strip +-configure:7018: found /usr/bin/strip +-configure:7029: result: strip +-configure:7101: checking for ranlib +-configure:7117: found /usr/bin/ranlib +-configure:7128: result: ranlib +-configure:7230: checking command to parse /usr/bin/nm -B output from gcc object +-configure:7350: gcc -c -g -O2 conftest.c >&5 +-configure:7353: $? = 0 +-configure:7357: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm +-configure:7360: $? = 0 +-configure:7426: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +-configure:7429: $? = 0 +-configure:7467: result: ok +-configure:7504: checking for sysroot +-configure:7534: result: no +-configure:7611: gcc -c -g -O2 conftest.c >&5 +-configure:7614: $? = 0 +-configure:7803: checking for mt +-configure:7819: found /bin/mt +-configure:7830: result: mt +-configure:7853: checking if mt is a manifest tool +-configure:7859: mt '-?' +-configure:7867: result: no +-configure:8509: checking how to run the C preprocessor +-configure:8540: gcc -E conftest.c +-configure:8540: $? = 0 +-configure:8554: gcc -E conftest.c ++configure:6919: $? = 1 ++configure:6931: result: @ ++configure:6989: checking for strip ++configure:7005: found /usr/bin/strip ++configure:7016: result: strip ++configure:7088: checking for ranlib ++configure:7104: found /usr/bin/ranlib ++configure:7115: result: ranlib ++configure:7217: checking command to parse /usr/bin/nm -B output from gcc object ++configure:7337: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:7340: $? = 0 ++configure:7344: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm ++configure:7347: $? = 0 ++configure:7413: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c conftstm.o >&5 ++configure:7416: $? = 0 ++configure:7454: result: ok ++configure:7491: checking for sysroot ++configure:7521: result: no ++configure:7598: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:7601: $? = 0 ++configure:7790: checking for mt ++configure:7806: found /bin/mt ++configure:7817: result: mt ++configure:7840: checking if mt is a manifest tool ++configure:7846: mt '-?' ++configure:7854: result: no ++configure:8496: checking how to run the C preprocessor ++configure:8527: gcc -E -D_FORTIFY_SOURCE=2 conftest.c ++configure:8527: $? = 0 ++configure:8541: gcc -E -D_FORTIFY_SOURCE=2 conftest.c + conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ + compilation terminated. +-configure:8554: $? = 1 ++configure:8541: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -263,15 +261,15 @@ configure: failed program was: + | #define GST_API_VERSION "1.0" + | /* end confdefs.h. */ + | #include +-configure:8579: result: gcc -E +-configure:8599: gcc -E conftest.c +-configure:8599: $? = 0 +-configure:8613: gcc -E conftest.c ++configure:8566: result: gcc -E ++configure:8586: gcc -E -D_FORTIFY_SOURCE=2 conftest.c ++configure:8586: $? = 0 ++configure:8600: gcc -E -D_FORTIFY_SOURCE=2 conftest.c + conftest.c:12:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ + compilation terminated. +-configure:8613: $? = 1 ++configure:8600: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -285,95 +283,95 @@ configure: failed program was: + | #define GST_API_VERSION "1.0" + | /* end confdefs.h. */ + | #include +-configure:8642: checking for ANSI C header files +-configure:8662: gcc -c -g -O2 conftest.c >&5 +-configure:8662: $? = 0 +-configure:8735: gcc -o conftest -g -O2 conftest.c >&5 +-configure:8735: $? = 0 +-configure:8735: ./conftest +-configure:8735: $? = 0 ++configure:8629: checking for ANSI C header files ++configure:8649: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8649: $? = 0 ++configure:8722: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:8722: $? = 0 ++configure:8722: ./conftest ++configure:8722: $? = 0 ++configure:8733: result: yes ++configure:8746: checking for sys/types.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for sys/stat.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for stdlib.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for string.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for memory.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for strings.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 + configure:8746: result: yes +-configure:8759: checking for sys/types.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for sys/stat.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for stdlib.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for string.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for memory.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for strings.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for inttypes.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for stdint.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8759: checking for unistd.h +-configure:8759: gcc -c -g -O2 conftest.c >&5 +-configure:8759: $? = 0 +-configure:8759: result: yes +-configure:8773: checking for dlfcn.h +-configure:8773: gcc -c -g -O2 conftest.c >&5 +-configure:8773: $? = 0 +-configure:8773: result: yes +-configure:9293: checking for objdir +-configure:9308: result: .libs +-configure:9579: checking if gcc supports -fno-rtti -fno-exceptions +-configure:9597: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 ++configure:8746: checking for inttypes.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for stdint.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8746: checking for unistd.h ++configure:8746: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8746: $? = 0 ++configure:8746: result: yes ++configure:8760: checking for dlfcn.h ++configure:8760: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:8760: $? = 0 ++configure:8760: result: yes ++configure:9280: checking for objdir ++configure:9295: result: .libs ++configure:9566: checking if gcc supports -fno-rtti -fno-exceptions ++configure:9584: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -fno-rtti -fno-exceptions conftest.c >&5 + cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default] +-configure:9601: $? = 0 +-configure:9614: result: no +-configure:9941: checking for gcc option to produce PIC +-configure:9948: result: -fPIC -DPIC +-configure:9956: checking if gcc PIC flag -fPIC -DPIC works +-configure:9974: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +-configure:9978: $? = 0 +-configure:9991: result: yes +-configure:10020: checking if gcc static flag -static works +-configure:10048: result: yes +-configure:10063: checking if gcc supports -c -o file.o +-configure:10084: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +-configure:10088: $? = 0 +-configure:10110: result: yes +-configure:10118: checking if gcc supports -c -o file.o +-configure:10165: result: yes +-configure:10198: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +-configure:11355: result: yes +-configure:11392: checking whether -lc should be explicitly linked in +-configure:11400: gcc -c -g -O2 conftest.c >&5 +-configure:11403: $? = 0 +-configure:11418: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 +-configure:11421: $? = 0 +-configure:11435: result: no +-configure:11595: checking dynamic linker characteristics +-configure:12095: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +-configure:12095: $? = 0 +-configure:12329: result: GNU/Linux ld.so +-configure:12436: checking how to hardcode library paths into programs +-configure:12461: result: immediate +-configure:12555: checking for shl_load +-configure:12555: gcc -o conftest -g -O2 conftest.c >&5 +-/tmp/ccZ8Dz9W.o: In function `main': +-/root/debs/gst-plugins-base-1.6.1/conftest.c:58: undefined reference to `shl_load' ++configure:9588: $? = 0 ++configure:9601: result: no ++configure:9928: checking for gcc option to produce PIC ++configure:9935: result: -fPIC -DPIC ++configure:9943: checking if gcc PIC flag -fPIC -DPIC works ++configure:9961: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -fPIC -DPIC -DPIC conftest.c >&5 ++configure:9965: $? = 0 ++configure:9978: result: yes ++configure:10007: checking if gcc static flag -static works ++configure:10035: result: yes ++configure:10050: checking if gcc supports -c -o file.o ++configure:10071: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -o out/conftest2.o conftest.c >&5 ++configure:10075: $? = 0 ++configure:10097: result: yes ++configure:10105: checking if gcc supports -c -o file.o ++configure:10152: result: yes ++configure:10185: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:11342: result: yes ++configure:11379: checking whether -lc should be explicitly linked in ++configure:11387: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:11390: $? = 0 ++configure:11405: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 ++configure:11408: $? = 0 ++configure:11422: result: no ++configure:11582: checking dynamic linker characteristics ++configure:12082: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed -Wl,-rpath -Wl,/foo conftest.c >&5 ++configure:12082: $? = 0 ++configure:12316: result: GNU/Linux ld.so ++configure:12423: checking how to hardcode library paths into programs ++configure:12448: result: immediate ++configure:12542: checking for shl_load ++configure:12542: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++/tmp/cc1DJzMJ.o: In function `main': ++/root/debs/gst-plugins-base1.0-1.6.1/conftest.c:58: undefined reference to `shl_load' + collect2: error: ld returned 1 exit status +-configure:12555: $? = 1 ++configure:12542: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -436,12 +434,12 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:12555: result: no +-configure:12559: checking for shl_load in -ldld +-configure:12584: gcc -o conftest -g -O2 conftest.c -ldld >&5 ++configure:12542: result: no ++configure:12546: checking for shl_load in -ldld ++configure:12571: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -ldld >&5 + /usr/bin/ld: cannot find -ldld + collect2: error: ld returned 1 exit status +-configure:12584: $? = 1 ++configure:12571: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -481,13 +479,13 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:12593: result: no +-configure:12598: checking for dlopen +-configure:12598: gcc -o conftest -g -O2 conftest.c >&5 +-/tmp/cctxaDVX.o: In function `main': +-/root/debs/gst-plugins-base-1.6.1/conftest.c:58: undefined reference to `dlopen' ++configure:12580: result: no ++configure:12585: checking for dlopen ++configure:12585: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++/tmp/ccq0LhGM.o: In function `main': ++/root/debs/gst-plugins-base1.0-1.6.1/conftest.c:58: undefined reference to `dlopen' + collect2: error: ld returned 1 exit status +-configure:12598: $? = 1 ++configure:12585: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -550,59 +548,59 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:12598: result: no +-configure:12602: checking for dlopen in -ldl +-configure:12627: gcc -o conftest -g -O2 conftest.c -ldl >&5 +-configure:12627: $? = 0 +-configure:12636: result: yes +-configure:12755: checking whether a program can dlopen itself +-configure:12835: gcc -o conftest -g -O2 -DHAVE_DLFCN_H -Wl,--export-dynamic conftest.c -ldl >&5 +-configure:12838: $? = 0 +-configure:12856: result: yes +-configure:12861: checking whether a statically linked program can dlopen itself +-configure:12941: gcc -o conftest -g -O2 -DHAVE_DLFCN_H -Wl,--export-dynamic -static conftest.c -ldl >&5 +-/tmp/cc4CG5M6.o: In function `main': +-/root/debs/gst-plugins-base-1.6.1/configure:12920: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking ++configure:12585: result: no ++configure:12589: checking for dlopen in -ldl ++configure:12614: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -ldl >&5 ++configure:12614: $? = 0 ++configure:12623: result: yes ++configure:12742: checking whether a program can dlopen itself ++configure:12822: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -DHAVE_DLFCN_H -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed -Wl,--export-dynamic conftest.c -ldl >&5 ++configure:12825: $? = 0 ++configure:12843: result: yes ++configure:12848: checking whether a statically linked program can dlopen itself ++configure:12928: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -DHAVE_DLFCN_H -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed -Wl,--export-dynamic -static conftest.c -ldl >&5 ++/tmp/cceGJSSQ.o: In function `main': ++/root/debs/gst-plugins-base1.0-1.6.1/configure:12907: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking + /usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie + collect2: error: ld returned 1 exit status +-configure:12944: $? = 1 +-configure:12962: result: no +-configure:13001: checking whether stripping libraries is possible +-configure:13006: result: yes +-configure:13041: checking if libtool supports shared libraries +-configure:13043: result: yes +-configure:13046: checking whether to build shared libraries +-configure:13067: result: yes +-configure:13070: checking whether to build static libraries +-configure:13074: result: no +-configure:13186: checking whether NLS is requested +-configure:13195: result: yes +-configure:13236: checking for msgfmt ++configure:12931: $? = 1 ++configure:12949: result: no ++configure:12988: checking whether stripping libraries is possible ++configure:12993: result: yes ++configure:13028: checking if libtool supports shared libraries ++configure:13030: result: yes ++configure:13033: checking whether to build shared libraries ++configure:13054: result: yes ++configure:13057: checking whether to build static libraries ++configure:13061: result: no ++configure:13173: checking whether NLS is requested ++configure:13182: result: yes ++configure:13223: checking for msgfmt + configure: trying /usr/bin/msgfmt... + 0 translated messages. +-configure:13268: result: /usr/bin/msgfmt +-configure:13277: checking for gmsgfmt +-configure:13308: result: /usr/bin/msgfmt +-configure:13359: checking for xgettext ++configure:13255: result: /usr/bin/msgfmt ++configure:13264: checking for gmsgfmt ++configure:13295: result: /usr/bin/msgfmt ++configure:13346: checking for xgettext + configure: trying /usr/bin/xgettext... + /usr/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C +-configure:13391: result: /usr/bin/xgettext +-configure:13437: checking for msgmerge ++configure:13378: result: /usr/bin/xgettext ++configure:13424: checking for msgmerge + configure: trying /usr/bin/msgmerge... +-configure:13468: result: /usr/bin/msgmerge +-configure:13525: checking for ld used by GCC +-configure:13589: result: /usr/bin/ld -m elf_x86_64 +-configure:13596: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld +-configure:13609: result: yes +-configure:13616: checking for shared library run path origin +-configure:13629: result: done +-configure:14130: checking for CFPreferencesCopyAppValue +-configure:14148: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 ++configure:13455: result: /usr/bin/msgmerge ++configure:13512: checking for ld used by GCC ++configure:13576: result: /usr/bin/ld -m elf_x86_64 ++configure:13583: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld ++configure:13596: result: yes ++configure:13603: checking for shared library run path origin ++configure:13616: result: done ++configure:14117: checking for CFPreferencesCopyAppValue ++configure:14135: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -Wl,-framework -Wl,CoreFoundation >&5 + conftest.c:24:42: fatal error: CoreFoundation/CFPreferences.h: No such file or directory + #include + ^ + compilation terminated. +-configure:14148: $? = 1 ++configure:14135: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -635,14 +633,14 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:14157: result: no +-configure:14164: checking for CFLocaleCopyCurrent +-configure:14182: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 ++configure:14144: result: no ++configure:14151: checking for CFLocaleCopyCurrent ++configure:14169: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -Wl,-framework -Wl,CoreFoundation >&5 + conftest.c:24:37: fatal error: CoreFoundation/CFLocale.h: No such file or directory + #include + ^ + compilation terminated. +-configure:14182: $? = 1 ++configure:14169: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -675,53 +673,53 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:14191: result: no +-configure:14240: checking for GNU gettext in libc +-configure:14260: gcc -o conftest -g -O2 conftest.c >&5 +-configure:14260: $? = 0 +-configure:14269: result: yes +-configure:15015: checking whether to use NLS +-configure:15017: result: yes +-configure:15020: checking where the gettext function comes from +-configure:15031: result: libc +-configure:15242: checking for pkg-config +-configure:15260: found /usr/bin/pkg-config +-configure:15272: result: /usr/bin/pkg-config +-configure:15297: checking pkg-config is at least version 0.9.0 +-configure:15300: result: yes +-configure:15326: checking for VALGRIND +-configure:15334: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" ++configure:14178: result: no ++configure:14227: checking for GNU gettext in libc ++configure:14247: gcc -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:14247: $? = 0 ++configure:14256: result: yes ++configure:15002: checking whether to use NLS ++configure:15004: result: yes ++configure:15007: checking where the gettext function comes from ++configure:15018: result: libc ++configure:15229: checking for pkg-config ++configure:15247: found /usr/bin/pkg-config ++configure:15259: result: /usr/bin/pkg-config ++configure:15284: checking pkg-config is at least version 0.9.0 ++configure:15287: result: yes ++configure:15313: checking for VALGRIND ++configure:15321: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" + Package valgrind was not found in the pkg-config search path. + Perhaps you should add the directory containing `valgrind.pc' + to the PKG_CONFIG_PATH environment variable + No package 'valgrind' found +-configure:15337: $? = 1 +-configure:15352: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" ++configure:15324: $? = 1 ++configure:15339: $PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ" + Package valgrind was not found in the pkg-config search path. + Perhaps you should add the directory containing `valgrind.pc' + to the PKG_CONFIG_PATH environment variable + No package 'valgrind' found +-configure:15355: $? = 1 ++configure:15342: $? = 1 + No package 'valgrind' found +-configure:15383: result: no +-configure:15596: Using GStreamer Base Plug-ins source release as package name +-configure:15620: Using Unknown package origin as package origin +-configure:15636: Using GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig +-configure:15684: Using /usr/local/libexec/gst-install-plugins-helper as plugin install helper +-configure:15714: *** checking feature: building of plug-ins with external deps *** +-configure:15775: building external plug-ins +-configure:15818: *** checking feature: building of experimental plug-ins *** +-configure:15895: not building experimental plug-ins +-configure:16142: checking whether byte ordering is bigendian +-configure:16157: gcc -c -g -O2 conftest.c >&5 +-conftest.c:35:9: error: unknown type name 'not' ++configure:15370: result: no ++configure:15583: Using GStreamer Base Plugins (Ubuntu) as package name ++configure:15607: Using https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0 as package origin ++configure:15623: Using GST_PKG_CONFIG_PATH = $(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig ++configure:15671: Using /usr/bin/gstreamer-codec-install as plugin install helper ++configure:15701: *** checking feature: building of plug-ins with external deps *** ++configure:15762: building external plug-ins ++configure:15805: *** checking feature: building of experimental plug-ins *** ++configure:15866: WARNING: building experimental plug-ins ++configure:16129: checking whether byte ordering is bigendian ++configure:16144: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++conftest.c:36:9: error: unknown type name 'not' + not a universal capable compiler + ^ +-conftest.c:35:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' ++conftest.c:36:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' + not a universal capable compiler + ^ +-conftest.c:35:15: error: unknown type name 'universal' +-configure:16157: $? = 1 ++conftest.c:36:15: error: unknown type name 'universal' ++configure:16144: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -749,11 +747,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | /* end confdefs.h. */ + | #ifndef __APPLE_CC__ +@@ -761,17 +760,17 @@ configure: failed program was: + | #endif + | typedef int dummy; + | +-configure:16202: gcc -c -g -O2 conftest.c >&5 +-configure:16202: $? = 0 +-configure:16220: gcc -c -g -O2 conftest.c >&5 ++configure:16189: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:16189: $? = 0 ++configure:16207: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 + conftest.c: In function 'main': +-conftest.c:41:4: error: unknown type name 'not' ++conftest.c:42:4: error: unknown type name 'not' + not big endian + ^ +-conftest.c:41:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' ++conftest.c:42:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' + not big endian + ^ +-configure:16220: $? = 1 ++configure:16207: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -799,11 +798,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | /* end confdefs.h. */ + | #include +@@ -819,24 +819,24 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:16348: result: no +-configure:16507: checking for special C compiler options needed for large files +-configure:16552: result: no +-configure:16558: checking for _FILE_OFFSET_BITS value needed for large files +-configure:16583: gcc -c -g -O2 conftest.c >&5 +-configure:16583: $? = 0 +-configure:16615: result: no +-configure:16750: checking for gcc +-configure:16777: result: gcc +-configure:17006: checking for C compiler version +-configure:17015: gcc --version >&5 ++configure:16335: result: no ++configure:16494: checking for special C compiler options needed for large files ++configure:16539: result: no ++configure:16545: checking for _FILE_OFFSET_BITS value needed for large files ++configure:16570: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:16570: $? = 0 ++configure:16602: result: no ++configure:16737: checking for gcc ++configure:16764: result: gcc ++configure:16993: checking for C compiler version ++configure:17002: gcc --version >&5 + gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 + Copyright (C) 2013 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +-configure:17026: $? = 0 +-configure:17015: gcc -v >&5 ++configure:17013: $? = 0 ++configure:17002: gcc -v >&5 + Using built-in specs. + COLLECT_GCC=gcc + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper +@@ -844,43 +844,56 @@ Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) +-configure:17026: $? = 0 +-configure:17015: gcc -V >&5 ++configure:17013: $? = 0 ++configure:17002: gcc -V >&5 + gcc: error: unrecognized command line option '-V' + gcc: fatal error: no input files + compilation terminated. +-configure:17026: $? = 4 +-configure:17015: gcc -qversion >&5 ++configure:17013: $? = 4 ++configure:17002: gcc -qversion >&5 + gcc: error: unrecognized command line option '-qversion' + gcc: fatal error: no input files + compilation terminated. +-configure:17026: $? = 4 +-configure:17030: checking whether we are using the GNU C compiler +-configure:17058: result: yes +-configure:17067: checking whether gcc accepts -g +-configure:17128: result: yes +-configure:17145: checking for gcc option to accept ISO C89 +-configure:17221: result: none needed +-configure:17246: checking whether gcc understands -c and -o together +-configure:17283: result: yes +-configure:17302: checking dependency style of gcc +-configure:17413: result: gcc3 +-configure:17432: checking for gcc option to accept ISO C99 +-configure:17581: gcc -c -g -O2 conftest.c >&5 +-conftest.c:86:29: error: expected ';', ',' or ')' before 'text' ++configure:17013: $? = 4 ++configure:17017: checking whether we are using the GNU C compiler ++configure:17045: result: yes ++configure:17054: checking whether gcc accepts -g ++configure:17115: result: yes ++configure:17132: checking for gcc option to accept ISO C89 ++configure:17208: result: none needed ++configure:17233: checking whether gcc understands -c and -o together ++configure:17270: result: yes ++configure:17289: checking dependency style of gcc ++configure:17400: result: none ++configure:17419: checking for gcc option to accept ISO C99 ++configure:17568: gcc -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++conftest.c:87:29: error: expected ';', ',' or ')' before 'text' + test_restrict (ccp restrict text) + ^ ++conftest.c: In function 'test_varargs': ++conftest.c:108:9: warning: variable 'fnumber' set but not used [-Wunused-but-set-variable] ++ float fnumber; ++ ^ ++conftest.c:107:7: warning: variable 'number' set but not used [-Wunused-but-set-variable] ++ int number; ++ ^ ++conftest.c:106:15: warning: variable 'str' set but not used [-Wunused-but-set-variable] ++ const char *str; ++ ^ + conftest.c: In function 'main': +-conftest.c:140:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' ++conftest.c:139:3: warning: implicit declaration of function 'test_restrict' [-Wimplicit-function-declaration] ++ if (test_restrict ("String literal") == 0) ++ ^ ++conftest.c:141:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' + char *restrict newvar = "Another string"; + ^ +-conftest.c:140:18: error: 'newvar' undeclared (first use in this function) +-conftest.c:140:18: note: each undeclared identifier is reported only once for each function it appears in +-conftest.c:150:3: error: 'for' loop initial declarations are only allowed in C99 mode ++conftest.c:141:18: error: 'newvar' undeclared (first use in this function) ++conftest.c:141:18: note: each undeclared identifier is reported only once for each function it appears in ++conftest.c:151:3: error: 'for' loop initial declarations are only allowed in C99 mode + for (int i = 0; i < ia->datasize; ++i) + ^ +-conftest.c:150:3: note: use option -std=c99 or -std=gnu99 to compile your code +-configure:17581: $? = 1 ++conftest.c:151:3: note: use option -std=c99 or -std=gnu99 to compile your code ++configure:17568: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -908,11 +921,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" +@@ -1053,23 +1067,33 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:17581: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-configure:17581: $? = 0 +-configure:17601: result: -std=gnu99 +-configure:17702: checking for gcc -std=gnu99 option to accept ISO Standard C +-configure:17716: result: -std=gnu99 +-configure:17781: checking for g++ +-configure:17797: found /usr/bin/g++ +-configure:17808: result: g++ +-configure:17835: checking for C++ compiler version +-configure:17844: g++ --version >&5 ++configure:17568: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++conftest.c: In function 'test_varargs': ++conftest.c:108:9: warning: variable 'fnumber' set but not used [-Wunused-but-set-variable] ++ float fnumber; ++ ^ ++conftest.c:107:7: warning: variable 'number' set but not used [-Wunused-but-set-variable] ++ int number; ++ ^ ++conftest.c:106:15: warning: variable 'str' set but not used [-Wunused-but-set-variable] ++ const char *str; ++ ^ ++configure:17568: $? = 0 ++configure:17588: result: -std=gnu99 ++configure:17689: checking for gcc -std=gnu99 option to accept ISO Standard C ++configure:17703: result: -std=gnu99 ++configure:17768: checking for g++ ++configure:17784: found /usr/bin/g++ ++configure:17795: result: g++ ++configure:17822: checking for C++ compiler version ++configure:17831: g++ --version >&5 + g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 + Copyright (C) 2013 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +-configure:17855: $? = 0 +-configure:17844: g++ -v >&5 ++configure:17842: $? = 0 ++configure:17831: g++ -v >&5 + Using built-in specs. + COLLECT_GCC=g++ + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper +@@ -1077,36 +1101,36 @@ Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu + Thread model: posix + gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) +-configure:17855: $? = 0 +-configure:17844: g++ -V >&5 ++configure:17842: $? = 0 ++configure:17831: g++ -V >&5 + g++: error: unrecognized command line option '-V' + g++: fatal error: no input files + compilation terminated. +-configure:17855: $? = 4 +-configure:17844: g++ -qversion >&5 ++configure:17842: $? = 4 ++configure:17831: g++ -qversion >&5 + g++: error: unrecognized command line option '-qversion' + g++: fatal error: no input files + compilation terminated. +-configure:17855: $? = 4 +-configure:17859: checking whether we are using the GNU C++ compiler +-configure:17878: g++ -c conftest.cpp >&5 +-configure:17878: $? = 0 +-configure:17887: result: yes +-configure:17896: checking whether g++ accepts -g +-configure:17916: g++ -c -g conftest.cpp >&5 +-configure:17916: $? = 0 +-configure:17957: result: yes +-configure:17982: checking dependency style of g++ +-configure:18093: result: gcc3 +-configure:18126: checking how to run the C++ preprocessor +-configure:18153: g++ -E conftest.cpp +-configure:18153: $? = 0 +-configure:18167: g++ -E conftest.cpp +-conftest.cpp:36:28: fatal error: ac_nonexistent.h: No such file or directory ++configure:17842: $? = 4 ++configure:17846: checking whether we are using the GNU C++ compiler ++configure:17865: g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.cpp >&5 ++configure:17865: $? = 0 ++configure:17874: result: yes ++configure:17883: checking whether g++ accepts -g ++configure:17903: g++ -c -g -D_FORTIFY_SOURCE=2 conftest.cpp >&5 ++configure:17903: $? = 0 ++configure:17944: result: yes ++configure:17969: checking dependency style of g++ ++configure:18080: result: none ++configure:18113: checking how to run the C++ preprocessor ++configure:18140: g++ -E -D_FORTIFY_SOURCE=2 conftest.cpp ++configure:18140: $? = 0 ++configure:18154: g++ -E -D_FORTIFY_SOURCE=2 conftest.cpp ++conftest.cpp:37:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ + compilation terminated. +-configure:18167: $? = 1 ++configure:18154: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -1134,25 +1158,26 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" + | /* end confdefs.h. */ + | #include +-configure:18192: result: g++ -E +-configure:18212: g++ -E conftest.cpp +-configure:18212: $? = 0 +-configure:18226: g++ -E conftest.cpp +-conftest.cpp:36:28: fatal error: ac_nonexistent.h: No such file or directory ++configure:18179: result: g++ -E ++configure:18199: g++ -E -D_FORTIFY_SOURCE=2 conftest.cpp ++configure:18199: $? = 0 ++configure:18213: g++ -E -D_FORTIFY_SOURCE=2 conftest.cpp ++conftest.cpp:37:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ + compilation terminated. +-configure:18226: $? = 1 ++configure:18213: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -1180,121 +1205,126 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" + | /* end confdefs.h. */ + | #include +-configure:18395: checking for ld used by g++ +-configure:18462: result: /usr/bin/ld -m elf_x86_64 +-configure:18469: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld +-configure:18484: result: yes +-configure:18539: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +-configure:19541: result: yes +-configure:19577: g++ -c conftest.cpp >&5 +-configure:19580: $? = 0 +-configure:20100: checking for g++ option to produce PIC +-configure:20107: result: -fPIC -DPIC +-configure:20115: checking if g++ PIC flag -fPIC -DPIC works +-configure:20133: g++ -c -fPIC -DPIC -DPIC conftest.cpp >&5 +-configure:20137: $? = 0 +-configure:20150: result: yes +-configure:20173: checking if g++ static flag -static works +-configure:20201: result: yes +-configure:20213: checking if g++ supports -c -o file.o +-configure:20234: g++ -c -o out/conftest2.o conftest.cpp >&5 +-configure:20238: $? = 0 +-configure:20260: result: yes +-configure:20265: checking if g++ supports -c -o file.o +-configure:20312: result: yes +-configure:20342: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +-configure:20381: result: yes +-configure:20522: checking dynamic linker characteristics +-configure:21190: result: GNU/Linux ld.so +-configure:21243: checking how to hardcode library paths into programs +-configure:21268: result: immediate +-configure:21325: g++ -c conftest.cpp >&5 +-configure:21325: $? = 0 +-configure:21337: working c++ compiler found: yes +-configure:21350: checking for valgrind +-configure:21381: result: no +-configure:21409: checking for gobject-introspection +-configure:21440: $PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.31.1" +-Package gobject-introspection-1.0 was not found in the pkg-config search path. +-Perhaps you should add the directory containing `gobject-introspection-1.0.pc' +-to the PKG_CONFIG_PATH environment variable +-No package 'gobject-introspection-1.0' found +-configure:21443: $? = 1 +-configure:21454: result: no +-configure:21499: checking for gtkdoc-check +-configure:21517: found /usr/bin/gtkdoc-check +-configure:21529: result: /usr/bin/gtkdoc-check +-configure:21541: checking for gtkdoc-rebase +-configure:21559: found /usr/bin/gtkdoc-rebase +-configure:21571: result: /usr/bin/gtkdoc-rebase +-configure:21585: checking for gtkdoc-mkpdf +-configure:21603: found /usr/bin/gtkdoc-mkpdf +-configure:21615: result: /usr/bin/gtkdoc-mkpdf +-configure:21819: checking whether to build gtk-doc documentation +-configure:21821: result: no +-configure:21889: checking for python +-configure:21907: found /usr/bin/python +-configure:21919: result: /usr/bin/python +-configure:21940: checking for python version +-configure:21947: result: 2.7 +-configure:21959: checking for python platform +-configure:21966: result: linux2 +-configure:21992: checking for python script directory +-configure:22027: result: ${prefix}/lib/python2.7/dist-packages +-configure:22036: checking for python extension module directory +-configure:22071: result: ${exec_prefix}/lib/python2.7/dist-packages +-configure:22087: checking whether to build plugin documentation +-configure:22099: result: no (gtk-doc disabled or not available) +-configure:22202: checking for cos in -lm +-configure:22227: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 +-conftest.c:43:6: warning: conflicting types for built-in function 'cos' [enabled by default] ++configure:18382: checking for ld used by g++ ++configure:18449: result: /usr/bin/ld -m elf_x86_64 ++configure:18456: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld ++configure:18471: result: yes ++configure:18526: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:19528: result: yes ++configure:19564: g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.cpp >&5 ++configure:19567: $? = 0 ++configure:20087: checking for g++ option to produce PIC ++configure:20094: result: -fPIC -DPIC ++configure:20102: checking if g++ PIC flag -fPIC -DPIC works ++configure:20120: g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -fPIC -DPIC -DPIC conftest.cpp >&5 ++configure:20124: $? = 0 ++configure:20137: result: yes ++configure:20160: checking if g++ static flag -static works ++configure:20188: result: yes ++configure:20200: checking if g++ supports -c -o file.o ++configure:20221: g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -o out/conftest2.o conftest.cpp >&5 ++configure:20225: $? = 0 ++configure:20247: result: yes ++configure:20252: checking if g++ supports -c -o file.o ++configure:20299: result: yes ++configure:20329: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries ++configure:20368: result: yes ++configure:20509: checking dynamic linker characteristics ++configure:21177: result: GNU/Linux ld.so ++configure:21230: checking how to hardcode library paths into programs ++configure:21255: result: immediate ++configure:21312: g++ -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.cpp >&5 ++configure:21312: $? = 0 ++configure:21324: working c++ compiler found: yes ++configure:21337: checking for valgrind ++configure:21368: result: no ++configure:21396: checking for gobject-introspection ++configure:21427: $PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.31.1" ++configure:21430: $? = 0 ++configure:21441: result: yes ++configure:21486: checking for gtkdoc-check ++configure:21504: found /usr/bin/gtkdoc-check ++configure:21516: result: /usr/bin/gtkdoc-check ++configure:21528: checking for gtkdoc-rebase ++configure:21546: found /usr/bin/gtkdoc-rebase ++configure:21558: result: /usr/bin/gtkdoc-rebase ++configure:21572: checking for gtkdoc-mkpdf ++configure:21590: found /usr/bin/gtkdoc-mkpdf ++configure:21602: result: /usr/bin/gtkdoc-mkpdf ++configure:21632: $PKG_CONFIG --exists --print-errors "gtk-doc >= 1.12" ++configure:21635: $? = 0 ++configure:21644: checking for GTKDOC_DEPS ++configure:21652: $PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" ++configure:21655: $? = 0 ++configure:21670: $PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" ++configure:21673: $? = 0 ++configure:21728: result: yes ++configure:21806: checking whether to build gtk-doc documentation ++configure:21808: result: yes ++configure:21876: checking for python ++configure:21894: found /usr/bin/python ++configure:21906: result: /usr/bin/python ++configure:21927: checking for python version ++configure:21934: result: 2.7 ++configure:21946: checking for python platform ++configure:21953: result: linux2 ++configure:21979: checking for python script directory ++configure:22014: result: ${prefix}/lib/python2.7/dist-packages ++configure:22023: checking for python extension module directory ++configure:22058: result: ${exec_prefix}/lib/python2.7/dist-packages ++configure:22074: checking whether to build plugin documentation ++configure:22079: result: yes ++configure:22189: checking for cos in -lm ++configure:22214: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -lm >&5 ++conftest.c:44:6: warning: conflicting types for built-in function 'cos' [enabled by default] + char cos (); + ^ +-configure:22227: $? = 0 +-configure:22236: result: yes +-configure:22249: checking for ANSI C header files +-configure:22353: result: yes +-configure:22365: checking xmmintrin.h usability +-configure:22365: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-configure:22365: $? = 0 +-configure:22365: result: yes +-configure:22365: checking xmmintrin.h presence +-configure:22365: gcc -E conftest.c +-configure:22365: $? = 0 +-configure:22365: result: yes +-configure:22365: checking for xmmintrin.h +-configure:22365: result: yes +-configure:22365: checking emmintrin.h usability +-configure:22365: gcc -std=gnu99 -c -g -O2 conftest.c >&5 ++configure:22214: $? = 0 ++configure:22223: result: yes ++configure:22236: checking for ANSI C header files ++configure:22340: result: yes ++configure:22352: checking xmmintrin.h usability ++configure:22352: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:22352: $? = 0 ++configure:22352: result: yes ++configure:22352: checking xmmintrin.h presence ++configure:22352: gcc -E -D_FORTIFY_SOURCE=2 conftest.c ++configure:22352: $? = 0 ++configure:22352: result: yes ++configure:22352: checking for xmmintrin.h ++configure:22352: result: yes ++configure:22352: checking emmintrin.h usability ++configure:22352: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:22352: $? = 0 ++configure:22352: result: yes ++configure:22352: checking emmintrin.h presence ++configure:22352: gcc -E -D_FORTIFY_SOURCE=2 conftest.c ++configure:22352: $? = 0 ++configure:22352: result: yes ++configure:22352: checking for emmintrin.h ++configure:22352: result: yes ++configure:22365: checking for sys/socket.h ++configure:22365: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 + configure:22365: $? = 0 + configure:22365: result: yes +-configure:22365: checking emmintrin.h presence +-configure:22365: gcc -E conftest.c +-configure:22365: $? = 0 +-configure:22365: result: yes +-configure:22365: checking for emmintrin.h +-configure:22365: result: yes +-configure:22378: checking for sys/socket.h +-configure:22378: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-configure:22378: $? = 0 +-configure:22378: result: yes +-configure:22402: checking for winsock2.h +-configure:22402: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-conftest.c:74:22: fatal error: winsock2.h: No such file or directory ++configure:22389: checking for winsock2.h ++configure:22389: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++conftest.c:75:22: fatal error: winsock2.h: No such file or directory + #include + ^ + compilation terminated. +-configure:22402: $? = 1 ++configure:22389: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -1322,11 +1352,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" +@@ -1370,14 +1401,14 @@ configure: failed program was: + | #endif + | + | #include +-configure:22402: result: no +-configure:22431: checking for process.h +-configure:22431: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-conftest.c:74:21: fatal error: process.h: No such file or directory ++configure:22389: result: no ++configure:22418: checking for process.h ++configure:22418: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++conftest.c:75:21: fatal error: process.h: No such file or directory + #include + ^ + compilation terminated. +-configure:22431: $? = 1 ++configure:22418: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -1405,11 +1436,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" +@@ -1453,22 +1485,22 @@ configure: failed program was: + | #endif + | + | #include +-configure:22431: result: no +-configure:22431: checking for sys/types.h +-configure:22431: result: yes +-configure:22431: checking for sys/wait.h +-configure:22431: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +-configure:22431: $? = 0 +-configure:22431: result: yes +-configure:22431: checking for sys/stat.h +-configure:22431: result: yes +-configure:22443: checking for ARM NEON support in current arch/CFLAGS +-configure:22463: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-conftest.c:45:24: fatal error: arm_neon.h: No such file or directory ++configure:22418: result: no ++configure:22418: checking for sys/types.h ++configure:22418: result: yes ++configure:22418: checking for sys/wait.h ++configure:22418: gcc -std=gnu99 -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 conftest.c >&5 ++configure:22418: $? = 0 ++configure:22418: result: yes ++configure:22418: checking for sys/stat.h ++configure:22418: result: yes ++configure:22430: checking for ARM NEON support in current arch/CFLAGS ++configure:22450: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++conftest.c:46:24: fatal error: arm_neon.h: No such file or directory + #include + ^ + compilation terminated. +-configure:22463: $? = 1 ++configure:22450: $? = 1 + configure: failed program was: + | /* confdefs.h */ + | #define PACKAGE_NAME "GStreamer Base Plug-ins" +@@ -1496,11 +1528,12 @@ configure: failed program was: + | #define HAVE_GETTEXT 1 + | #define HAVE_DCGETTEXT 1 + | #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-| #define LOCALEDIR "/usr/local/share/locale" +-| #define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-| #define GST_PACKAGE_ORIGIN "Unknown package origin" +-| #define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++| #define LOCALEDIR "/usr/share/locale" ++| #define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++| #define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++| #define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + | #define HAVE_EXTERNAL /**/ ++| #define HAVE_EXPERIMENTAL /**/ + | #define HAVE_CPU_X86_64 1 + | #define HOST_CPU "x86_64" + | #define TARGET_CPU "x86_64" +@@ -1527,92 +1560,100 @@ configure: failed program was: + | ; + | return 0; + | } +-configure:22473: result: no +-configure:22481: checking for stdint types +-configure:22504: gcc -std=gnu99 -c conftest.c >&5 +-configure:22504: $? = 0 +-configure:22548: result: stdint.h (shortcircuit) +-configure:22935: result: make use of stdint.h in _stdint.h (assuming C99 compatible system) +-configure:22946: checking for localtime_r +-configure:22946: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:22946: $? = 0 +-configure:22946: result: yes +-configure:22946: checking for gmtime_r +-configure:22946: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:22946: $? = 0 +-configure:22946: result: yes +-configure:22960: checking for log2 +-configure:22960: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 +-conftest.c:68:6: warning: conflicting types for built-in function 'log2' [enabled by default] ++configure:22460: result: no ++configure:22468: checking for stdint types ++configure:22491: gcc -std=gnu99 -c conftest.c >&5 ++configure:22491: $? = 0 ++configure:22535: result: stdint.h (shortcircuit) ++configure:22922: result: make use of stdint.h in _stdint.h (assuming C99 compatible system) ++configure:22933: checking for localtime_r ++configure:22933: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:22933: $? = 0 ++configure:22933: result: yes ++configure:22933: checking for gmtime_r ++configure:22933: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:22933: $? = 0 ++configure:22933: result: yes ++configure:22947: checking for log2 ++configure:22947: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -lm >&5 ++conftest.c:69:6: warning: conflicting types for built-in function 'log2' [enabled by default] + char log2 (); + ^ +-configure:22960: $? = 0 +-configure:22960: result: yes +-configure:22975: checking for _LARGEFILE_SOURCE value needed for large files +-configure:22994: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:22994: $? = 0 +-configure:23022: result: no +-configure:23046: checking for lrint +-configure:23067: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 +-configure:23067: $? = 0 +-configure:23075: result: yes +-configure:23083: checking for lrintf +-configure:23104: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lm >&5 +-configure:23104: $? = 0 +-configure:23112: result: yes +-configure:23123: checking whether gcc -std=gnu99 implements __PRETTY_FUNCTION__ +-configure:23140: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:23140: $? = 0 +-configure:23150: result: yes +-configure:23158: checking whether gcc -std=gnu99 implements __FUNCTION__ +-configure:23175: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:23175: $? = 0 +-configure:23185: result: yes +-configure:23193: checking whether gcc -std=gnu99 implements __func__ +-configure:23210: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +-configure:23210: $? = 0 +-configure:23220: result: yes +-configure:23266: checking for GLIB +-configure:23274: $PKG_CONFIG --exists --print-errors "$which" +-configure:23277: $? = 0 +-configure:23292: $PKG_CONFIG --exists --print-errors "$which" +-configure:23295: $? = 0 +-configure:23347: result: yes +-configure:23406: checking for glib-genmarshal +-configure:23414: result: glib-genmarshal (from pkg-config path) +-configure:23468: checking for glib-mkenums +-configure:23475: result: glib-mkenums +-configure:23488: checking for GIO +-configure:23496: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" +-configure:23499: $? = 0 +-configure:23514: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" +-configure:23517: $? = 0 +-configure:23572: result: yes +-configure:23623: checking for ORC +-configure:23631: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" +-configure:23634: $? = 0 +-configure:23649: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" +-configure:23652: $? = 0 +-configure:23706: result: yes +-configure:23714: checking for usable orcc +-configure:23722: result: /usr/local/bin/orcc +-configure:23769: checking for GST +-configure:23777: $PKG_CONFIG --exists --print-errors "$module >= $minver" +-Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 +-configure:23780: $? = 1 +-configure:23795: $PKG_CONFIG --exists --print-errors "$module >= $minver" +-Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 +-configure:23798: $? = 1 +-Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 +-configure:23826: result: no +-configure:23830: Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.2.4 +-configure:23833: error: no gstreamer-1.0 >= 1.6.1 (GStreamer) found ++configure:22947: $? = 0 ++configure:22947: result: yes ++configure:22962: checking for _LARGEFILE_SOURCE value needed for large files ++configure:22981: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:22981: $? = 0 ++configure:23009: result: no ++configure:23033: checking for lrint ++configure:23054: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -lm >&5 ++conftest.c: In function 'main': ++conftest.c:57:6: warning: unused variable 'value' [-Wunused-variable] ++ int value = lrint (0.432) ; ++ ^ ++configure:23054: $? = 0 ++configure:23062: result: yes ++configure:23070: checking for lrintf ++configure:23091: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c -lm >&5 ++conftest.c: In function 'main': ++conftest.c:58:6: warning: unused variable 'value' [-Wunused-variable] ++ int value = lrintf (0.432) ; ++ ^ ++configure:23091: $? = 0 ++configure:23099: result: yes ++configure:23110: checking whether gcc -std=gnu99 implements __PRETTY_FUNCTION__ ++configure:23127: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:23127: $? = 0 ++configure:23137: result: yes ++configure:23145: checking whether gcc -std=gnu99 implements __FUNCTION__ ++configure:23162: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:23162: $? = 0 ++configure:23172: result: yes ++configure:23180: checking whether gcc -std=gnu99 implements __func__ ++configure:23197: gcc -std=gnu99 -o conftest -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed conftest.c >&5 ++configure:23197: $? = 0 ++configure:23207: result: yes ++configure:23253: checking for GLIB ++configure:23261: $PKG_CONFIG --exists --print-errors "$which" ++configure:23264: $? = 0 ++configure:23279: $PKG_CONFIG --exists --print-errors "$which" ++configure:23282: $? = 0 ++configure:23334: result: yes ++configure:23393: checking for glib-genmarshal ++configure:23401: result: glib-genmarshal (from pkg-config path) ++configure:23455: checking for glib-mkenums ++configure:23462: result: glib-mkenums ++configure:23475: checking for GIO ++configure:23483: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" ++configure:23486: $? = 0 ++configure:23501: $PKG_CONFIG --exists --print-errors "gio-2.0 >= $GLIB_REQ" ++configure:23504: $? = 0 ++configure:23559: result: yes ++configure:23610: checking for ORC ++configure:23618: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" ++configure:23621: $? = 0 ++configure:23636: $PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ" ++configure:23639: $? = 0 ++configure:23693: result: yes ++configure:23701: checking for usable orcc ++configure:23709: result: /usr/local/bin/orcc ++configure:23756: checking for GST ++configure:23764: $PKG_CONFIG --exists --print-errors "$module >= $minver" ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.6.0 ++configure:23767: $? = 1 ++configure:23782: $PKG_CONFIG --exists --print-errors "$module >= $minver" ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.6.0 ++configure:23785: $? = 1 ++Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.6.0 ++configure:23813: result: no ++configure:23817: Requested 'gstreamer-1.0 >= 1.6.1' but version of GStreamer is 1.6.0 ++configure:23820: error: no gstreamer-1.0 >= 1.6.1 (GStreamer) found + + ## ---------------- ## + ## Cache variables. ## + ## ---------------- ## + +-ac_cv_build=x86_64-unknown-linux-gnu ++ac_cv_build=x86_64-pc-linux-gnu + ac_cv_c99_lrint=yes + ac_cv_c99_lrintf=yes + ac_cv_c_bigendian=no +@@ -1630,16 +1671,16 @@ ac_cv_env_CDPARANOIA_CFLAGS_set= + ac_cv_env_CDPARANOIA_CFLAGS_value= + ac_cv_env_CDPARANOIA_LIBS_set= + ac_cv_env_CDPARANOIA_LIBS_value= +-ac_cv_env_CFLAGS_set= +-ac_cv_env_CFLAGS_value= +-ac_cv_env_CPPFLAGS_set= +-ac_cv_env_CPPFLAGS_value= ++ac_cv_env_CFLAGS_set=set ++ac_cv_env_CFLAGS_value='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error' ++ac_cv_env_CPPFLAGS_set=set ++ac_cv_env_CPPFLAGS_value=-D_FORTIFY_SOURCE=2 + ac_cv_env_CPP_set= + ac_cv_env_CPP_value= + ac_cv_env_CXXCPP_set= + ac_cv_env_CXXCPP_value= +-ac_cv_env_CXXFLAGS_set= +-ac_cv_env_CXXFLAGS_value= ++ac_cv_env_CXXFLAGS_set=set ++ac_cv_env_CXXFLAGS_value='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error' + ac_cv_env_CXX_set= + ac_cv_env_CXX_value= + ac_cv_env_FT2_CFLAGS_set= +@@ -1698,8 +1739,8 @@ ac_cv_env_IVORBIS_CFLAGS_set= + ac_cv_env_IVORBIS_CFLAGS_value= + ac_cv_env_IVORBIS_LIBS_set= + ac_cv_env_IVORBIS_LIBS_value= +-ac_cv_env_LDFLAGS_set= +-ac_cv_env_LDFLAGS_value= ++ac_cv_env_LDFLAGS_set=set ++ac_cv_env_LDFLAGS_value='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed' + ac_cv_env_LIBS_set= + ac_cv_env_LIBS_value= + ac_cv_env_LIBVISUAL_CFLAGS_set= +@@ -1754,8 +1795,8 @@ ac_cv_env_ZLIB_CFLAGS_set= + ac_cv_env_ZLIB_CFLAGS_value= + ac_cv_env_ZLIB_LIBS_set= + ac_cv_env_ZLIB_LIBS_value= +-ac_cv_env_build_alias_set= +-ac_cv_env_build_alias_value= ++ac_cv_env_build_alias_set=set ++ac_cv_env_build_alias_value=x86_64-linux-gnu + ac_cv_env_host_alias_set= + ac_cv_env_host_alias_value= + ac_cv_env_target_alias_set= +@@ -1784,7 +1825,7 @@ ac_cv_header_sys_wait_h=yes + ac_cv_header_unistd_h=yes + ac_cv_header_winsock2_h=no + ac_cv_header_xmmintrin_h=yes +-ac_cv_host=x86_64-unknown-linux-gnu ++ac_cv_host=x86_64-pc-linux-gnu + ac_cv_lib_dl_dlopen=yes + ac_cv_lib_dld_shl_load=no + ac_cv_lib_m_cos=yes +@@ -1805,7 +1846,7 @@ ac_cv_path_XGETTEXT=/usr/bin/xgettext + ac_cv_path_ac_pt_PKG_CONFIG=/usr/bin/pkg-config + ac_cv_path_install='/usr/bin/install -c' + ac_cv_path_mkdir=/bin/mkdir +-ac_cv_prog_AWK=mawk ++ac_cv_prog_AWK=gawk + ac_cv_prog_CPP='gcc -E' + ac_cv_prog_CXXCPP='g++ -E' + ac_cv_prog_ac_ct_AR=ar +@@ -1826,7 +1867,7 @@ ac_cv_stdint_result='(assuming C99 compa + ac_cv_sys_file_offset_bits=no + ac_cv_sys_largefile_CC=no + ac_cv_sys_largefile_source=no +-ac_cv_target=x86_64-unknown-linux-gnu ++ac_cv_target=x86_64-pc-linux-gnu + acl_cv_hardcode_direct=no + acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + acl_cv_hardcode_libdir_separator= +@@ -1839,8 +1880,8 @@ acl_cv_prog_gnu_ld=yes + acl_cv_rpath=done + acl_cv_shlibext=so + acl_cv_wl=-Wl, +-am_cv_CC_dependencies_compiler_type=gcc3 +-am_cv_CXX_dependencies_compiler_type=gcc3 ++am_cv_CC_dependencies_compiler_type=none ++am_cv_CXX_dependencies_compiler_type=none + am_cv_make_support_nested_variables=yes + am_cv_prog_cc_c_o=yes + am_cv_prog_tar_ustar=gnutar +@@ -1887,13 +1928,15 @@ lt_cv_sys_global_symbol_pipe='sed -n -e + lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' + lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' + lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +-lt_cv_sys_max_cmd_len=1572864 ++lt_cv_sys_max_cmd_len=3458764513820540925 + lt_cv_to_host_file_cmd=func_convert_file_noop + lt_cv_to_tool_file_cmd=func_convert_file_noop + pkg_cv_GIO_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' + pkg_cv_GIO_LIBS='-lgio-2.0 -lgobject-2.0 -lglib-2.0 ' + pkg_cv_GLIB_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' + pkg_cv_GLIB_LIBS='-pthread -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 ' ++pkg_cv_GTKDOC_DEPS_CFLAGS='-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++pkg_cv_GTKDOC_DEPS_LIBS='-lgobject-2.0 -lglib-2.0 ' + pkg_cv_ORC_CFLAGS='-I/usr/local/include/orc-0.4 ' + pkg_cv_ORC_LIBS='-L/usr/local/lib -lorc-0.4 ' + +@@ -1901,45 +1944,45 @@ pkg_cv_ORC_LIBS='-L/usr/local/lib -lorc- + ## Output variables. ## + ## ----------------- ## + +-ACLOCAL='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing aclocal-1.15' ++ACLOCAL='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing aclocal-1.14' + ACLOCAL_AMFLAGS='-I m4 -I common/m4' + ALSA_CFLAGS='' + ALSA_LIBS='' +-AMDEPBACKSLASH='\' +-AMDEP_FALSE='#' +-AMDEP_TRUE='' ++AMDEPBACKSLASH='' ++AMDEP_FALSE='' ++AMDEP_TRUE='#' + AMTAR='$${TAR-tar}' + AM_BACKSLASH='\' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +-AM_DEFAULT_VERBOSITY='0' ++AM_DEFAULT_VERBOSITY='1' + AM_V='$(V)' + AR='ar' + AS='as' + AUDIORESAMPLE_FORMAT_AUTO='' + AUDIORESAMPLE_FORMAT_FLOAT='' + AUDIORESAMPLE_FORMAT_INT='' +-AUTOCONF='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing autoconf' +-AUTOHEADER='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing autoheader' +-AUTOMAKE='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing automake-1.15' +-AWK='mawk' +-BUILD_EXAMPLES_FALSE='#' +-BUILD_EXAMPLES_TRUE='' +-BUILD_EXPERIMENTAL_FALSE='' +-BUILD_EXPERIMENTAL_TRUE='#' ++AUTOCONF='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoconf' ++AUTOHEADER='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing autoheader' ++AUTOMAKE='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing automake-1.14' ++AWK='gawk' ++BUILD_EXAMPLES_FALSE='' ++BUILD_EXAMPLES_TRUE='#' ++BUILD_EXPERIMENTAL_FALSE='#' ++BUILD_EXPERIMENTAL_TRUE='' + BUILD_EXTERNAL_FALSE='#' + BUILD_EXTERNAL_TRUE='' + CC='gcc -std=gnu99' + CCASFLAGS='' +-CCDEPMODE='depmode=gcc3' ++CCDEPMODE='depmode=none' + CDPARANOIA_CFLAGS='' + CDPARANOIA_LIBS='' +-CFLAGS='-g -O2' ++CFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error' + CPP='gcc -E' +-CPPFLAGS='' ++CPPFLAGS='-D_FORTIFY_SOURCE=2' + CXX='g++' + CXXCPP='g++ -E' +-CXXDEPMODE='depmode=gcc3' +-CXXFLAGS='' ++CXXDEPMODE='depmode=none' ++CXXFLAGS='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -Wno-error' + CYGPATH_W='echo' + DEFAULT_AUDIOSINK='' + DEFAULT_AUDIOSRC='' +@@ -1956,10 +1999,10 @@ ECHO_C='' + ECHO_N='-n' + ECHO_T='' + EGREP='/bin/grep -E' +-ENABLE_GTK_DOC_FALSE='' +-ENABLE_GTK_DOC_TRUE='#' +-ENABLE_PLUGIN_DOCS_FALSE='' +-ENABLE_PLUGIN_DOCS_TRUE='#' ++ENABLE_GTK_DOC_FALSE='#' ++ENABLE_GTK_DOC_TRUE='' ++ENABLE_PLUGIN_DOCS_FALSE='#' ++ENABLE_PLUGIN_DOCS_TRUE='' + ERROR_CFLAGS='' + ERROR_CXXFLAGS='' + EXEEXT='' +@@ -2002,7 +2045,7 @@ GST_CURRENT='601' + GST_CXXFLAGS='' + GST_GCOV_ENABLED_FALSE='' + GST_GCOV_ENABLED_TRUE='#' +-GST_INSTALL_PLUGINS_HELPER='/usr/local/libexec/gst-install-plugins-helper' ++GST_INSTALL_PLUGINS_HELPER='/usr/bin/gstreamer-codec-install' + GST_LEVEL_DEFAULT='' + GST_LIBS='' + GST_LIBVERSION='601:0:601' +@@ -2013,9 +2056,9 @@ GST_NET_CFLAGS='' + GST_NET_LIBS='' + GST_OPTION_CFLAGS='' + GST_OPTION_CXXFLAGS='' +-GST_PACKAGE_NAME='GStreamer Base Plug-ins source release' +-GST_PACKAGE_ORIGIN='Unknown package origin' +-GST_PKG_CONFIG_PATH='$(top_builddir)/pkgconfig' ++GST_PACKAGE_NAME='GStreamer Base Plugins (Ubuntu)' ++GST_PACKAGE_ORIGIN='https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0' ++GST_PKG_CONFIG_PATH='$(top_builddir)/pkgconfig:/usr/local/lib/pkgconfig' + GST_PLUGINS_ALL='' + GST_PLUGINS_BASE_CFLAGS='' + GST_PLUGINS_DIR='' +@@ -2029,8 +2072,8 @@ GST_PREFIX='' + GST_REVISION='0' + GST_TOOLS_DIR='' + GTKDOC_CHECK='/usr/bin/gtkdoc-check' +-GTKDOC_DEPS_CFLAGS='' +-GTKDOC_DEPS_LIBS='' ++GTKDOC_DEPS_CFLAGS='-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include ' ++GTKDOC_DEPS_LIBS='-lgobject-2.0 -lglib-2.0 ' + GTKDOC_MKPDF='/usr/bin/gtkdoc-mkpdf' + GTKDOC_REBASE='/usr/bin/gtkdoc-rebase' + GTK_CFLAGS='' +@@ -2088,8 +2131,8 @@ HAVE_GTK_QUARTZ_TRUE='' + HAVE_GTK_TRUE='' + HAVE_GTK_X11_FALSE='' + HAVE_GTK_X11_TRUE='' +-HAVE_INTROSPECTION_FALSE='' +-HAVE_INTROSPECTION_TRUE='#' ++HAVE_INTROSPECTION_FALSE='#' ++HAVE_INTROSPECTION_TRUE='' + HAVE_LINUX_JOYSTICK_HEADERS_FALSE='' + HAVE_LINUX_JOYSTICK_HEADERS_TRUE='' + HAVE_ORCC_FALSE='#' +@@ -2115,19 +2158,19 @@ INSTALL_SCRIPT='${INSTALL}' + INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' + INTLLIBS='' + INTL_MACOSX_LIBS='' +-INTROSPECTION_CFLAGS='' +-INTROSPECTION_COMPILER='' +-INTROSPECTION_GENERATE='' +-INTROSPECTION_GIRDIR='' +-INTROSPECTION_INIT='' +-INTROSPECTION_LIBS='' +-INTROSPECTION_MAKEFILE='' +-INTROSPECTION_SCANNER='' +-INTROSPECTION_TYPELIBDIR='' ++INTROSPECTION_CFLAGS='-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0 ' ++INTROSPECTION_COMPILER='/usr/bin/g-ir-compiler' ++INTROSPECTION_GENERATE='/usr/bin/g-ir-generate' ++INTROSPECTION_GIRDIR='/usr/share/gir-1.0' ++INTROSPECTION_INIT='extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);' ++INTROSPECTION_LIBS='-lgirepository-1.0 -lgobject-2.0 -lglib-2.0 ' ++INTROSPECTION_MAKEFILE='/usr/share/gobject-introspection-1.0/Makefile.introspection' ++INTROSPECTION_SCANNER='/usr/bin/g-ir-scanner' ++INTROSPECTION_TYPELIBDIR='/usr/lib/girepository-1.0' + IVORBIS_CFLAGS='' + IVORBIS_LIBS='' + LD='/usr/bin/ld -m elf_x86_64' +-LDFLAGS='' ++LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,defs -Wl,-O1 -Wl,--as-needed' + LIBICONV='-liconv' + LIBINTL='' + LIBM='-lm' +@@ -2138,14 +2181,14 @@ LIBVISUAL_CFLAGS='' + LIBVISUAL_LIBS='' + LIPO='' + LN_S='ln -s' +-LOCALEDIR='/usr/local/share/locale' ++LOCALEDIR='/usr/share/locale' + LTLIBICONV='-liconv' + LTLIBINTL='' + LTLIBOBJS='' +-MAINT='' +-MAINTAINER_MODE_FALSE='#' +-MAINTAINER_MODE_TRUE='' +-MAKEINFO='${SHELL} /root/debs/gst-plugins-base-1.6.1/missing makeinfo' ++MAINT='#' ++MAINTAINER_MODE_FALSE='' ++MAINTAINER_MODE_TRUE='#' ++MAKEINFO='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/missing makeinfo' + MANIFEST_TOOL=':' + MKDIR_P='/bin/mkdir -p' + MSGFMT='/usr/bin/msgfmt' +@@ -2202,8 +2245,8 @@ USE_ALSA_FALSE='' + USE_ALSA_TRUE='' + USE_CDPARANOIA_FALSE='' + USE_CDPARANOIA_TRUE='' +-USE_EXPERIMENTAL_FALSE='' +-USE_EXPERIMENTAL_TRUE='#' ++USE_EXPERIMENTAL_FALSE='#' ++USE_EXPERIMENTAL_TRUE='' + USE_EXTERNAL_FALSE='#' + USE_EXTERNAL_TRUE='' + USE_GIO_UNIX_2_0_FALSE='' +@@ -2291,62 +2334,61 @@ ac_ct_CXX='g++' + ac_ct_DUMPBIN='' + am__EXEEXT_FALSE='' + am__EXEEXT_TRUE='' +-am__fastdepCC_FALSE='#' +-am__fastdepCC_TRUE='' +-am__fastdepCXX_FALSE='#' +-am__fastdepCXX_TRUE='' ++am__fastdepCC_FALSE='' ++am__fastdepCC_TRUE='#' ++am__fastdepCXX_FALSE='' ++am__fastdepCXX_TRUE='#' + am__include='include' + am__isrc='' + am__leading_dot='.' +-am__nodep='_no' ++am__nodep='' + am__quote='' + am__tar='tar --format=ustar -chf - "$$tardir"' + am__untar='tar -xf -' + bindir='${exec_prefix}/bin' +-build='x86_64-unknown-linux-gnu' +-build_alias='' ++build='x86_64-pc-linux-gnu' ++build_alias='x86_64-linux-gnu' + build_cpu='x86_64' + build_os='linux-gnu' +-build_vendor='unknown' ++build_vendor='pc' + datadir='${datarootdir}' + datarootdir='${prefix}/share' + docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' + dvidir='${docdir}' + exec_prefix='NONE' +-host='x86_64-unknown-linux-gnu' ++host='x86_64-pc-linux-gnu' + host_alias='' + host_cpu='x86_64' + host_os='linux-gnu' +-host_vendor='unknown' ++host_vendor='pc' + htmldir='${docdir}' + includedir='${prefix}/include' +-infodir='${datarootdir}/info' +-install_sh='${SHELL} /root/debs/gst-plugins-base-1.6.1/install-sh' +-libdir='${exec_prefix}/lib' +-libexecdir='${exec_prefix}/libexec' ++infodir='${prefix}/share/info' ++install_sh='${SHELL} /root/debs/gst-plugins-base1.0-1.6.1/install-sh' ++libdir='${prefix}/lib/x86_64-linux-gnu' ++libexecdir='${prefix}/lib/gst-plugins-base1.0' + localedir='${datarootdir}/locale' +-localstatedir='${prefix}/var' +-mandir='${datarootdir}/man' ++localstatedir='/var' ++mandir='${prefix}/share/man' + mkdir_p='/bin/mkdir -p' + oldincludedir='/usr/include' + pdfdir='${docdir}' + pkgpyexecdir='${pyexecdir}/gst-plugins-base' + pkgpythondir='${pythondir}/gst-plugins-base' + plugindir='' +-prefix='NONE' ++prefix='/usr' + program_transform_name='s,x,x,' + psdir='${docdir}' + pyexecdir='${exec_prefix}/lib/python2.7/dist-packages' + pythondir='${prefix}/lib/python2.7/dist-packages' +-runstatedir='${localstatedir}/run' + sbindir='${exec_prefix}/sbin' + sharedstatedir='${prefix}/com' +-sysconfdir='${prefix}/etc' +-target='x86_64-unknown-linux-gnu' ++sysconfdir='/etc' ++target='x86_64-pc-linux-gnu' + target_alias='' + target_cpu='x86_64' + target_os='linux-gnu' +-target_vendor='unknown' ++target_vendor='pc' + + ## ----------- ## + ## confdefs.h. ## +@@ -2378,11 +2420,12 @@ target_vendor='unknown' + #define HAVE_GETTEXT 1 + #define HAVE_DCGETTEXT 1 + #define GETTEXT_PACKAGE "gst-plugins-base-1.0" +-#define LOCALEDIR "/usr/local/share/locale" +-#define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release" +-#define GST_PACKAGE_ORIGIN "Unknown package origin" +-#define GST_INSTALL_PLUGINS_HELPER "/usr/local/libexec/gst-install-plugins-helper" ++#define LOCALEDIR "/usr/share/locale" ++#define GST_PACKAGE_NAME "GStreamer Base Plugins (Ubuntu)" ++#define GST_PACKAGE_ORIGIN "https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0" ++#define GST_INSTALL_PLUGINS_HELPER "/usr/bin/gstreamer-codec-install" + #define HAVE_EXTERNAL /**/ ++#define HAVE_EXPERIMENTAL /**/ + #define HAVE_CPU_X86_64 1 + #define HOST_CPU "x86_64" + #define TARGET_CPU "x86_64" diff -Nru gst-plugins-base1.0-1.4.3/debian/patches/series gst-plugins-base1.0-1.6.1/debian/patches/series --- gst-plugins-base1.0-1.4.3/debian/patches/series 2014-10-07 10:25:42.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/patches/series 2015-11-02 17:01:04.000000000 +0000 @@ -1 +1,5 @@ -0001-riff-Add-input-buffer-size-to-GstCaps.patch +1 +2 +3 +q5 +orc_in_system diff -Nru gst-plugins-base1.0-1.4.3/debian/rules gst-plugins-base1.0-1.6.1/debian/rules --- gst-plugins-base1.0-1.4.3/debian/rules 2014-07-19 14:49:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/debian/rules 2015-11-02 22:22:01.000000000 +0000 @@ -10,8 +10,11 @@ DEB_DH_AUTORECONF_ARGS += --as-needed -CFLAGS += -Wno-error -CXXFLAGS += -Wno-error +# make autoreconf not call autopoint since we ship a patch for po/Makefile.in.in +export AUTOPOINT=true + +CFLAGS += -Wno-error -I/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-1.0/include +CXXFLAGS += -Wno-error -I/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-1.0/include LDFLAGS += -Wl,-z,defs -Wl,-O1 -Wl,--as-needed DEB_MAKE_CHECK_TARGET = check || true @@ -24,7 +27,7 @@ gst_lib := libgstreamer$(gst_abi)-0 gst_lib_dev := libgstreamer$(gst_abi)-dev # what gstreamer version is needed -gst_lib_dev_dep := $(gst_lib_dev) (>= 1.4.0) +gst_lib_dev_dep := $(gst_lib_dev) (>= 1.2.0) gst_pkgname := gstreamer$(gst_abi) gst_deb_abi := $(gst_abi)-0 diff -Nru gst-plugins-base1.0-1.4.3/depcomp gst-plugins-base1.0-1.6.1/depcomp --- gst-plugins-base1.0-1.4.3/depcomp 2014-08-27 10:22:34.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/depcomp 2015-10-30 12:09:11.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gst-plugins-base1.0-1.4.3/docs/design/Makefile.in gst-plugins-base1.0-1.6.1/docs/design/Makefile.in --- gst-plugins-base1.0-1.4.3/docs/design/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/design/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = docs/design -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -176,6 +185,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -261,6 +271,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -290,6 +302,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -317,7 +331,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -332,6 +345,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -421,13 +435,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -480,6 +493,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -523,7 +537,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/design/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/design/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -818,6 +831,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/docs/design/part-mediatype-video-raw.txt gst-plugins-base1.0-1.6.1/docs/design/part-mediatype-video-raw.txt --- gst-plugins-base1.0-1.4.3/docs/design/part-mediatype-video-raw.txt 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/design/part-mediatype-video-raw.txt 2015-10-22 08:01:34.000000000 +0000 @@ -1197,6 +1197,7 @@ "GBR_10LE" planar 4:4:4 RGB, 10 bits per channel "NV16" planar 4:2:2 YUV with interleaved UV plane + "NV61" planar 4:2:2 YUV with interleaved VU plane "NV24" planar 4:4:4 YUV with interleaved UV plane diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/gst-plugins-base-libs-docs.sgml gst-plugins-base1.0-1.6.1/docs/libs/gst-plugins-base-libs-docs.sgml --- gst-plugins-base1.0-1.4.3/docs/libs/gst-plugins-base-libs-docs.sgml 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/gst-plugins-base-libs-docs.sgml 2015-10-22 08:01:34.000000000 +0000 @@ -29,6 +29,7 @@ -lgstallocators-&GST_API_VERSION; to the library flags. + @@ -198,6 +199,10 @@ + + + + diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/gst-plugins-base-libs-sections.txt gst-plugins-base1.0-1.6.1/docs/libs/gst-plugins-base-libs-sections.txt --- gst-plugins-base1.0-1.4.3/docs/libs/gst-plugins-base-libs-sections.txt 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/gst-plugins-base-libs-sections.txt 2015-10-30 14:21:43.000000000 +0000 @@ -4,11 +4,36 @@ gstdmabuf dmabuf gst/allocators/gstdmabuf.h +gst_dmabuf_allocator_new gst_dmabuf_allocator_alloc -gst_dmabuf_allocator_obtain gst_dmabuf_memory_get_fd gst_is_dmabuf_memory +GST_ALLOCATOR_DMABUF + + + +
+gstfdmemory +fdmemory +gst/allocators/gstfdmemory.h +GstFdMemoryFlags +gst_fd_allocator_alloc +gst_fd_allocator_get_type +gst_fd_allocator_new +gst_fd_memory_get_fd +gst_is_fd_memory + +GstFdAllocator +GstFdAllocatorClass +GST_ALLOCATOR_FD +GST_FD_ALLOCATOR +GST_FD_ALLOCATOR_CAST +GST_FD_ALLOCATOR_CLASS +GST_FD_ALLOCATOR_GET_CLASS +GST_IS_FD_ALLOCATOR +GST_IS_FD_ALLOCATOR_CLASS +GST_TYPE_FD_ALLOCATOR
@@ -34,6 +59,7 @@ GstAppSrcCallbacks gst_app_src_set_callbacks gst_app_src_push_buffer +gst_app_src_push_sample gst_app_src_end_of_stream GstAppSrcClass @@ -140,7 +166,6 @@ GST_AUDIO_INFO_DEPTH GST_AUDIO_INFO_FLAGS GST_AUDIO_INFO_FORMAT -GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS GST_AUDIO_INFO_NAME GST_AUDIO_INFO_POSITION GST_AUDIO_INFO_RATE @@ -234,6 +259,7 @@ GstAudioCdSrcMode gst_audio_cd_src_add_track +GstAudioCdSrcPrivate GST_TYPE_AUDIO_CD_SRC_MODE gst_audio_cd_src_mode_get_type GST_AUDIO_CD_SRC @@ -282,6 +308,7 @@ gst_audio_decoder_set_plc_aware gst_audio_decoder_set_tolerance gst_audio_decoder_merge_tags +gst_audio_decoder_proxy_getcaps GST_AUDIO_DECODER GST_IS_AUDIO_DECODER @@ -299,7 +326,6 @@ gst/audio/gstaudioencoder.h GstAudioEncoder GstAudioEncoderClass -GST_AUDIO_ENCODER_SEGMENT GST_AUDIO_ENCODER_SINK_NAME GST_AUDIO_ENCODER_SINK_PAD GST_AUDIO_ENCODER_SRC_NAME @@ -400,6 +426,7 @@ GST_AUDIO_SRC_CLASS GST_IS_AUDIO_SRC_CLASS GST_AUDIO_SRC_GET_CLASS +GST_AUDIO_BASE_SRC_CAST
@@ -408,6 +435,8 @@ GstAudioBaseSink GstAudioBaseSinkClass GstAudioBaseSinkSlaveMethod +GstAudioBaseSinkDiscontReason +GstAudioBaseSinkCustomSlavingCallback GST_AUDIO_BASE_SINK_CLOCK GST_AUDIO_BASE_SINK_PAD @@ -422,6 +451,8 @@ gst_audio_base_sink_get_alignment_threshold gst_audio_base_sink_set_discont_wait gst_audio_base_sink_get_discont_wait +gst_audio_base_sink_set_custom_slaving_callback +gst_audio_base_sink_report_device_failure GST_AUDIO_BASE_SINK GST_IS_AUDIO_BASE_SINK @@ -430,6 +461,7 @@ GST_AUDIO_BASE_SINK_CLASS GST_IS_AUDIO_BASE_SINK_CLASS GST_AUDIO_BASE_SINK_GET_CLASS +GST_AUDIO_BASE_SINK_CAST GstAudioBaseSinkPrivate gst_audio_base_sink_slave_method_get_type GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD @@ -683,7 +715,7 @@ gst_color_balance_get_balance_type GST_COLOR_BALANCE -GST_COLOR_BALANCE_GET_INTERACE +GST_COLOR_BALANCE_GET_INTERFACE GST_COLOR_BALANCE_TYPE GST_IS_COLOR_BALANCE GST_TYPE_COLOR_BALANCE @@ -728,9 +760,11 @@ gst_navigation_message_get_type gst_navigation_message_new_angles_changed gst_navigation_message_new_commands_changed +gst_navigation_message_new_event gst_navigation_message_new_mouse_over -gst_navigation_message_parse_mouse_over gst_navigation_message_parse_angles_changed +gst_navigation_message_parse_event +gst_navigation_message_parse_mouse_over gst_navigation_query_new_angles gst_navigation_query_get_type gst_navigation_query_new_commands @@ -906,6 +940,7 @@ GST_RIFF_I420 GST_RIFF_IDIT GST_RIFF_IJPG +GST_RIFF_INFO_IAAR GST_RIFF_INFO_IARL GST_RIFF_INFO_IART GST_RIFF_INFO_ICMS @@ -929,6 +964,7 @@ GST_RIFF_INFO_ISRC GST_RIFF_INFO_ISRF GST_RIFF_INFO_ITCH +GST_RIFF_INFO_ITRK GST_RIFF_ISBJ GST_RIFF_ISFT GST_RIFF_IV31 @@ -943,6 +979,8 @@ GST_RIFF_LIST_adtl GST_RIFF_LIST_hdrl GST_RIFF_LIST_movi +GST_RIFF_LIST_ncdt +GST_RIFF_LIST_nctg GST_RIFF_LIST_odml GST_RIFF_LIST_strl GST_RIFF_M263 @@ -961,14 +999,18 @@ GST_RIFF_RLE8 GST_RIFF_RT21 GST_RIFF_SFMC -GST_RIFF_TAG_acid GST_RIFF_TAG_AVF0 GST_RIFF_TAG_BEXT +GST_RIFF_TAG_FLLR +GST_RIFF_TAG_ID32 +GST_RIFF_TAG_IDVX GST_RIFF_TAG_JUNK GST_RIFF_TAG_JUNQ GST_RIFF_TAG_LIST +GST_RIFF_TAG_RF64 GST_RIFF_TAG_RIFF GST_RIFF_TAG_RIFX +GST_RIFF_TAG_acid GST_RIFF_TAG_avih GST_RIFF_TAG_bext GST_RIFF_TAG_cue @@ -976,9 +1018,13 @@ GST_RIFF_TAG_dmlh GST_RIFF_TAG_fact GST_RIFF_TAG_fmt +GST_RIFF_TAG_id3 GST_RIFF_TAG_idx1 +GST_RIFF_TAG_inst +GST_RIFF_TAG_labl GST_RIFF_TAG_note GST_RIFF_TAG_plst +GST_RIFF_TAG_smpl GST_RIFF_TAG_strd GST_RIFF_TAG_strf GST_RIFF_TAG_strh @@ -1155,6 +1201,8 @@ gst_rtcp_buffer_new_take_data gst_rtcp_buffer_new_copy_data +gst_rtcp_buffer_validate_data_reduced +gst_rtcp_buffer_validate_reduced gst_rtcp_buffer_validate_data gst_rtcp_buffer_validate @@ -1315,6 +1363,7 @@ gst_rtp_buffer_get_extension gst_rtp_buffer_set_extension gst_rtp_buffer_get_extension_data +gst_rtp_buffer_get_extension_bytes gst_rtp_buffer_get_ssrc gst_rtp_buffer_set_ssrc @@ -1338,6 +1387,7 @@ gst_rtp_buffer_get_payload_buffer gst_rtp_buffer_get_payload_subbuffer gst_rtp_buffer_get_payload_len +gst_rtp_buffer_get_payload_bytes gst_rtp_buffer_get_payload gst_rtp_buffer_default_clock_rate @@ -1425,6 +1475,7 @@ gst_rtsp_transport_free gst_rtsp_lower_trans_get_type +gst_rtsp_transport_get_media_type
@@ -1432,7 +1483,6 @@ gst/rtsp/gstrtspconnection.h GstRTSPConnection gst_rtsp_connection_create -gst_rtsp_connection_create_from_fd gst_rtsp_connection_create_from_socket gst_rtsp_connection_accept gst_rtsp_connection_connect @@ -1468,8 +1518,6 @@ gst_rtsp_connection_get_tunnelid gst_rtsp_connection_do_tunnel -gst_rtsp_connection_get_readfd -gst_rtsp_connection_get_writefd gst_rtsp_connection_set_http_mode gst_rtsp_connection_set_proxy @@ -1479,6 +1527,10 @@ gst_rtsp_connection_get_tls gst_rtsp_connection_set_tls_validation_flags gst_rtsp_connection_get_tls_validation_flags +gst_rtsp_connection_set_tls_database +gst_rtsp_connection_get_tls_database +gst_rtsp_connection_set_tls_interaction +gst_rtsp_connection_get_tls_interaction GstRTSPWatch GstRTSPWatchFuncs @@ -1490,6 +1542,7 @@ gst_rtsp_watch_write_data gst_rtsp_watch_get_send_backlog gst_rtsp_watch_set_send_backlog +gst_rtsp_watch_set_flushing gst_rtsp_watch_wait_backlog
@@ -1539,6 +1592,10 @@ gst_rtsp_message_take_header gst_rtsp_message_remove_header gst_rtsp_message_get_header +gst_rtsp_message_add_header_by_name +gst_rtsp_message_take_header_by_name +gst_rtsp_message_remove_header_by_name +gst_rtsp_message_get_header_by_name gst_rtsp_message_append_headers gst_rtsp_message_set_body gst_rtsp_message_take_body @@ -1617,6 +1674,7 @@ GstSDPMessage gst_sdp_message_new +gst_sdp_message_copy gst_sdp_message_init gst_sdp_message_uninit gst_sdp_message_free @@ -1687,6 +1745,7 @@ gst_sdp_message_dump gst_sdp_media_new +gst_sdp_media_copy gst_sdp_media_init gst_sdp_media_uninit gst_sdp_media_free @@ -1728,6 +1787,8 @@ gst_sdp_media_replace_attribute gst_sdp_media_remove_attribute gst_sdp_media_add_attribute + +gst_sdp_message_get_type
@@ -1741,8 +1802,10 @@ gst_mikey_message_new gst_mikey_message_new_from_bytes gst_mikey_message_new_from_data -gst_mikey_message_free gst_mikey_message_to_bytes +gst_mikey_message_copy +gst_mikey_message_ref +gst_mikey_message_unref GstMIKEYPRFFunc @@ -1768,19 +1831,25 @@ gst_mikey_message_add_payload GstMIKEYPayloadType -GstMIKEYPayloadClearFunc -GstMIKEYPayloadCopyFunc GstMIKEYPayload gst_mikey_payload_new gst_mikey_payload_copy -gst_mikey_payload_free +gst_mikey_payload_key_data_set_interval +gst_mikey_payload_key_data_set_key +gst_mikey_payload_key_data_set_salt +gst_mikey_payload_key_data_set_spi +gst_mikey_payload_ref +gst_mikey_payload_unref GstMIKEYEncAlg GstMIKEYMacAlg GstMIKEYPayloadKEMAC gst_mikey_payload_kemac_set -gst_mikey_message_add_kemac +gst_mikey_payload_kemac_add_sub +gst_mikey_payload_kemac_get_n_sub +gst_mikey_payload_kemac_get_sub +gst_mikey_payload_kemac_remove_sub GstMIKEYCacheType @@ -1812,6 +1881,10 @@ gst_mikey_payload_sp_add_param gst_mikey_payload_sp_remove_param +GST_TYPE_MIKEY_MESSAGE +gst_mikey_message_get_type +GST_TYPE_MIKEY_PAYLOAD +gst_mikey_payload_get_type
# tag @@ -1828,7 +1901,6 @@ GST_TAG_CDDA_CDDB_DISCID_FULL GST_TAG_CDDA_MUSICBRAINZ_DISCID GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL -GST_TAG_CDDA_TRACK_TAGS GST_TAG_CMML_CLIP GST_TAG_CMML_HEAD GST_TAG_CMML_STREAM @@ -1853,9 +1925,11 @@ GST_TAG_IMAGE_HORIZONTAL_PPI GST_TAG_IMAGE_VERTICAL_PPI GST_TAG_ID3V2_HEADER_SIZE +GST_TAG_MUSICAL_KEY gst_tag_register_musicbrainz_tags gst_tag_freeform_string_to_utf8 gst_tag_parse_extended_comment +gst_tag_image_data_to_image_sample GstTagImageType GST_TYPE_TAG_IMAGE_TYPE @@ -2053,6 +2127,9 @@ gst_install_plugins_context_new gst_install_plugins_context_free gst_install_plugins_context_set_xid +gst_install_plugins_context_set_confirm_search +gst_install_plugins_context_set_desktop_id +gst_install_plugins_context_set_startup_notification_id GST_TYPE_INSTALL_PLUGINS_CONTEXT GST_TYPE_INSTALL_PLUGINS_RETURN @@ -2118,12 +2195,14 @@ gst_encoding_profile_get_file_extension gst_encoding_profile_set_name gst_encoding_profile_set_description +gst_encoding_profile_set_enabled gst_encoding_profile_set_format gst_encoding_profile_set_preset gst_encoding_profile_set_preset_name gst_encoding_profile_set_restriction gst_encoding_profile_set_presence gst_encoding_profile_is_equal +gst_encoding_profile_is_enabled gst_encoding_profile_get_input_caps gst_encoding_profile_get_type_nick @@ -2202,6 +2281,7 @@ #video.h gst_video_calculate_display_ratio +gst_video_guess_framerate GstVideoConvertSampleCallback gst_video_convert_sample gst_video_convert_sample_async @@ -2230,9 +2310,6 @@ GST_VIDEO_MAX_PLANES GST_VIDEO_MAX_COMPONENTS GstVideoFormatInfo -GstVideoChromaSite -gst_video_chroma_from_string -gst_video_chroma_to_string GstVideoFormatFlags GstVideoPackFlags GstVideoFormatUnpack @@ -2289,14 +2366,19 @@ #video-color.h GstVideoColorRange +gst_video_color_range_offsets GstVideoColorMatrix -GstVideoTransferFunction +gst_video_color_matrix_get_Kr_Kb GstVideoColorPrimaries +GstVideoTransferFunction +gst_video_color_transfer_decode +gst_video_color_transfer_encode + GstVideoColorimetry gst_video_colorimetry_matches +gst_video_colorimetry_is_equal gst_video_colorimetry_from_string gst_video_colorimetry_to_string -gst_video_color_range_offsets gst_video_color_range_get_type GST_TYPE_VIDEO_COLOR_RANGE @@ -2311,6 +2393,9 @@ GstVideoInfo GstVideoInterlaceMode +GstVideoMultiviewMode +GstVideoMultiviewFramePacking +GstVideoMultiviewFlags GstVideoFlags GST_VIDEO_INFO_FORMAT GST_VIDEO_INFO_NAME @@ -2345,7 +2430,14 @@ GST_VIDEO_INFO_COMP_PLANE GST_VIDEO_INFO_COMP_PSTRIDE GST_VIDEO_INFO_COMP_POFFSET +GST_VIDEO_INFO_CHROMA_SITE +GST_VIDEO_INFO_COLORIMETRY +GST_VIDEO_INFO_MULTIVIEW_FLAGS +GST_VIDEO_INFO_MULTIVIEW_MODE gst_video_info_init +gst_video_info_new +gst_video_info_copy +gst_video_info_free gst_video_info_set_format gst_video_info_from_caps gst_video_info_to_caps @@ -2357,6 +2449,14 @@ GST_TYPE_VIDEO_INTERLACE_MODE gst_video_flags_get_type GST_TYPE_VIDEO_FLAGS +GST_TYPE_VIDEO_MULTIVIEW_FLAGS +GST_TYPE_VIDEO_MULTIVIEW_FLAGSET +GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING +GST_TYPE_VIDEO_MULTIVIEW_MODE +gst_video_multiview_mode_get_type +gst_video_multiview_flagset_get_type +gst_video_multiview_frame_packing_get_type +gst_video_info_get_type #video-frame.h @@ -2404,6 +2504,38 @@ GST_VIDEO_TILE_MAKE_STRIDE GST_VIDEO_TILE_X_TILES GST_VIDEO_TILE_Y_TILES + +gst_video_tile_mode_get_type +gst_video_tile_type_get_type + +#video-blend.h + +gst_video_blend +gst_video_blend_scale_linear_RGBA + +#video-converter.h + +GstVideoConverter +gst_video_converter_new +gst_video_converter_free +gst_video_converter_get_config +gst_video_converter_set_config +gst_video_converter_frame + +gst_video_dither_method_get_type +GST_TYPE_VIDEO_DITHER_METHOD + +#video-multiview.h + +gst_video_multiview_get_mono_modes +gst_video_multiview_get_unpacked_modes +gst_video_multiview_get_doubled_height_modes +gst_video_multiview_get_doubled_size_modes +gst_video_multiview_get_doubled_width_modes +gst_video_multiview_mode_from_caps_string +gst_video_multiview_mode_to_caps_string +gst_video_multiview_guess_half_aspect +gst_video_multiview_video_info_change_mode #video-enumtypes.h @@ -2487,7 +2619,6 @@ gst/video/video-overlay-composition.h GstVideoOverlayComposition -GstVideoOverlayCompositionClass gst_video_overlay_composition_new gst_video_overlay_composition_ref gst_video_overlay_composition_unref @@ -2511,7 +2642,6 @@ GstVideoOverlayFormatFlags GstVideoOverlayRectangle -GstVideoOverlayRectangleClass gst_video_overlay_rectangle_new_raw gst_video_overlay_rectangle_ref gst_video_overlay_rectangle_unref @@ -2531,10 +2661,7 @@ GST_TYPE_VIDEO_OVERLAY_COMPOSITION GST_VIDEO_OVERLAY_COMPOSITION -GST_VIDEO_OVERLAY_COMPOSITION_CLASS -GST_VIDEO_OVERLAY_COMPOSITION_GET_CLASS GST_IS_VIDEO_OVERLAY_COMPOSITION -GST_IS_VIDEO_VIDEO_OVERLAY_COMPOSITION_CLASS GST_VIDEO_OVERLAY_COMPOSITION_CAST GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE GST_VIDEO_OVERLAY_COMPOSITION_META_INFO @@ -2543,10 +2670,7 @@ GST_TYPE_VIDEO_OVERLAY_RECTANGLE GST_VIDEO_OVERLAY_RECTANGLE -GST_VIDEO_OVERLAY_RECTANGLE_CLASS -GST_VIDEO_OVERLAY_RECTANGLE_GET_CLASS GST_IS_VIDEO_OVERLAY_RECTANGLE -GST_IS_VIDEO_VIDEO_OVERLAY_RECTANGLE_CLASS gst_video_overlay_rectangle_get_type @@ -2592,7 +2716,6 @@ gstvideodecoder GstVideoDecoder GST_VIDEO_DECODER_ERROR -GST_VIDEO_DECODER_FLOW_DROPPED GST_VIDEO_DECODER_FLOW_NEED_DATA GST_VIDEO_DECODER_MAX_ERRORS GST_VIDEO_DECODER_SINK_NAME @@ -2634,6 +2757,7 @@ gst_video_decoder_get_needs_format gst_video_decoder_set_needs_format gst_video_decoder_merge_tags +gst_video_decoder_proxy_getcaps GST_IS_VIDEO_DECODER GST_IS_VIDEO_DECODER_CLASS @@ -2688,6 +2812,81 @@
+gstvideodither +GstVideoDither +gst/video/video-dither.h +GstVideoDither +GstVideoDitherFlags +GstVideoDitherMethod +gst_video_dither_free +gst_video_dither_line +gst_video_dither_new + +GST_TYPE_VIDEO_DITHER_FLAGS +gst_video_dither_flags_get_type +
+ +
+gstvideochroma +GstVideoChroma +gst/video/video-chroma.h +GstVideoChromaSite +gst_video_chroma_from_string +gst_video_chroma_to_string +GstVideoChromaFlags + +GstVideoChromaMethod +GstVideoChromaResample +gst_video_chroma_resample +gst_video_chroma_resample_free +gst_video_chroma_resample_get_info +gst_video_chroma_resample_new + +gst_video_chroma_flags_get_type +gst_video_chroma_method_get_type +GST_TYPE_VIDEO_CHROMA_FLAGS +GST_TYPE_VIDEO_CHROMA_METHOD +
+ +
+gstvideoresampler +GstVideoResampler +gst/video/video-resampler.h +GstVideoResampler +GstVideoResamplerFlags +GstVideoResamplerMethod +gst_video_resampler_clear +gst_video_resampler_init +GST_VIDEO_RESAMPLER_OPT_CUBIC_B +GST_VIDEO_RESAMPLER_OPT_CUBIC_C +GST_VIDEO_RESAMPLER_OPT_ENVELOPE +GST_VIDEO_RESAMPLER_OPT_MAX_TAPS +GST_VIDEO_RESAMPLER_OPT_SHARPEN +GST_VIDEO_RESAMPLER_OPT_SHARPNESS + +gst_video_resampler_flags_get_type +gst_video_resampler_method_get_type +GST_TYPE_VIDEO_RESAMPLER_FLAGS +GST_TYPE_VIDEO_RESAMPLER_METHOD +
+ +
+gstvideoscaler +GstVideoScaler +gst/video/video-scaler.h +GstVideoScaler +GstVideoScalerFlags +gst_video_scaler_2d +gst_video_scaler_combine_packed_YUV +gst_video_scaler_free +gst_video_scaler_get_coeff +gst_video_scaler_horizontal +gst_video_scaler_new +gst_video_scaler_vertical + +
+ +
gstvideoutils GstVideoCodecFrame GstVideoCodecFrameFlags @@ -2733,6 +2932,7 @@ GstDiscovererInfo GstDiscovererResult +GstDiscovererSerializeFlags gst_discoverer_info_get_duration gst_discoverer_info_get_misc gst_discoverer_info_get_result @@ -2744,6 +2944,8 @@ gst_discoverer_info_get_seekable gst_discoverer_info_ref gst_discoverer_info_unref +gst_discoverer_info_to_variant +gst_discoverer_info_from_variant GstDiscovererStreamInfo GstDiscovererContainerInfo diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/annotation-glossary.html gst-plugins-base1.0-1.6.1/docs/libs/html/annotation-glossary.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/annotation-glossary.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/annotation-glossary.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,12 +2,12 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Annotation Glossary +Annotation Glossary: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -22,6 +22,8 @@  |  O  |  + R +  |  S  |  T @@ -50,10 +52,19 @@

O

out

Parameter for returning results. Default is transfer full.

+

R

+
rename-to
+

Rename the original symbol's name to SYMBOL.

S

scope async

The callback is valid until first called.

+
scope call
+

The callback is valid only during the call to the method.

+
skip
+

Exposed in C code, not necessarily available in other languages.

T

+
transfer floating
+

Alias for transfer none, used for objects with floating refs.

transfer full

Free data after the code is done.

transfer none
@@ -62,7 +73,6 @@

Override the parsed C type with given type.

+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/api-index-deprecated.html gst-plugins-base1.0-1.6.1/docs/libs/html/api-index-deprecated.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/api-index-deprecated.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/api-index-deprecated.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Index of deprecated API +Index of deprecated API: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -40,7 +40,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/api-index-full.html gst-plugins-base1.0-1.6.1/docs/libs/html/api-index-full.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/api-index-full.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/api-index-full.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Index +Index: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -146,6 +146,10 @@
+gst_app_src_push_sample, function in appsrc +
+
+
gst_app_src_set_callbacks, function in appsrc
@@ -214,6 +218,14 @@
+GstAudioBaseSinkCustomSlavingCallback, user_function in gstaudiobasesink +
+
+
+GstAudioBaseSinkDiscontReason, enum in gstaudiobasesink +
+
+
GstAudioBaseSinkSlaveMethod, enum in gstaudiobasesink
@@ -458,10 +470,18 @@
+gst_audio_base_sink_report_device_failure, function in gstaudiobasesink +
+
+
gst_audio_base_sink_set_alignment_threshold, function in gstaudiobasesink
+gst_audio_base_sink_set_custom_slaving_callback, function in gstaudiobasesink +
+
+
gst_audio_base_sink_set_discont_wait, function in gstaudiobasesink
@@ -638,6 +658,10 @@
+gst_audio_decoder_proxy_getcaps, function in gstaudiodecoder +
+
+
gst_audio_decoder_set_drainable, function in gstaudiodecoder
@@ -1235,7 +1259,7 @@
-gst_buffer_get_video_meta, macro in gstvideometa +gst_buffer_get_video_meta, function in gstvideometa
@@ -1445,6 +1469,10 @@
+GstDiscovererSerializeFlags, enum in gstdiscoverer +
+
+
GstDiscovererStreamInfo, struct in gstdiscoverer
@@ -1493,6 +1521,10 @@
+gst_discoverer_info_from_variant, function in gstdiscoverer +
+
+
gst_discoverer_info_get_audio_streams, function in gstdiscoverer
@@ -1557,6 +1589,10 @@
+gst_discoverer_info_to_variant, function in gstdiscoverer +
+
+
gst_discoverer_info_unref, macro in gstdiscoverer
@@ -1669,6 +1705,10 @@
+gst_dmabuf_allocator_new, function in dmabuf +
+
+
gst_dmabuf_memory_get_fd, function in dmabuf
@@ -1790,6 +1830,10 @@
+gst_encoding_profile_is_enabled, function in encoding-profile +
+
+
gst_encoding_profile_is_equal, function in encoding-profile
@@ -1802,6 +1846,10 @@
+gst_encoding_profile_set_enabled, function in encoding-profile +
+
+
gst_encoding_profile_set_format, function in encoding-profile
@@ -1903,6 +1951,26 @@

F

+GstFdMemoryFlags, enum in fdmemory +
+
+
+gst_fd_allocator_alloc, function in fdmemory +
+
+
+gst_fd_allocator_get_type, function in fdmemory +
+
+
+gst_fd_allocator_new, function in fdmemory +
+
+
+gst_fd_memory_get_fd, function in fdmemory +
+
+
GstFFTF32, struct in gstfftf32
@@ -2052,6 +2120,18 @@
+gst_install_plugins_context_set_confirm_search, function in gstpbutilsinstallplugins +
+
+
+gst_install_plugins_context_set_desktop_id, function in gstpbutilsinstallplugins +
+
+
+gst_install_plugins_context_set_startup_notification_id, function in gstpbutilsinstallplugins +
+
+
gst_install_plugins_context_set_xid, function in gstpbutilsinstallplugins
@@ -2076,6 +2156,10 @@
+gst_is_fd_memory, function in fdmemory +
+
+
gst_is_missing_plugin_message, function in gstpbutilsmissingplugins
@@ -2213,6 +2297,10 @@
+gst_mikey_message_copy, function in gstmikey +
+
+
gst_mikey_message_find_payload, function in gstmikey
@@ -2253,6 +2341,10 @@
+gst_mikey_message_ref, function in gstmikey +
+
+
gst_mikey_message_remove_cs_srtp, function in gstmikey
@@ -2277,14 +2369,50 @@
+gst_mikey_message_unref, function in gstmikey +
+
+
gst_mikey_payload_copy, function in gstmikey
+gst_mikey_payload_kemac_add_sub, function in gstmikey +
+
+
+gst_mikey_payload_kemac_get_n_sub, function in gstmikey +
+
+
+gst_mikey_payload_kemac_get_sub, function in gstmikey +
+
+
+gst_mikey_payload_kemac_remove_sub, function in gstmikey +
+
+
gst_mikey_payload_kemac_set, function in gstmikey
+gst_mikey_payload_key_data_set_interval, function in gstmikey +
+
+
+gst_mikey_payload_key_data_set_key, function in gstmikey +
+
+
+gst_mikey_payload_key_data_set_salt, function in gstmikey +
+
+
+gst_mikey_payload_key_data_set_spi, function in gstmikey +
+
+
gst_mikey_payload_new, function in gstmikey
@@ -2297,6 +2425,10 @@
+gst_mikey_payload_ref, function in gstmikey +
+
+
gst_mikey_payload_sp_add_param, function in gstmikey
@@ -2321,6 +2453,10 @@
+gst_mikey_payload_unref, function in gstmikey +
+
+
GST_MIKEY_VERSION, macro in gstmikey
@@ -2454,6 +2590,10 @@
+gst_navigation_message_new_event, function in gstnavigation +
+
+
gst_navigation_message_new_mouse_over, function in gstnavigation
@@ -2462,6 +2602,10 @@
+gst_navigation_message_parse_event, function in gstnavigation +
+
+
gst_navigation_message_parse_mouse_over, function in gstnavigation
@@ -2700,6 +2844,14 @@
+gst_rtcp_buffer_validate_data_reduced, function in gstrtcpbuffer +
+
+
+gst_rtcp_buffer_validate_reduced, function in gstrtcpbuffer +
+
+
GST_RTCP_MAX_BYE_SSRC_COUNT, macro in gstrtcpbuffer
@@ -3128,6 +3280,10 @@
+gst_rtp_buffer_get_extension_bytes, function in gstrtpbuffer +
+
+
gst_rtp_buffer_get_extension_data, function in gstrtpbuffer
@@ -3164,6 +3320,10 @@
+gst_rtp_buffer_get_payload_bytes, function in gstrtpbuffer +
+
+
gst_rtp_buffer_get_payload_len, function in gstrtpbuffer
@@ -3464,6 +3624,14 @@
+gst_rtsp_connection_get_tls_database, function in gstrtspconnection +
+
+
+gst_rtsp_connection_get_tls_interaction, function in gstrtspconnection +
+
+
gst_rtsp_connection_get_tls_validation_flags, function in gstrtspconnection
@@ -3532,6 +3700,14 @@
+gst_rtsp_connection_set_tls_database, function in gstrtspconnection +
+
+
+gst_rtsp_connection_set_tls_interaction, function in gstrtspconnection +
+
+
gst_rtsp_connection_set_tls_validation_flags, function in gstrtspconnection
@@ -3568,6 +3744,10 @@
+gst_rtsp_message_add_header_by_name, function in gstrtspmessage +
+
+
gst_rtsp_message_append_headers, function in gstrtspmessage
@@ -3588,6 +3768,10 @@
+gst_rtsp_message_get_header_by_name, function in gstrtspmessage +
+
+
gst_rtsp_message_get_type, function in gstrtspmessage
@@ -3640,6 +3824,10 @@
+gst_rtsp_message_remove_header_by_name, function in gstrtspmessage +
+
+
gst_rtsp_message_set_body, function in gstrtspmessage
@@ -3656,6 +3844,10 @@
+gst_rtsp_message_take_header_by_name, function in gstrtspmessage +
+
+
gst_rtsp_message_unset, function in gstrtspmessage
@@ -3780,6 +3972,10 @@
+gst_rtsp_watch_set_flushing, function in gstrtspconnection +
+
+
gst_rtsp_watch_set_send_backlog, function in gstrtspconnection
@@ -3921,6 +4117,10 @@
+gst_sdp_media_copy, function in gstsdpmessage +
+
+
gst_sdp_media_formats_len, function in gstsdpmessage
@@ -4101,6 +4301,10 @@
+gst_sdp_message_copy, function in gstsdpmessage +
+
+
gst_sdp_message_dump, function in gstsdpmessage
@@ -4582,6 +4786,10 @@
+gst_tag_image_data_to_image_sample, function in gsttag +
+
+
GST_TAG_IMAGE_HORIZONTAL_PPI, macro in gsttag
@@ -4638,6 +4846,10 @@
+GST_TAG_MUSICAL_KEY, macro in gsttag +
+
+
GST_TAG_MUSICBRAINZ_ALBUMARTISTID, macro in gsttag
@@ -4723,7 +4935,19 @@
-GstVideoChromaSite, enum in gstvideo +GstVideoChromaFlags, enum in GstVideoChroma +
+
+
+GstVideoChromaMethod, enum in GstVideoChroma +
+
+
+GstVideoChromaResample, struct in GstVideoChroma +
+
+
+GstVideoChromaSite, enum in GstVideoChroma
@@ -4755,6 +4979,10 @@
+GstVideoConverter, struct in gstvideo +
+
+
GstVideoConvertSampleCallback, user_function in gstvideo
@@ -4771,6 +4999,18 @@
+GstVideoDither, struct in GstVideoDither +
+
+
+GstVideoDitherFlags, enum in GstVideoDither +
+
+
+GstVideoDitherMethod, enum in GstVideoDither +
+
+
GstVideoEncoder, struct in GstVideoEncoder
@@ -4843,6 +5083,18 @@
+GstVideoMultiviewFlags, enum in gstvideo +
+
+
+GstVideoMultiviewFramePacking, enum in gstvideo +
+
+
+GstVideoMultiviewMode, enum in gstvideo +
+
+
GstVideoOrientation, struct in gstvideoorientation
@@ -4887,6 +5139,26 @@
+GstVideoResampler, struct in GstVideoResampler +
+
+
+GstVideoResamplerFlags, enum in GstVideoResampler +
+
+
+GstVideoResamplerMethod, enum in GstVideoResampler +
+
+
+GstVideoScaler, struct in GstVideoScaler +
+
+
+GstVideoScalerFlags, enum in GstVideoScaler +
+
+
GstVideoSink, struct in gstvideosink
@@ -4915,6 +5187,14 @@
+gst_video_blend, function in gstvideo +
+
+
+gst_video_blend_scale_linear_RGBA, function in gstvideo +
+
+
gst_video_buffer_pool_new, function in GstVideoPool
@@ -4927,11 +5207,27 @@
-gst_video_chroma_from_string, function in gstvideo +gst_video_chroma_from_string, function in GstVideoChroma +
+
+
+gst_video_chroma_resample, function in GstVideoChroma
-gst_video_chroma_to_string, function in gstvideo +gst_video_chroma_resample_free, function in GstVideoChroma +
+
+
+gst_video_chroma_resample_get_info, function in GstVideoChroma +
+
+
+gst_video_chroma_resample_new, function in GstVideoChroma +
+
+
+gst_video_chroma_to_string, function in GstVideoChroma
@@ -5023,6 +5319,10 @@
+gst_video_colorimetry_is_equal, function in gstvideo +
+
+
gst_video_colorimetry_matches, function in gstvideo
@@ -5031,10 +5331,42 @@
+gst_video_color_matrix_get_Kr_Kb, function in gstvideo +
+
+
gst_video_color_range_offsets, function in gstvideo
+gst_video_color_transfer_decode, function in gstvideo +
+
+
+gst_video_color_transfer_encode, function in gstvideo +
+
+
+gst_video_converter_frame, function in gstvideo +
+
+
+gst_video_converter_free, function in gstvideo +
+
+
+gst_video_converter_get_config, function in gstvideo +
+
+
+gst_video_converter_new, function in gstvideo +
+
+
+gst_video_converter_set_config, function in gstvideo +
+
+
gst_video_convert_sample, function in gstvideo
@@ -5151,6 +5483,10 @@
+gst_video_decoder_proxy_getcaps, function in GstVideoDecoder +
+
+
gst_video_decoder_release_frame, function in GstVideoDecoder
@@ -5203,6 +5539,18 @@
+gst_video_dither_free, function in GstVideoDither +
+
+
+gst_video_dither_line, function in GstVideoDither +
+
+
+gst_video_dither_new, function in GstVideoDither +
+
+
gst_video_encoder_allocate_output_buffer, function in GstVideoEncoder
@@ -5599,10 +5947,22 @@
+gst_video_guess_framerate, function in gstvideo +
+
+
gst_video_info_align, function in gstvideo
+GST_VIDEO_INFO_CHROMA_SITE, macro in gstvideo +
+
+
+GST_VIDEO_INFO_COLORIMETRY, macro in gstvideo +
+
+
GST_VIDEO_INFO_COMP_DATA, macro in gstvideo
@@ -5643,6 +6003,10 @@
+gst_video_info_copy, function in gstvideo +
+
+
GST_VIDEO_INFO_FLAGS, macro in gstvideo
@@ -5671,6 +6035,10 @@
+gst_video_info_free, function in gstvideo +
+
+
gst_video_info_from_caps, function in gstvideo
@@ -5711,10 +6079,22 @@
+GST_VIDEO_INFO_MULTIVIEW_FLAGS, macro in gstvideo +
+
+
+GST_VIDEO_INFO_MULTIVIEW_MODE, macro in gstvideo +
+
+
GST_VIDEO_INFO_NAME, macro in gstvideo
+gst_video_info_new, function in gstvideo +
+
+
GST_VIDEO_INFO_N_COMPONENTS, macro in gstvideo
@@ -5779,6 +6159,42 @@
+gst_video_multiview_get_doubled_height_modes, function in gstvideo +
+
+
+gst_video_multiview_get_doubled_size_modes, function in gstvideo +
+
+
+gst_video_multiview_get_doubled_width_modes, function in gstvideo +
+
+
+gst_video_multiview_get_mono_modes, function in gstvideo +
+
+
+gst_video_multiview_get_unpacked_modes, function in gstvideo +
+
+
+gst_video_multiview_guess_half_aspect, function in gstvideo +
+
+
+gst_video_multiview_mode_from_caps_string, function in gstvideo +
+
+
+gst_video_multiview_mode_to_caps_string, function in gstvideo +
+
+
+gst_video_multiview_video_info_change_mode, function in gstvideo +
+
+
gst_video_orientation_get_hcenter, function in gstvideoorientation
@@ -5947,6 +6363,66 @@
+gst_video_resampler_clear, function in GstVideoResampler +
+
+
+gst_video_resampler_init, function in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_CUBIC_B, macro in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_CUBIC_C, macro in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_ENVELOPE, macro in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, macro in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_SHARPEN, macro in GstVideoResampler +
+
+
+GST_VIDEO_RESAMPLER_OPT_SHARPNESS, macro in GstVideoResampler +
+
+
+gst_video_scaler_2d, function in GstVideoScaler +
+
+
+gst_video_scaler_combine_packed_YUV, function in GstVideoScaler +
+
+
+gst_video_scaler_free, function in GstVideoScaler +
+
+
+gst_video_scaler_get_coeff, function in GstVideoScaler +
+
+
+gst_video_scaler_horizontal, function in GstVideoScaler +
+
+
+gst_video_scaler_new, function in GstVideoScaler +
+
+
+gst_video_scaler_vertical, function in GstVideoScaler +
+
+
gst_video_sink_center_rect, function in gstvideosink
@@ -6004,7 +6480,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/compiling.html gst-plugins-base1.0-1.6.1/docs/libs/html/compiling.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/compiling.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/compiling.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Compiling +Compiling: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -58,7 +58,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2 gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2 --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2 2015-10-30 14:21:43.000000000 +0000 @@ -1,11 +1,11 @@ - + @@ -89,6 +89,10 @@ + + + + @@ -107,9 +111,16 @@ + + + + + + + @@ -125,6 +136,7 @@ + @@ -212,9 +224,6 @@ - - - @@ -260,6 +269,7 @@ + @@ -315,6 +325,7 @@ + @@ -328,9 +339,12 @@ + + + @@ -364,7 +378,6 @@ - @@ -405,7 +418,6 @@ - @@ -460,7 +472,6 @@ - @@ -502,7 +513,6 @@ - @@ -524,6 +534,7 @@ + @@ -540,6 +551,7 @@ + @@ -552,11 +564,12 @@ - + + @@ -620,7 +633,6 @@ - @@ -662,6 +674,10 @@ + + + + @@ -670,6 +686,7 @@ + @@ -695,7 +712,6 @@ - @@ -716,6 +732,10 @@ + + + + @@ -755,7 +775,6 @@ - @@ -767,6 +786,7 @@ + @@ -832,6 +852,7 @@ + @@ -889,11 +910,13 @@ - + + + @@ -910,7 +933,17 @@ + + + + + + + + + + @@ -944,10 +977,10 @@ - + @@ -981,8 +1014,8 @@ + - @@ -990,7 +1023,6 @@ - @@ -1007,21 +1039,17 @@ - - - - @@ -1037,7 +1065,6 @@ - @@ -1046,7 +1073,6 @@ - @@ -1064,7 +1090,6 @@ - @@ -1072,7 +1097,6 @@ - @@ -1086,7 +1110,6 @@ - @@ -1096,6 +1119,9 @@ + + + @@ -1114,6 +1140,8 @@ + + @@ -1153,6 +1181,7 @@ + @@ -1163,10 +1192,6 @@ - - - - @@ -1181,12 +1206,14 @@ + + @@ -1224,8 +1251,8 @@ - + @@ -1237,8 +1264,6 @@ - - @@ -1277,10 +1302,14 @@ + + + + + - @@ -1314,7 +1343,14 @@ + + + + + + + @@ -1357,6 +1393,22 @@ + + + + + + + + + + + + + + + + @@ -1366,7 +1418,6 @@ - @@ -1374,23 +1425,27 @@ - + + + + + - + @@ -1408,7 +1463,6 @@ - @@ -1444,10 +1498,44 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1456,7 +1544,6 @@ - @@ -1466,7 +1553,6 @@ - @@ -1480,10 +1566,6 @@ - - - - @@ -1529,6 +1611,7 @@ + @@ -1605,9 +1688,11 @@ + - + + @@ -1630,5 +1715,741 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-appsink.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-appsink.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-appsink.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-appsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: appsink +appsink: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -198,8 +198,8 @@ a copy of the caps structure. After calling this method, the sink will only accept caps that match caps . If caps - is non-fixed, you must check the caps -on the buffers to get the actual used caps.

+ is non-fixed, or incomplete, +you must check the caps on the samples to get the actual used caps.

Parameters

@@ -248,7 +248,6 @@

Returns

the GstCaps accepted by the sink. gst_caps_unref() after usage.

-


@@ -279,7 +278,6 @@

Returns

TRUE if no more samples can be pulled and the appsink is EOS.

-


@@ -340,7 +338,6 @@

TRUE if appsink is emiting the "new-preroll" and "new-sample" signals.

-


@@ -402,7 +399,6 @@

Returns

The maximum amount of buffers that can be queued.

-


@@ -465,7 +461,6 @@

TRUE if appsink is dropping old buffers when the queue is filled.

-


@@ -503,8 +498,9 @@

Returns

-

a GstBuffer or NULL when the appsink is stopped or EOS.

-

+

a GstSample or NULL when the appsink is stopped or EOS. +Call gst_sample_unref() after usage.

+

[transfer full]


@@ -538,8 +534,9 @@

Returns

-

a GstBuffer or NULL when the appsink is stopped or EOS.

-

+

a GstSample or NULL when the appsink is stopped or EOS. +Call gst_sample_unref() after usage.

+

[transfer full]


@@ -555,8 +552,9 @@ less expensive, but also less flexible.

If callbacks are installed, no signals will be emitted for performance reasons.

+

[skip]

-

Parameters

+

Parameters

@@ -613,13 +611,13 @@ +is called from the streaming thread.

@@ -628,7 +626,7 @@ @@ -645,7 +643,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-appsrc.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-appsrc.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-appsrc.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-appsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: appsrc +appsrc: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -165,6 +165,14 @@ GstFlowReturn + + + + @@ -198,15 +206,18 @@

Description

The appsrc element can be used by applications to insert data into a -GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides +GStreamer pipeline. Unlike most GStreamer elements, appsrc provides external API functions.

appsrc can be used by linking with the libgstapp library to access the methods directly or by using the appsrc action signals.

-

Before operating appsrc, the caps property must be set to a fixed caps +

Before operating appsrc, the caps property must be set to fixed caps describing the format of the data that will be pushed with appsrc. An exception to this is when pushing buffers with unknown caps, in which case no caps should be set. This is typically true of file-like sources that push raw -byte buffers.

+byte buffers. If you don't want to explicitly set the caps, you can use +gst_app_src_push_sample. This method gets the caps associated with the +sample and sets them on the appsrc replacing any previously set caps (if +different from sample's caps).

The main way of handing data to the appsrc element is by calling the gst_app_src_push_buffer() method or by emitting the push-buffer action signal. This will put the buffer onto a queue from which appsrc will read from in its @@ -228,25 +239,25 @@ new position.

These signals allow the application to operate the appsrc in two different ways:

-

The push model, in which the application repeatedly calls the push-buffer method -with a new buffer. Optionally, the queue size in the appsrc can be controlled -with the enough-data and need-data signals by respectively stopping/starting -the push-buffer calls. This is a typical mode of operation for the -stream-type "stream" and "seekable". Use this model when implementing various -network protocols or hardware devices.

-

The pull model where the need-data signal triggers the next push-buffer call. +

The push mode, in which the application repeatedly calls the push-buffer/push-sample +method with a new buffer/sample. Optionally, the queue size in the appsrc +can be controlled with the enough-data and need-data signals by respectively +stopping/starting the push-buffer/push-sample calls. This is a typical +mode of operation for the stream-type "stream" and "seekable". Use this +mode when implementing various network protocols or hardware devices.

+

The pull mode, in which the need-data signal triggers the next push-buffer call. This mode is typically used in the "random-access" stream-type. Use this -model for file access or other randomly accessable sources. In this mode, a +mode for file access or other randomly accessable sources. In this mode, a buffer of exactly the amount of bytes given by the need-data signal should be pushed into appsrc.

In all modes, the size property on appsrc should contain the total stream size in bytes. Setting this property is mandatory in the random-access mode. For the stream and seekable modes, setting this property is optional but recommended.

-

When the application is finished pushing data into appsrc, it should call +

When the application has finished pushing data into appsrc, it should call gst_app_src_end_of_stream() or emit the end-of-stream action signal. After this call, no more buffers can be pushed into appsrc until a flushing seek -happened or the state of the appsrc has gone through READY.

+occurs or the state of the appsrc has gone through READY.

Functions

@@ -309,7 +320,6 @@

Returns

the GstCaps produced by the source. gst_caps_unref() after usage.

-


@@ -447,7 +457,6 @@

Returns

the size of the stream previously set with gst_app_src_set_size();

-


@@ -509,7 +518,6 @@

Returns

the stream type.

-


@@ -571,7 +579,6 @@

Returns

The maximum amount of bytes that can be queued.

-


@@ -599,9 +606,8 @@

Returns

The number of currently queued bytes.

-

-

Since 1.2

+

Since: 1.2


@@ -629,7 +635,6 @@

TRUE if appsrc is emitting the "new-preroll" and "new-buffer" signals.

-


@@ -678,8 +683,9 @@ less expensive, but also less flexible.

If callbacks are installed, no signals will be emitted for performance reasons.

+

[skip]

-

Parameters

+

Parameters

eos ()

Called when the end-of-stream has been reached. This callback -is called from the steaming thread.

 

new_preroll ()

Called when a new preroll sample is available. -This callback is called from the steaming thread. +This callback is called from the streaming thread. The new preroll sample can be retrieved with gst_app_sink_pull_preroll() either from this callback or from any other thread.

new_sample ()

Called when a new sample is available. -This callback is called from the steaming thread. +This callback is called from the streaming thread. The new sample can be retrieved with gst_app_sink_pull_sample() either from this callback or from any other thread.

+gst_app_src_push_sample () +
+GstFlowReturn + gst_app_src_end_of_stream ()
@@ -745,22 +751,65 @@

Returns

-

GST_FLOW_OK when the buffer was successfuly queued. -GST_FLOW_FLUSHING when appsrc +

GST_FLOW_OK when the buffer was successfuly queued. +GST_FLOW_FLUSHING when appsrc is not PAUSED or PLAYING. -GST_FLOW_EOS when EOS occured.

-

+GST_FLOW_EOS when EOS occured.


+

gst_app_src_push_sample ()

+
GstFlowReturn
+gst_app_src_push_sample (GstAppSrc *appsrc,
+                         GstSample *sample);
+

Extract a buffer from the provided sample and adds it to the queue of +buffers that the appsrc element will push to its source pad. Any +previous caps setted on appsrc will be replaced by the caps associated +with the sample if not equal.

+

When the block property is TRUE, this function can block until free +space becomes available in the queue.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

appsrc

a GstAppSrc

 

sample

a GstSample from wich extract buffer to +push and caps to set.

[transfer none]
+
+
+

Returns

+

GST_FLOW_OK when the buffer was successfuly queued. +GST_FLOW_FLUSHING when appsrc +is not PAUSED or PLAYING. +GST_FLOW_EOS when EOS occured.

+
+

Since: 1.6

+ +
+

gst_app_src_end_of_stream ()

GstFlowReturn
 gst_app_src_end_of_stream (GstAppSrc *appsrc);

Indicates to the appsrc element that the last buffer queued in the element is the last buffer of the stream.

-

Parameters

+

Parameters

@@ -775,11 +824,10 @@
-

Returns

-

GST_FLOW_OK when the EOS was successfuly queued. -GST_FLOW_FLUSHING when appsrc +

Returns

+

GST_FLOW_OK when the EOS was successfuly queued. +GST_FLOW_FLUSHING when appsrc is not PAUSED or PLAYING.

-

@@ -880,7 +928,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-dmabuf.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-dmabuf.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-dmabuf.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-dmabuf.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: dmabuf +dmabuf: GStreamer Base Plugins 1.0 Library Reference Manual - - + + @@ -20,7 +20,7 @@ Home Up Prev -Next +Next
@@ -41,6 +41,14 @@ +GstAllocator * + + +gst_dmabuf_allocator_new () + + + + GstMemory * @@ -77,6 +85,21 @@

Functions

+

gst_dmabuf_allocator_new ()

+
GstAllocator *
+gst_dmabuf_allocator_new (void);
+

Return a new dmabuf allocator.

+
+

Returns

+

a new dmabuf allocator, or NULL if the allocator +isn't available. Use gst_object_unref() to release the allocator after +usage.

+

[transfer full]

+
+

Since: 1.2

+
+
+

gst_dmabuf_allocator_alloc ()

GstMemory *
 gst_dmabuf_allocator_alloc (GstAllocator *allocator,
@@ -84,7 +107,7 @@
                             gsize size);

Return a GstMemory that wraps a dmabuf file descriptor.

-

Parameters

+

Parameters

@@ -94,8 +117,8 @@ - - + + @@ -111,7 +134,7 @@

allocator

allocator to be used for this memory.

[allow-none]

allocator to be used for this memory

 

fd

-

Returns

+

Returns

a GstMemory based on allocator . When the buffer will be released dmabuf allocator will close the fd @@ -119,7 +142,7 @@ The memory is only mmapped on gst_buffer_mmap() request.

[transfer full]

-

Since 1.2

+

Since: 1.2


@@ -129,7 +152,7 @@

Return the file descriptor associated with mem .

-

Parameters

+

Parameters

@@ -144,11 +167,12 @@
-

Returns

-

the file descriptor associated with the memory, or -1

-

+

Returns

+

the file descriptor associated with the memory, or -1. The file +descriptor is still owned by the GstMemory. Use dup to take a copy +if you intend to use it beyond the lifetime of this GstMemory.

-

Since 1.2

+

Since: 1.2


@@ -158,7 +182,7 @@

Check if mem is dmabuf memory.

-

Parameters

+

Parameters

@@ -173,12 +197,11 @@
-

Returns

+

Returns

TRUE if mem is dmabuf memory, otherwise FALSE

-

-

Since 1.2

+

Since: 1.2

@@ -190,7 +213,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-encoding-profile.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-encoding-profile.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-encoding-profile.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-encoding-profile.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: encoding-profile +encoding-profile: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -149,6 +149,14 @@ void +gst_encoding_profile_set_enabled () + + + + +void + + gst_encoding_profile_set_format () @@ -194,6 +202,14 @@ +gboolean + + +gst_encoding_profile_is_enabled () + + + + GstCaps * @@ -467,14 +483,10 @@

Object Hierarchy

    GObject
-    ├── GstEncodingProfile
-       ├── GstEncodingAudioProfile
-       ├── GstEncodingContainerProfile
-       ╰── GstEncodingVideoProfile
     ├── GstEncodingProfile
-       ├── GstEncodingVideoProfile
-       ├── GstEncodingAudioProfile
-       ╰── GstEncodingContainerProfile
+       ├── GstEncodingVideoProfile
+       ├── GstEncodingAudioProfile
+       ╰── GstEncodingContainerProfile
     ╰── GstEncodingTarget
 
@@ -883,7 +895,6 @@

Returns

the name of the profile, can be NULL.

-


@@ -909,7 +920,6 @@

Returns

the description of the profile, can be NULL.

-


@@ -963,7 +973,6 @@

Returns

the name of the GstPreset to be used in the profile. This is the name that has been set when saving the preset.

-


@@ -989,7 +998,6 @@

Returns

the name of the GstPreset factory to be used in the profile.

-


@@ -1016,7 +1024,6 @@

Returns

The number of times the profile is used in its parent container profile. If 0, it is not a mandatory stream.

-


@@ -1075,7 +1082,6 @@

Returns

a suitable file extension for profile , or NULL.

-


@@ -1148,13 +1154,43 @@
+

gst_encoding_profile_set_enabled ()

+
void
+gst_encoding_profile_set_enabled (GstEncodingProfile *profile,
+                                  gboolean enabled);
+

Set whether the profile should be used or not.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

profile

a GstEncodingProfile

 

enabled

FALSE to disable profile, TRUE to enable it

 
+
+
+
+

gst_encoding_profile_set_format ()

void
 gst_encoding_profile_set_format (GstEncodingProfile *profile,
                                  GstCaps *format);

Sets the media format used in the profile.

-

Parameters

+

Parameters

@@ -1186,7 +1222,7 @@ to use for the profile. This is the name that has been set when saving the preset.

-

Parameters

+

Parameters

@@ -1216,7 +1252,7 @@ const gchar *preset_name);

Sets the name of the GstPreset's factory to be used in the profile.

-

Parameters

+

Parameters

@@ -1249,7 +1285,7 @@ that will be used in the profile. See gst_encoding_profile_get_restriction() for more about restrictions. Does not apply to GstEncodingContainerProfile.

-

Parameters

+

Parameters

@@ -1280,7 +1316,7 @@

Set the number of time the profile is used in its parent container profile. If 0, it is not a mandatory stream

-

Parameters

+

Parameters

@@ -1310,7 +1346,7 @@ GstEncodingProfile *b);

Checks whether the two GstEncodingProfile are equal

-

Parameters

+

Parameters

@@ -1332,22 +1368,27 @@
-

Returns

+

Returns

TRUE if a and b are equal, else FALSE.

-


+

gst_encoding_profile_is_enabled ()

+
gboolean
+gst_encoding_profile_is_enabled (GstEncodingProfile *profile);
+
+
+

gst_encoding_profile_get_input_caps ()

GstCaps *
 gst_encoding_profile_get_input_caps (GstEncodingProfile *profile);

Computes the full output caps that this profile will be able to consume.

-

Parameters

+

Parameters

@@ -1362,7 +1403,7 @@
-

Returns

+

Returns

The full caps the given profile can consume. Call gst_caps_unref() when you are done with the caps.

@@ -1375,7 +1416,7 @@
const gchar *
 gst_encoding_profile_get_type_nick (GstEncodingProfile *profile);
-

Parameters

+

Parameters

@@ -1390,10 +1431,9 @@
-

Returns

+

Returns

the human-readable name of the type of profile .

-


@@ -1406,7 +1446,7 @@ const gchar *preset);

Creates a new GstEncodingContainerProfile.

-

Parameters

+

Parameters

@@ -1439,9 +1479,8 @@
-

Returns

+

Returns

The newly created GstEncodingContainerProfile.

-


@@ -1457,7 +1496,7 @@ will be made, if you wish to use it elsewhere after this method you should increment its reference count.

-

Parameters

+

Parameters

@@ -1479,10 +1518,9 @@
-

Returns

+

Returns

TRUE if the stream was properly added, else FALSE.

-


@@ -1497,7 +1535,7 @@ profile .

-

Parameters

+

Parameters

@@ -1519,12 +1557,11 @@
-

Returns

+

Returns

TRUE if container contains a GstEncodingProfile identical to profile , else FALSE.

-


@@ -1534,7 +1571,7 @@ gst_encoding_container_profile_get_profiles (GstEncodingContainerProfile *profile);
-

Parameters

+

Parameters

@@ -1549,7 +1586,7 @@
-

Returns

+

Returns

the list of contained GstEncodingProfile.

[element-type GstPbutils.EncodingProfile][transfer none]

@@ -1566,7 +1603,7 @@

All provided allocatable arguments will be internally copied, so can be safely freed/unreferenced after calling this method.

-

Parameters

+

Parameters

@@ -1600,9 +1637,8 @@
-

Returns

+

Returns

the newly created GstEncodingAudioProfile.

-


@@ -1621,7 +1657,7 @@

If you wish to use/force a constant framerate please refer to the gst_encoding_video_profile_set_variableframerate() documentation.

-

Parameters

+

Parameters

@@ -1655,9 +1691,8 @@
-

Returns

+

Returns

the newly created GstEncodingVideoProfile.

-


@@ -1667,7 +1702,7 @@ gst_encoding_video_profile_get_pass (GstEncodingVideoProfile *prof);

Get the pass number if this is part of a multi-pass profile.

-

Parameters

+

Parameters

@@ -1682,10 +1717,9 @@
-

Returns

+

Returns

The pass number. Starts at 1 for multi-pass. 0 if this is not a multi-pass profile

-


@@ -1695,7 +1729,7 @@ gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *prof);
-

Parameters

+

Parameters

@@ -1710,9 +1744,8 @@
-

Returns

+

Returns

Whether non-constant video framerate is allowed for encoding.

-


@@ -1725,7 +1758,7 @@ this value set to 1. If this video profile isn't part of a multi-pass profile, you may set it to 0 (the default value).

-

Parameters

+

Parameters

@@ -1759,7 +1792,7 @@ be normalized by dropping/duplicating frames in order to produce a constance framerate.

-

Parameters

+

Parameters

@@ -1788,7 +1821,7 @@

Decreases the reference count of the target , possibly freeing it.

-

Parameters

+

Parameters

@@ -1810,7 +1843,7 @@

Increases the reference count of the target .

-

Parameters

+

Parameters

@@ -1843,7 +1876,7 @@ can be a application or user specific category if needed.

-

Parameters

+

Parameters

@@ -1878,7 +1911,7 @@
-

Returns

+

Returns

The newly created GstEncodingTarget or NULL if there was an error.

[transfer full]

@@ -1890,7 +1923,7 @@
const gchar *
 gst_encoding_target_get_name (GstEncodingTarget *target);
-

Parameters

+

Parameters

@@ -1905,7 +1938,7 @@
-

Returns

+

Returns

The name of the target .

[transfer none]

@@ -1917,7 +1950,7 @@
const gchar *
 gst_encoding_target_get_category (GstEncodingTarget *target);
-

Parameters

+

Parameters

@@ -1932,7 +1965,7 @@
-

Returns

+

Returns

The category of the target . For example: GST_ENCODING_CATEGORY_DEVICE.

@@ -1945,7 +1978,7 @@
const gchar *
 gst_encoding_target_get_description (GstEncodingTarget *target);
-

Parameters

+

Parameters

@@ -1960,7 +1993,7 @@
-

Returns

+

Returns

The description of the target .

[transfer none]

@@ -1972,7 +2005,7 @@
const GList *
 gst_encoding_target_get_profiles (GstEncodingTarget *target);
-

Parameters

+

Parameters

@@ -1987,7 +2020,7 @@
-

Returns

+

Returns

A list of GstEncodingProfile(s) this target handles.

@@ -2001,7 +2034,7 @@ gst_encoding_target_get_profile (GstEncodingTarget *target, const gchar *name);
-

Parameters

+

Parameters

@@ -2023,7 +2056,7 @@
-

Returns

+

Returns

The matching GstEncodingProfile, or NULL.

[transfer full]

@@ -2044,7 +2077,7 @@ the profile after calling this method, you should increase its reference count.

-

Parameters

+

Parameters

@@ -2066,9 +2099,8 @@
-

Returns

+

Returns

TRUE if the profile was added, else FALSE.

-


@@ -2080,7 +2112,7 @@

Saves the target to a default user-local directory.

-

Parameters

+

Parameters

@@ -2102,9 +2134,8 @@
-

Returns

+

Returns

TRUE if the target was correctly saved, else FALSE.

-


@@ -2117,7 +2148,7 @@

Saves the target to the provided file location.

-

Parameters

+

Parameters

@@ -2145,9 +2176,8 @@
-

Returns

+

Returns

TRUE if the target was correctly saved, else FALSE.

-


@@ -2162,7 +2192,7 @@

If the category name is specified only targets from that category will be searched for.

-

Parameters

+

Parameters

@@ -2190,7 +2220,7 @@
-

Returns

+

Returns

The GstEncodingTarget if available, else NULL.

[transfer full]

@@ -2203,7 +2233,7 @@ GError **error);

Opens the provided file and returns the contained GstEncodingTarget.

-

Parameters

+

Parameters

@@ -2225,7 +2255,7 @@
-

Returns

+

Returns

The GstEncodingTarget contained in the file, else NULL.

[transfer full]

@@ -2240,7 +2270,7 @@ if categoryname is NULL.

-

Parameters

+

Parameters

@@ -2256,7 +2286,7 @@
-

Returns

+

Returns

The list of GstEncodingTarget.

[transfer full][element-type GstEncodingTarget]

@@ -2269,7 +2299,7 @@ (void);

Lists all GstEncodingTarget categories present on disk.

-

Returns

+

Returns

A list of GstEncodingTarget categories.

[transfer full][element-type gchar*]

@@ -2361,7 +2391,6 @@
+
Generated by GTK-Doc V1.24
\ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-fdmemory.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-fdmemory.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-fdmemory.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-fdmemory.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,294 @@ + + + + +fdmemory: GStreamer Base Plugins 1.0 Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

fdmemory

+

fdmemory — Memory wrapper for fd backed memory

+
+
+

Functions

+
++++ + + + + + + + + + + + + + + + + + + + + + + +
+GstMemory * + +gst_fd_allocator_alloc () +
+GType + +gst_fd_allocator_get_type () +
+GstAllocator * + +gst_fd_allocator_new () +
+gint + +gst_fd_memory_get_fd () +
+gboolean + +gst_is_fd_memory () +
+
+
+

Types and Values

+
++++ + + + + +
enumGstFdMemoryFlags
+
+
+

Includes

+
#include <gst/allocators/gstfdmemory.h>
+
+
+
+

Description

+
+
+

Functions

+
+

gst_fd_allocator_alloc ()

+
GstMemory *
+gst_fd_allocator_alloc (GstAllocator *allocator,
+                        gint fd,
+                        gsize size,
+                        GstFdMemoryFlags flags);
+

Return a GstMemory that wraps a generic file descriptor.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

allocator

allocator to be used for this memory

 

fd

file descriptor

 

size

memory size

 

flags

extra GstFdMemoryFlags

 
+
+
+

Returns

+

a GstMemory based on allocator +. +When the buffer will be released the allocator will close the fd +. +The memory is only mmapped on gst_buffer_mmap() request.

+

[transfer full]

+
+

Since: 1.6

+
+
+
+

gst_fd_allocator_get_type ()

+
GType
+gst_fd_allocator_get_type (void);
+
+
+
+

gst_fd_allocator_new ()

+
GstAllocator *
+gst_fd_allocator_new (void);
+

Return a new fd allocator.

+
+

Returns

+

a new fd allocator, or NULL if the allocator +isn't available. Use gst_object_unref() to release the allocator after +usage.

+

[transfer full]

+
+

Since: 1.6

+
+
+
+

gst_fd_memory_get_fd ()

+
gint
+gst_fd_memory_get_fd (GstMemory *mem);
+

Get the fd from mem +. Call gst_is_fd_memory() to check if mem + has +an fd.

+
+

Parameters

+
+++++ + + + + + +

mem

GstMemory

 
+
+
+

Returns

+

the fd of mem +or -1 when there is no fd on mem +

+
+

Since: 1.6

+
+
+
+

gst_is_fd_memory ()

+
gboolean
+gst_is_fd_memory (GstMemory *mem);
+

Check if mem + is memory backed by an fd

+
+

Parameters

+
+++++ + + + + + +

mem

GstMemory

 
+
+
+

Returns

+

TRUE when mem +has an fd that can be retrieved with +gst_fd_memory_get_fd().

+
+

Since: 1.6

+
+
+
+

Types and Values

+
+

enum GstFdMemoryFlags

+

Various flags to control the operation of the fd backed memory.

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + +

GST_FD_MEMORY_FLAG_NONE

+

no flag

+
 

GST_FD_MEMORY_FLAG_KEEP_MAPPED

+

once the memory is mapped, + keep it mapped until the memory is destroyed.

+
 

GST_FD_MEMORY_FLAG_MAP_PRIVATE

+

do a private mapping instead of + the default shared mapping.

+
 
+
+

Since: 1.6

+
+
+
+

See Also

+

GstMemory

+
+
+ + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiobasesink +gstaudiobasesink: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -42,6 +42,14 @@ + +void + + +(*GstAudioBaseSinkCustomSlavingCallback) () + + + #define GST_AUDIO_BASE_SINK_CLOCK() @@ -141,6 +149,22 @@ gst_audio_base_sink_get_discont_wait () + + +void + + +gst_audio_base_sink_set_custom_slaving_callback () + + + + +void + + +gst_audio_base_sink_report_device_failure () + +
@@ -216,6 +240,10 @@ enum GstAudioBaseSinkSlaveMethod + +enum +GstAudioBaseSinkDiscontReason + @@ -244,13 +272,88 @@

Functions

+

GstAudioBaseSinkCustomSlavingCallback ()

+
void
+(*GstAudioBaseSinkCustomSlavingCallback)
+                               (GstAudioBaseSink *sink,
+                                GstClockTime etime,
+                                GstClockTime itime,
+                                GstClockTimeDiff *requested_skew,
+                                GstAudioBaseSinkDiscontReason discont_reason,
+                                gpointer user_data);
+

This function is set with gst_audio_base_sink_set_custom_slaving_callback() +and is called during playback. It receives the current time of external and +internal clocks, which the callback can then use to apply any custom +slaving/synchronization schemes.

+

The external clock is the sink's element clock, the internal one is the +internal audio clock. The internal audio clock's calibration is applied to +the timestamps before they are passed to the callback. The difference between +etime and itime is the skew; how much internal and external clock lie apart +from each other. A skew of 0 means both clocks are perfectly in sync. +itime > etime means the external clock is going slower, while itime < etime +means it is going faster than the internal clock. etime and itime are always +valid timestamps, except for when a discontinuity happens.

+

requested_skew is an output value the callback can write to. It informs the +sink of whether or not it should move the playout pointer, and if so, by how +much. This pointer is only NULL if a discontinuity occurs; otherwise, it is +safe to write to *requested_skew. The default skew is 0.

+

The sink may experience discontinuities. If one happens, discont is TRUE, +itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL. +This makes it possible to reset custom clock slaving algorithms when a +discontinuity happens.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

sink

a GstAudioBaseSink

 

etime

external clock time

 

itime

internal clock time

 

requested_skew

skew amount requested by the callback

 

discont_reason

reason for discontinuity (if any)

 

user_data

user data

 
+
+

Since: 1.6

+
+
+

GST_AUDIO_BASE_SINK_CLOCK()

#define GST_AUDIO_BASE_SINK_CLOCK(obj)   (GST_AUDIO_BASE_SINK (obj)->clock)
 

Get the GstClock of obj .

-

Parameters

+

Parameters

@@ -273,7 +376,7 @@

Get the sink GstPad of obj .

-

Parameters

+

Parameters

@@ -299,7 +402,7 @@ as the parent of the returned buffer (see gst_object_set_parent()).

-

Parameters

+

Parameters

@@ -314,7 +417,7 @@
-

Returns

+

Returns

The new ringbuffer of sink .

[transfer none]

@@ -335,7 +438,7 @@ is FALSE, gst_element_provide_clock() will return NULL.

-

Parameters

+

Parameters

@@ -366,7 +469,7 @@ will provide a clock or not. See also gst_audio_base_sink_set_provide_clock.

-

Parameters

+

Parameters

@@ -381,10 +484,9 @@
-

Returns

+

Returns

TRUE if sink will provide a clock.

-


@@ -396,7 +498,7 @@

Controls how clock slaving will be performed in sink .

-

Parameters

+

Parameters

@@ -426,7 +528,7 @@

Get the current slave method used by sink .

-

Parameters

+

Parameters

@@ -441,10 +543,9 @@
-

Returns

+

Returns

The current slave method used by sink .

-


@@ -456,7 +557,7 @@ gint64 drift_tolerance);

Controls the sink's drift tolerance.

-

Parameters

+

Parameters

@@ -487,7 +588,7 @@

Get the current drift tolerance, in microseconds, used by sink .

-

Parameters

+

Parameters

@@ -502,10 +603,9 @@
-

Returns

+

Returns

The current drift tolerance used by sink .

-


@@ -517,7 +617,7 @@ GstClockTime alignment_threshold);

Controls the sink's alignment threshold.

-

Parameters

+

Parameters

@@ -548,7 +648,7 @@

Get the current alignment threshold, in nanoseconds, used by sink .

-

Parameters

+

Parameters

@@ -563,10 +663,9 @@
-

Returns

+

Returns

The current alignment threshold used by sink .

-


@@ -577,7 +676,7 @@ GstClockTime discont_wait);

Controls how long the sink will wait before creating a discontinuity.

-

Parameters

+

Parameters

@@ -607,7 +706,7 @@

Get the current discont wait, in nanoseconds, used by sink .

-

Parameters

+

Parameters

@@ -622,12 +721,89 @@
-

Returns

+

Returns

The current discont wait used by sink .

-

+
+
+

gst_audio_base_sink_set_custom_slaving_callback ()

+
void
+gst_audio_base_sink_set_custom_slaving_callback
+                               (GstAudioBaseSink *sink,
+                                GstAudioBaseSinkCustomSlavingCallback callback,
+                                gpointer user_data,
+                                GDestroyNotify notify);
+

Sets the custom slaving callback. This callback will +be invoked if the slave-method property is set to +GST_AUDIO_BASE_SINK_SLAVE_CUSTOM and the audio sink +receives and plays samples.

+

Setting the callback to NULL causes the sink to +behave as if the GST_AUDIO_BASE_SINK_SLAVE_NONE +method were used.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

sink

a GstAudioBaseSink

 

callback

a GstAudioBaseSinkCustomSlavingCallback

 

user_data

user data passed to the callback

 

notify

called when user_data becomes unused

 
+
+

Since: 1.6

+
+
+
+

gst_audio_base_sink_report_device_failure ()

+
void
+gst_audio_base_sink_report_device_failure
+                               (GstAudioBaseSink *sink);
+

Informs this base class that the audio output device has failed for +some reason, causing a discontinuity (for example, because the device +recovered from the error, but lost all contents of its ring buffer). +This function is typically called by derived classes, and is useful +for the custom slave method.

+
+

Parameters

+
+++++ + + + + + +

sink

a GstAudioBaseSink

 
+
+

Since: 1.6

+

Types and Values

@@ -719,10 +895,79 @@   + +

GST_AUDIO_BASE_SINK_SLAVE_CUSTOM

+ +

Use custom clock slaving algorithm (Since: 1.6)

+ +  +
+
+
+

enum GstAudioBaseSinkDiscontReason

+

Different possible reasons for discontinuities. This enum is useful for the custom +slave method.

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT

+

No discontinuity occurred

+
 

GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS

+

New caps are set, causing renegotiotion

+
 

GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH

+

Samples have been flushed

+
 

GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY

+

Sink was synchronized to the estimated latency (occurs during initialization)

+
 

GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT

+

Aligning buffers failed because the timestamps are too discontinuous

+
 

GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE

+

Audio output device experienced and recovered from an error but introduced latency in the process (see also gst_audio_base_sink_report_device_failure() +)

+
 
+
+

Since: 1.6

+

Property Details

@@ -803,7 +1048,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiobasesrc +gstaudiobasesrc: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -326,7 +326,6 @@

Returns

TRUE if src will provide a clock.

-


@@ -355,7 +354,6 @@

Returns

The current slave method used by src .

-


@@ -504,7 +502,7 @@

The “buffer-time” property

  “buffer-time”              gint64
-

Size of audio buffer in microseconds. This is the maximum amount of data that is buffered in the device and the maximum latency that the source reports.

+

Size of audio buffer in microseconds. This is the maximum amount of data that is buffered in the device and the maximum latency that the source reports. This value might be ignored by the element if necessary; see "actual-buffer-time".

Flags: Read / Write

Allowed values: >= 1

Default value: 200000

@@ -513,7 +511,7 @@

The “latency-time” property

  “latency-time”             gint64
-

The minimum amount of data to read in each iteration in microseconds. This is the minimum latency that the source reports.

+

The minimum amount of data to read in each iteration in microseconds. This is the minimum latency that the source reports. This value might be ignored by the element if necessary; see "actual-latency-time".

Flags: Read / Write

Allowed values: >= 1

Default value: 10000

@@ -541,7 +539,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiocdsrc +gstaudiocdsrc: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -221,7 +221,6 @@

Returns

FALSE on error, otherwise TRUE.

-

@@ -414,7 +413,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiochannels +gstaudiochannels: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -182,7 +182,6 @@

Returns

TRUE if the channel positions are valid and could be converted.

-


@@ -200,7 +199,10 @@ entries ensured by caller). If channel_mask is set to 0, it is considered as 'not present' for purpose -of conversion.

+of conversion. +A partially valid channel_mask + with less bits set than the number +of channels is considered valid.

Parameters

@@ -232,7 +234,6 @@

Returns

TRUE if channel and channel mask are valid and could be converted

-


@@ -272,7 +273,6 @@

Returns

TRUE if the channel positions are valid and reordering was successful.

-


@@ -320,7 +320,6 @@

Returns

TRUE if the channel positions are valid.

-


@@ -382,7 +381,6 @@

Returns

TRUE if the reordering was possible.

-


@@ -449,7 +447,6 @@

Returns

TRUE if the reordering was possible.

-


@@ -508,7 +505,6 @@

Returns

TRUE if the channel positions are valid and reordering is possible.

-

@@ -774,7 +770,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioclock +gstaudioclock: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -161,7 +161,6 @@

Returns

the current time or GST_CLOCK_TIME_NONE if the previous time should be used.

-


@@ -214,7 +213,6 @@

Returns

a new GstAudioClock casted to a GstClock.

-


@@ -251,7 +249,6 @@

Returns

time adjusted with the internal offset.

-


@@ -279,7 +276,6 @@

Returns

the time as reported by the time function of the audio clock

-


@@ -359,7 +355,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiodecoder +gstaudiodecoder: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -275,6 +275,14 @@ gst_audio_decoder_merge_tags () + + + +
+GstCaps * + +gst_audio_decoder_proxy_getcaps () +
@@ -611,7 +619,6 @@

Returns

a GstFlowReturn that should be escalated to caller (of caller)

-


@@ -647,7 +654,6 @@

Returns

TRUE on success.

-


@@ -676,7 +682,6 @@

Returns

TRUE if the negotiation succeeded, else FALSE.

-


@@ -784,7 +789,6 @@

Returns

a GstAudioInfo describing the input audio format

-


@@ -810,7 +814,6 @@

Returns

currently configured byte to time conversion setting

-


@@ -836,7 +839,6 @@

Returns

currently configured decoder delay

-


@@ -864,7 +866,6 @@

Returns

TRUE if drainable handling is enabled.

MT safe.

-


@@ -929,7 +930,6 @@

Returns

currently configured decoder tolerated error count.

-


@@ -957,7 +957,6 @@

Returns

aggregation latency.

MT safe.

-


@@ -985,7 +984,6 @@

Returns

TRUE if required format handling is enabled.

MT safe.

-


@@ -1049,7 +1047,6 @@

Returns

TRUE if packet loss concealment is enabled.

MT safe.

-


@@ -1075,7 +1072,6 @@

Returns

currently configured plc handling

-


@@ -1103,7 +1099,6 @@

Returns

decoder audio jitter tolerance threshold.

MT safe.

-


@@ -1406,15 +1401,13 @@ gst_audio_decoder_merge_tags (GstAudioDecoder *dec, const GstTagList *tags, GstTagMergeMode mode); -

Adds tags to so-called pending tags, which will be processed -before pushing out data downstream.

+

Sets the audio decoder tags and how they should be merged with any +upstream stream tags. This will override any tags previously-set +with gst_audio_decoder_merge_tags().

Note that this is provided for convenience, and the subclass is -not required to use this and can still do tag handling on its own, -although it should be aware that baseclass already takes care -of the usual CODEC/AUDIO_CODEC tags.

-

MT safe.

+not required to use this and can still do tag handling on its own.

-

Parameters

+

Parameters

@@ -1429,18 +1422,64 @@ - - + + - +

tags

a GstTagList to merge

 

a GstTagList to merge, or NULL.

[allow-none]

mode

the GstTagMergeMode to use

the GstTagMergeMode to use, usually GST_TAG_MERGE_REPLACE

 
+
+
+

gst_audio_decoder_proxy_getcaps ()

+
GstCaps *
+gst_audio_decoder_proxy_getcaps (GstAudioDecoder *decoder,
+                                 GstCaps *caps,
+                                 GstCaps *filter);
+

Returns caps that express caps + (or sink template caps if caps + == NULL) +restricted to rate/channels/... combinations supported by downstream +elements.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

decoder

a GstAudioDecoder

 

caps

initial caps.

[allow-none]

filter

filter caps.

[allow-none]
+
+
+

Returns

+

a GstCaps owned by caller.

+

[transfer full]

+
+

Since: 1.6

+

Types and Values

@@ -1491,6 +1530,16 @@ gboolean (*propose_allocation) (GstAudioDecoder *dec, GstQuery * query); + + gboolean (*sink_query) (GstAudioDecoder *dec, GstQuery *query); + + gboolean (*src_query) (GstAudioDecoder *dec, GstQuery *query); + + GstCaps * (*getcaps) (GstAudioDecoder * dec, + GstCaps * filter); + + gboolean (*transform_meta) (GstAudioDecoder *enc, GstBuffer *outbuf, + GstMeta *meta, GstBuffer *inbuf); };

Subclasses can override any of the available virtual methods or not, as @@ -1621,6 +1670,42 @@ invoke the default handler.

  + +

sink_query ()

+

Optional. +Query handler on the sink pad. This function should +return TRUE if the query could be performed. Subclasses +should chain up to the parent implementation to invoke the +default handler. Since 1.6

+  + + +

src_query ()

+

Optional. +Query handler on the source pad. This function should +return TRUE if the query could be performed. Subclasses +should chain up to the parent implementation to invoke the +default handler. Since 1.6

+  + + +

getcaps ()

+

Optional. +Allows for a custom sink getcaps implementation. +If not implemented, +default returns gst_audio_decoder_proxy_getcaps +applied to sink template caps.

+  + + +

transform_meta ()

+

Optional. Transform the metadata on the input buffer to the +output buffer. By default this method copies all meta without +tags and meta with only the "audio" tag. subclasses can +implement this method and return TRUE if the metadata is to be +copied. Since 1.6

+  +
@@ -1674,7 +1759,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioencoder +gstaudioencoder: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -592,7 +592,6 @@

Returns

a GstFlowReturn that should be escalated to caller (of caller)

-


@@ -710,7 +709,6 @@

Returns

TRUE if the negotiation succeeded, else FALSE.

-


@@ -736,7 +734,6 @@

Returns

a GstAudioInfo describing the input audio format

-


@@ -764,7 +761,6 @@

Returns

TRUE if drainable handling is enabled.

MT safe.

-


@@ -790,7 +786,6 @@

Returns

currently configured maximum handled frames

-


@@ -817,7 +812,6 @@

Returns

currently minimum requested samples per frame

-


@@ -844,7 +838,6 @@

Returns

currently maximum requested samples per frame

-


@@ -872,7 +865,6 @@

Returns

TRUE if hard minimum handling is enabled.

MT safe.

-


@@ -943,7 +935,6 @@

Returns

currently configured encoder lookahead

-


@@ -971,7 +962,6 @@

Returns

TRUE if granule marking is enabled.

MT safe.

-


@@ -1000,7 +990,6 @@

Returns

TRUE if perfect timestamp setting enabled.

MT safe.

-


@@ -1028,7 +1017,6 @@

Returns

encoder audio jitter tolerance threshold.

MT safe.

-


@@ -1059,21 +1047,21 @@

caps

-

initial caps

-  +

initial caps.

+[allow-none]

filter

-

filter caps

-  +

filter caps.

+[allow-none]

Returns

-

a GstCaps owned by caller

-

+

a GstCaps owned by caller.

+

[transfer full]


@@ -1450,12 +1438,11 @@ gst_audio_encoder_merge_tags (GstAudioEncoder *enc, const GstTagList *tags, GstTagMergeMode mode); -

Adds tags to so-called pending tags, which will be processed -before pushing out data downstream.

+

Sets the audio encoder tags and how they should be merged with any +upstream stream tags. This will override any tags previously-set +with gst_audio_encoder_merge_tags().

Note that this is provided for convenience, and the subclass is -not required to use this and can still do tag handling on its own, -although it should be aware that baseclass already takes care -of the usual CODEC/AUDIO_CODEC tags.

+not required to use this and can still do tag handling on its own.

MT safe.

Parameters

@@ -1473,12 +1460,13 @@

tags

-

a GstTagList to merge

-  +

a GstTagList to merge, or NULL to unset +previously-set tags.

+[allow-none]

mode

-

the GstTagMergeMode to use

+

the GstTagMergeMode to use, usually GST_TAG_MERGE_REPLACE

  @@ -1534,6 +1522,15 @@ gboolean (*propose_allocation) (GstAudioEncoder * enc, GstQuery * query); + + gboolean (*transform_meta) (GstAudioEncoder *enc, GstBuffer *outbuf, + GstMeta *meta, GstBuffer *inbuf); + + gboolean (*sink_query) (GstAudioEncoder *encoder, + GstQuery *query); + + gboolean (*src_query) (GstAudioEncoder *encoder, + GstQuery *query); };

Subclasses can override any of the available virtual methods or not, as @@ -1662,6 +1659,33 @@ invoke the default handler.

  + +

transform_meta ()

+

Optional. Transform the metadata on the input buffer to the +output buffer. By default this method copies all meta without +tags and meta with only the "audio" tag. subclasses can +implement this method and return TRUE if the metadata is to be +copied. Since 1.6

+  + + +

sink_query ()

+

Optional. +Query handler on the sink pad. This function should +return TRUE if the query could be performed. Subclasses +should chain up to the parent implementation to invoke the +default handler. Since 1.6

+  + + +

src_query ()

+

Optional. +Query handler on the source pad. This function should +return TRUE if the query could be performed. Subclasses +should chain up to the parent implementation to invoke the +default handler. Since 1.6

+  +
@@ -1722,7 +1746,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiofilter +gstaudiofilter: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -180,7 +180,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudio.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudio.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudio.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudio.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudio +gstaudio: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -626,7 +626,6 @@

Returns

TRUE if caps could be parsed

-


@@ -714,7 +713,6 @@

Returns

TRUE if the conversion was successful.

-


@@ -743,7 +741,6 @@

Returns

The GstAudioFormatInfo for format .

-


@@ -770,7 +767,6 @@

Returns

a new GstAudioInfo. free with gst_audio_info_free.

-


@@ -806,7 +802,6 @@

Returns

a new GstAudioInfo. free with gst_audio_info_free().

-


@@ -896,9 +891,8 @@

TRUE if info and other are equal, else FALSE.

-

-

Since 1.2

+

Since: 1.2


@@ -946,7 +940,6 @@

Returns

a GstAudioFormat or GST_AUDIO_FORMAT_UNKNOWN when no audio format exists with the given parameters.

-


@@ -1016,7 +1009,6 @@

the GstAudioFormat for format or GST_AUDIO_FORMAT_UNKNOWN when the string is not a known format.

-


@@ -1361,7 +1353,7 @@

segment

-

Segment in GST_FORMAT_TIME or GST_FORMAT_DEFAULT to which +

Segment in GST_FORMAT_TIME or GST_FORMAT_DEFAULT to which the buffer should be clipped.

  @@ -2030,7 +2022,7 @@
#define GST_META_TAG_AUDIO_STR "audio"
 

This metadata is relevant for audio streams.

-

Since 1.2

+

Since: 1.2


@@ -2038,7 +2030,7 @@
#define GST_META_TAG_AUDIO_CHANNELS_STR "channels"
 

This metadata stays relevant as long as channels are unchanged.

-

Since 1.2

+

Since: 1.2


@@ -2084,7 +2076,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioiec61937 +gstaudioiec61937: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -97,7 +97,6 @@

the size or 0 if the given type is not supported or cannot be payloaded.

-


@@ -168,7 +167,6 @@

Returns

transfer-full: TRUE if the payloading was successful, FALSE otherwise.

-

@@ -177,7 +175,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiometa +gstaudiometa: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -156,8 +156,8 @@

Returns

the GstAudioDownmixMeta on buffer -.

-

+.

+

[transfer none]


@@ -208,8 +208,8 @@

Returns

the GstAudioDownmixMeta on buffer -.

-

+.

+

[transfer none]

@@ -284,7 +284,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioringbuffer +gstaudioringbuffer: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -502,7 +502,6 @@

Returns

TRUE if the device could be acquired, FALSE on error.

MT safe.

-


@@ -530,7 +529,6 @@

Returns

TRUE if the device could be released, FALSE on error.

MT safe.

-


@@ -558,7 +556,6 @@

Returns

TRUE if the ringbuffer is acquired, FALSE on error.

MT safe.

-


@@ -596,7 +593,6 @@

Returns

TRUE if the device could be activated in the requested mode, FALSE on error.

-


@@ -625,7 +621,6 @@

Returns

TRUE if the device is active.

-


@@ -653,7 +648,6 @@

Returns

TRUE if the device could be started, FALSE on error.

MT safe.

-


@@ -681,7 +675,6 @@

Returns

TRUE if the device could be paused, FALSE on error.

MT safe.

-


@@ -709,7 +702,6 @@

Returns

TRUE if the device could be stopped, FALSE on error.

MT safe.

-


@@ -744,7 +736,6 @@

Returns

The number of samples queued in the audio device.

MT safe.

-


@@ -774,7 +765,6 @@

Returns

The number of samples processed by the ringbuffer.

MT safe.

-


@@ -901,7 +891,6 @@ when buf was interrupted with a flush or stop.

-


@@ -959,7 +948,6 @@

Returns

TRUE if the conversion succeeded.

-


@@ -1009,7 +997,6 @@

Returns

FALSE if the buffer is not started.

MT safe.

-


@@ -1075,7 +1062,6 @@

The number of samples read from the ringbuffer or -1 on error.

MT safe.

-


@@ -1192,7 +1178,6 @@

Returns

TRUE if the device could be closed, FALSE on error.

MT safe.

-


@@ -1222,7 +1207,6 @@

Returns

TRUE if the device could be opened, FALSE on error.

MT safe.

-


@@ -1250,7 +1234,6 @@

Returns

TRUE if the device was open, FALSE if it was closed.

MT safe.

-


@@ -1319,7 +1302,6 @@

Returns

TRUE if the caps could be parsed.

-


@@ -1379,7 +1361,6 @@

Returns

TRUE if the device is flushing.

-


@@ -1608,7 +1589,7 @@

delay ()

-

get number of samples queued in device

+

get number of frames queued in device

  @@ -1871,7 +1852,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiosink +gstaudiosink: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -114,6 +114,7 @@

Functions

+

Types and Values

@@ -140,7 +141,7 @@ gboolean (*close) (GstAudioSink *sink); /* write samples to the device */ gint (*write) (GstAudioSink *sink, gpointer data, guint length); - /* get number of samples queued in the device */ + /* get number of frames queued in the device */ guint (*delay) (GstAudioSink *sink); /* reset the audio device, unblock from a write */ void (*reset) (GstAudioSink *sink); @@ -189,7 +190,7 @@

delay ()

-

Return how many samples are still in the device. This is used to +

Return how many frames are still in the device. This is used to drive the synchronisation.

  @@ -210,7 +211,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiosrc +gstaudiosrc: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -115,6 +115,7 @@

Functions

+

Types and Values

@@ -142,7 +143,7 @@ /* read samples from the device */ guint (*read) (GstAudioSrc *src, gpointer data, guint length, GstClockTime *timestamp); - /* get number of samples queued in the device */ + /* get number of frames queued in the device */ guint (*delay) (GstAudioSrc *src); /* reset the audio device, unblock from a write */ void (*reset) (GstAudioSrc *src); @@ -191,7 +192,7 @@

delay ()

-

the number of samples queued in the device

+

the number of frames queued in the device

  @@ -210,7 +211,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstcolorbalancechannel +gstcolorbalancechannel: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -45,7 +45,7 @@ void value-changed -Run Last +Run Last @@ -82,7 +82,7 @@

Description

-

The GstColorBalanceChannel object represents a parameter +

The GstColorBalanceChannel object represents a parameter for modifying the color balance implemented by an element providing the GstColorBalance interface. For example, Hue or Saturation.

@@ -90,6 +90,7 @@

Functions

+

Types and Values

@@ -102,7 +103,7 @@ };
-

Members

+

Members

@@ -142,7 +143,7 @@

Color-balance channel class.

-

Members

+

Members

@@ -175,7 +176,7 @@ gpointer user_data)

Fired when the value of the indicated channel has changed.

-

Parameters

+

Parameters

@@ -201,12 +202,11 @@
-

Flags: Run Last

+

Flags: Run Last

+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstcolorbalance +gstcolorbalance: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -94,7 +94,7 @@ void value-changed -Run Last +Run Last @@ -135,7 +135,7 @@

Description

-

+

This interface is implemented by elements which can perform some color balance operation on video frames they process. For example, modifying the brightness, contrast, hue or saturation. @@ -153,7 +153,7 @@ gst_color_balance_list_channels (GstColorBalance *balance);

Retrieve a list of the available channels.

-

Parameters

+

Parameters

@@ -168,7 +168,7 @@
-

Returns

+

Returns

A GList containing pointers to GstColorBalanceChannel objects. The list is owned by the GstColorBalance @@ -188,7 +188,7 @@ GstColorBalanceChannel.max_value members of the GstColorBalanceChannel object.

-

Parameters

+

Parameters

@@ -210,9 +210,8 @@
-

Returns

+

Returns

The current value of the channel.

-


@@ -228,7 +227,7 @@ GstColorBalanceChannel.max_value members of the GstColorBalanceChannel object.

-

Parameters

+

Parameters

@@ -267,7 +266,7 @@ instance, and the “value-changed” signal on the channel object.

-

Parameters

+

Parameters

@@ -301,7 +300,7 @@ gst_color_balance_get_balance_type (GstColorBalance *balance);

Get the GstColorBalanceType of this implementation.

-

Parameters

+

Parameters

@@ -316,9 +315,8 @@
-

Returns

+

Returns

A the GstColorBalanceType.

-

@@ -352,7 +350,7 @@

Color-balance interface.

-

Members

+

Members

@@ -382,8 +380,8 @@ - - + + @@ -402,7 +400,7 @@ hardware implementations (such as those provided by xvimagesink) are preferred.

-

Members

+

Members

get_balance_type ()

  

implementation type

 

value_changed ()

@@ -442,7 +440,7 @@ gpointer user_data)

Fired when the value of the indicated channel has changed.

-

Parameters

+

Parameters

@@ -473,12 +471,11 @@
-

Flags: Run Last

+

Flags: Run Last

+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstdiscoverer +gstdiscoverer: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -164,6 +164,22 @@ +GVariant * + + +gst_discoverer_info_to_variant () + + + + +GstDiscovererInfo * + + +gst_discoverer_info_from_variant () + + + + GstCaps * @@ -468,22 +484,22 @@ void discovered -Run Last +Run Last void finished -Run Last +Run Last void source-setup -Run Last +Run Last void starting -Run Last +Run Last @@ -509,6 +525,10 @@ GstDiscovererResult +enum +GstDiscovererSerializeFlags + +   GstDiscovererStreamInfo @@ -734,7 +754,6 @@

TRUE if the uri was successfully appended to the list of pending uris, else FALSE

-


@@ -760,7 +779,6 @@

Returns

the duration of the URI in GstClockTime (nanoseconds).

-


@@ -771,7 +789,7 @@

gst_discoverer_info_get_misc is deprecated and should not be used in newly-written code.

This functions is deprecated since version 1.4, use -gst_discoverer_info_get_missing_elements_installer_details

+gst_discoverer_info_get_missing_elements_installer_details

Parameters

@@ -820,7 +838,6 @@

Returns

the result of the discovery as a GstDiscovererResult.

-


@@ -987,13 +1004,12 @@

Returns

the whether the URI is seekable.

-


gst_discoverer_info_ref()

-
#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info))
+
#define gst_discoverer_info_ref(info) (g_object_ref((GObject*)info))
 

Increments the reference count of info .

@@ -1015,7 +1031,6 @@

Returns

the same GstDiscovererInfo object

-


@@ -1043,11 +1058,82 @@
+

gst_discoverer_info_to_variant ()

+
GVariant *
+gst_discoverer_info_to_variant (GstDiscovererInfo *info,
+                                GstDiscovererSerializeFlags flags);
+

Serializes info + to a GVariant that can be parsed again +through gst_discoverer_info_from_variant().

+

Note that any GstToc (s) that might have been discovered will not be serialized +for now.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

info

A GstDiscovererInfo

 

flags

A combination of GstDiscovererSerializeFlags to specify +what needs to be serialized.

 
+
+
+

Returns

+

A newly-allocated GVariant representing info +.

+

[transfer full]

+
+

Since: 1.6

+
+
+
+

gst_discoverer_info_from_variant ()

+
GstDiscovererInfo *
+gst_discoverer_info_from_variant (GVariant *variant);
+

Parses a GVariant as produced by gst_discoverer_info_to_variant() +back to a GstDiscovererInfo.

+
+

Parameters

+
+++++ + + + + + +

variant

A GVariant to deserialize into a GstDiscovererInfo.

 
+
+
+

Returns

+

A newly-allocated GstDiscovererInfo.

+

[transfer full]

+
+

Since: 1.6

+
+
+

gst_discoverer_stream_info_get_caps ()

GstCaps *
 gst_discoverer_stream_info_get_caps (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1062,7 +1148,7 @@
-

Returns

+

Returns

the GstCaps of the stream. Unref with gst_caps_unref after usage.

[transfer full]

@@ -1076,10 +1162,10 @@

gst_discoverer_stream_info_get_misc is deprecated and should not be used in newly-written code.

This functions is deprecated since version 1.4, use -gst_discoverer_stream_get_missing_elements_installer_details

+gst_discoverer_info_get_missing_elements_installer_details

-

Parameters

+

Parameters

@@ -1094,7 +1180,7 @@
-

Returns

+

Returns

additional information regarding the stream (for example codec version, profile, etc..). If you wish to use the GstStructure after the life-time of info @@ -1108,7 +1194,7 @@

GstDiscovererStreamInfo *
 gst_discoverer_stream_info_get_next (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1123,7 +1209,7 @@
-

Returns

+

Returns

the next GstDiscovererStreamInfo in a chain. NULL for final streams. Unref with gst_discoverer_stream_info_unref after usage.

@@ -1137,7 +1223,7 @@ gst_discoverer_stream_info_get_previous (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1152,7 +1238,7 @@
-

Returns

+

Returns

the previous GstDiscovererStreamInfo in a chain. NULL for starting points. Unref with gst_discoverer_stream_info_unref after usage.

@@ -1165,7 +1251,7 @@
const GstTagList *
 gst_discoverer_stream_info_get_tags (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1180,7 +1266,7 @@
-

Returns

+

Returns

the tags contained in this stream. If you wish to use the tags after the life-time of info you will need to copy them.

@@ -1193,7 +1279,7 @@
const GstToc *
 gst_discoverer_stream_info_get_toc (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1208,7 +1294,7 @@
-

Returns

+

Returns

the TOC contained in this stream. If you wish to use the TOC after the life-time of info you will need to copy it.

@@ -1222,7 +1308,7 @@ gst_discoverer_stream_info_get_stream_id (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1237,7 +1323,7 @@
-

Returns

+

Returns

the stream ID of this stream. If you wish to use the stream ID after the life-time of info you will need to copy it.

@@ -1252,7 +1338,7 @@

Increments the reference count of info .

-

Parameters

+

Parameters

@@ -1267,9 +1353,8 @@
-

Returns

+

Returns

the same GstDiscovererStreamInfo object

-


@@ -1280,7 +1365,7 @@

Decrements the reference count of info .

-

Parameters

+

Parameters

@@ -1303,7 +1388,7 @@

Decrements the reference count of all contained GstDiscovererStreamInfo and fress the GList.

-

Parameters

+

Parameters

@@ -1325,7 +1410,7 @@ gst_discoverer_stream_info_get_stream_type_nick (GstDiscovererStreamInfo *info);
-

Parameters

+

Parameters

@@ -1340,11 +1425,10 @@
-

Returns

+

Returns

a human readable name for the stream type of the given info (ex : "audio", "container",...).

-


@@ -1355,7 +1439,7 @@ (const GstDiscovererInfo *info);

Get the installer details for missing elements

-

Parameters

+

Parameters

@@ -1371,14 +1455,16 @@
-

Returns

+

Returns

An array of strings containing informations about how to install the various missing elements for info -to be usable. Free with g_strfreev().

-

[transfer full][array zero-terminated=1]

+to be usable. If you wish to use the strings after the life-time +of info +, you will need to copy them.

+

[transfer none][array zero-terminated=1]

-

Since 1.4

+

Since: 1.4


@@ -1388,7 +1474,7 @@

Finds all the GstDiscovererAudioInfo contained in info

-

Parameters

+

Parameters

@@ -1403,7 +1489,7 @@
-

Returns

+

Returns

A GList of matching GstDiscovererStreamInfo. The caller should free it with gst_discoverer_stream_info_list_free().

@@ -1419,7 +1505,7 @@

Finds all the GstDiscovererContainerInfo contained in info

-

Parameters

+

Parameters

@@ -1434,7 +1520,7 @@
-

Returns

+

Returns

A GList of matching GstDiscovererStreamInfo. The caller should free it with gst_discoverer_stream_info_list_free().

@@ -1452,7 +1538,7 @@ given streamtype .

-

Parameters

+

Parameters

@@ -1474,7 +1560,7 @@
-

Returns

+

Returns

A GList of matching GstDiscovererStreamInfo. The caller should free it with gst_discoverer_stream_info_list_free().

@@ -1490,7 +1576,7 @@

Finds all the GstDiscovererSubtitleInfo contained in info

-

Parameters

+

Parameters

@@ -1505,7 +1591,7 @@
-

Returns

+

Returns

A GList of matching GstDiscovererStreamInfo. The caller should free it with gst_discoverer_stream_info_list_free().

@@ -1520,7 +1606,7 @@

Finds all the GstDiscovererVideoInfo contained in info

-

Parameters

+

Parameters

@@ -1535,7 +1621,7 @@
-

Returns

+

Returns

A GList of matching GstDiscovererStreamInfo. The caller should free it with gst_discoverer_stream_info_list_free().

@@ -1548,7 +1634,7 @@
guint
 gst_discoverer_audio_info_get_bitrate (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1563,9 +1649,8 @@
-

Returns

+

Returns

the average or nominal bitrate of the stream in bits/second.

-


@@ -1575,7 +1660,7 @@ gst_discoverer_audio_info_get_channels (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1590,9 +1675,8 @@
-

Returns

+

Returns

the number of channels in the stream.

-


@@ -1601,7 +1685,7 @@
guint
 gst_discoverer_audio_info_get_depth (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1616,9 +1700,8 @@
-

Returns

+

Returns

the number of bits used per sample in each channel.

-


@@ -1628,7 +1711,7 @@ gst_discoverer_audio_info_get_language (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1643,9 +1726,8 @@
-

Returns

+

Returns

the language of the stream, or NULL if unknown.

-


@@ -1655,7 +1737,7 @@ gst_discoverer_audio_info_get_max_bitrate (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1670,9 +1752,8 @@
-

Returns

+

Returns

the maximum bitrate of the stream in bits/second.

-


@@ -1682,7 +1763,7 @@ gst_discoverer_audio_info_get_sample_rate (const GstDiscovererAudioInfo *info);
-

Parameters

+

Parameters

@@ -1697,9 +1778,8 @@
-

Returns

+

Returns

the sample rate of the stream in Hertz.

-


@@ -1709,7 +1789,7 @@ gst_discoverer_container_info_get_streams (GstDiscovererContainerInfo *info);
-

Parameters

+

Parameters

@@ -1724,7 +1804,7 @@
-

Returns

+

Returns

the list of GstDiscovererStreamInfo this container stream offers. Free with gst_discoverer_stream_info_list_free() after usage.

@@ -1738,7 +1818,7 @@ gst_discoverer_subtitle_info_get_language (const GstDiscovererSubtitleInfo *info);
-

Parameters

+

Parameters

@@ -1753,9 +1833,8 @@
-

Returns

+

Returns

the language of the stream, or NULL if unknown.

-


@@ -1764,7 +1843,7 @@
guint
 gst_discoverer_video_info_get_bitrate (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1779,9 +1858,8 @@
-

Returns

+

Returns

the average or nominal bitrate of the video stream in bits/second.

-


@@ -1790,7 +1868,7 @@
guint
 gst_discoverer_video_info_get_depth (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1805,9 +1883,8 @@
-

Returns

+

Returns

the depth in bits of the video stream.

-


@@ -1817,7 +1894,7 @@ gst_discoverer_video_info_get_framerate_denom (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1832,9 +1909,8 @@
-

Returns

+

Returns

the framerate of the video stream (denominator).

-


@@ -1844,7 +1920,7 @@ gst_discoverer_video_info_get_framerate_num (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1859,9 +1935,8 @@
-

Returns

+

Returns

the framerate of the video stream (numerator).

-


@@ -1870,7 +1945,7 @@
guint
 gst_discoverer_video_info_get_height (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1885,9 +1960,8 @@
-

Returns

+

Returns

the height of the video stream in pixels.

-


@@ -1897,7 +1971,7 @@ gst_discoverer_video_info_is_interlaced (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1912,9 +1986,8 @@
-

Returns

+

Returns

TRUE if the stream is interlaced, else FALSE.

-


@@ -1923,7 +1996,7 @@
gboolean
 gst_discoverer_video_info_is_image (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1938,10 +2011,9 @@
-

Returns

+

Returns

TRUE if the video stream corresponds to an image (i.e. only contains one frame).

-


@@ -1951,7 +2023,7 @@ gst_discoverer_video_info_get_max_bitrate (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1966,9 +2038,8 @@
-

Returns

+

Returns

the maximum bitrate of the video stream in bits/second.

-


@@ -1978,7 +2049,7 @@ gst_discoverer_video_info_get_par_denom (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -1993,9 +2064,8 @@
-

Returns

+

Returns

the Pixel Aspect Ratio (PAR) of the video stream (denominator).

-


@@ -2004,7 +2074,7 @@
guint
 gst_discoverer_video_info_get_par_num (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -2019,9 +2089,8 @@
-

Returns

+

Returns

the Pixel Aspect Ratio (PAR) of the video stream (numerator).

-


@@ -2030,7 +2099,7 @@
guint
 gst_discoverer_video_info_get_width (const GstDiscovererVideoInfo *info);
-

Parameters

+

Parameters

@@ -2045,9 +2114,8 @@
-

Returns

+

Returns

the width of the video stream in pixels.

-

@@ -2125,6 +2193,62 @@
+

enum GstDiscovererSerializeFlags

+

You can use these flags to control what is serialized by +gst_discoverer_info_to_variant()

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

GST_DISCOVERER_SERIALIZE_BASIC

+

Serialize only basic information, excluding +caps, tags and miscellaneous information

+
 

GST_DISCOVERER_SERIALIZE_CAPS

+

Serialize the caps for each stream

+
 

GST_DISCOVERER_SERIALIZE_TAGS

+

Serialize the tags for each stream

+
 

GST_DISCOVERER_SERIALIZE_MISC

+

Serialize miscellaneous information for each stream

+
 

GST_DISCOVERER_SERIALIZE_ALL

+

Serialize all the available info, including +caps, tags and miscellaneous information

+
 
+
+

Since: 1.6

+
+
+

GstDiscovererStreamInfo

typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;

Base structure for information concerning a media stream. Depending on the @@ -2230,7 +2354,7 @@

-

Flags: Run Last

+

Flags: Run Last


@@ -2261,7 +2385,7 @@
-

Flags: Run Last

+

Flags: Run Last


@@ -2303,7 +2427,7 @@
-

Flags: Run Last

+

Flags: Run Last


@@ -2334,12 +2458,11 @@
-

Flags: Run Last

+

Flags: Run Last

+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfftf32.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfftf32.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfftf32.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfftf32.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstfftf32 +gstfftf32: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -146,8 +146,9 @@ must be even and to get the best performance a product of 2, 3 and 5. To get the next number with this characteristics use gst_fft_next_fast_length().

+

[skip]

-

Parameters

+

Parameters

@@ -169,9 +170,8 @@
-

Returns

+

Returns

a new GstFFTF32 instance.

-


@@ -370,7 +370,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfftf64.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfftf64.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfftf64.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfftf64.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstfftf64 +gstfftf64: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -146,8 +146,9 @@ must be even and to get the best performance a product of 2, 3 and 5. To get the next number with this characteristics use gst_fft_next_fast_length().

+

[skip]

-

Parameters

+

Parameters

@@ -169,9 +170,8 @@
-

Returns

+

Returns

a new GstFFTF64 instance.

-


@@ -370,7 +370,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfft.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfft.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstfft.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstfft.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstfft +gstfft: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -100,7 +100,6 @@

Returns

the next fast FFT length.

-

@@ -160,7 +159,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstffts16.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstffts16.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstffts16.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstffts16.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstffts16 +gstffts16: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -146,8 +146,9 @@ must be even and to get the best performance a product of 2, 3 and 5. To get the next number with this characteristics use gst_fft_next_fast_length().

+

[skip]

-

Parameters

+

Parameters

@@ -169,9 +170,8 @@
-

Returns

+

Returns

a new GstFFTS16 instance.

-


@@ -370,7 +370,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstffts32.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstffts32.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstffts32.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstffts32.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstffts32 +gstffts32: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -146,8 +146,9 @@ must be even and to get the best performance a product of 2, 3 and 5. To get the next number with this characteristics use gst_fft_next_fast_length().

+

[skip]

-

Parameters

+

Parameters

@@ -169,9 +170,8 @@
-

Returns

+

Returns

a new GstFFTS32 instance.

-


@@ -370,7 +370,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstmikey.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstmikey.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstmikey.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstmikey.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstmikey +gstmikey: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -73,6 +73,30 @@ +GstMIKEYMessage * + + +gst_mikey_message_copy () + + + + +GstMIKEYMessage * + + +gst_mikey_message_ref () + + + + +void + + +gst_mikey_message_unref () + + + + gboolean @@ -201,6 +225,54 @@ gboolean +gst_mikey_payload_key_data_set_interval () + + + + +gboolean + + +gst_mikey_payload_key_data_set_key () + + + + +gboolean + + +gst_mikey_payload_key_data_set_salt () + + + + +gboolean + + +gst_mikey_payload_key_data_set_spi () + + + + +GstMIKEYPayload * + + +gst_mikey_payload_ref () + + + + +void + + +gst_mikey_payload_unref () + + + + +gboolean + + gst_mikey_payload_kemac_set () @@ -209,6 +281,37 @@ gboolean +gst_mikey_payload_kemac_add_sub () + + + + +guint + + +gst_mikey_payload_kemac_get_n_sub () + + + +const GstMIKEYPayload * + + +gst_mikey_payload_kemac_get_sub () + + + + +gboolean + + +gst_mikey_payload_kemac_remove_sub () + + + + +gboolean + + gst_mikey_payload_pke_set () @@ -425,9 +528,8 @@

Returns

a new GstMIKEYMessage on success

-

-

Since 1.4

+

Since: 1.4


@@ -468,9 +570,8 @@

Returns

a new GstMIKEYMessage

-

-

Since 1.4

+

Since: 1.4


@@ -523,9 +624,8 @@

a GstMIKEYMessage on success or NULL when parsing failed and error will be set.

-

-

Since 1.4

+

Since: 1.4


@@ -567,9 +667,89 @@

Returns

a new GBytes for msg .

-

-

Since 1.4

+

Since: 1.4

+ +
+
+

gst_mikey_message_copy ()

+
GstMIKEYMessage *
+gst_mikey_message_copy (const GstMIKEYMessage *message);
+

Create a copy of the given message.

+
+

Parameters

+
+++++ + + + + + +

message

a GstMIKEYMessage.

 
+
+
+

Returns

+

a new copy of message +.

+

[transfer full]

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_ref ()

+
GstMIKEYMessage *
+gst_mikey_message_ref (GstMIKEYMessage *message);
+

Increase the refcount of this message.

+
+

Parameters

+
+++++ + + + + + +

message

The message to refcount

 
+
+
+

Returns

+

message +(for convenience when doing assignments).

+

[transfer full]

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_unref ()

+
void
+gst_mikey_message_unref (GstMIKEYMessage *message);
+

Decrease the refcount of an message, freeing it if the refcount reaches 0.

+
+

Parameters

+
+++++ + + + + + +

message

the message to refcount.

[transfer full]
+
+

Since: 1.4


@@ -585,7 +765,7 @@

Set the information in msg .

-

Parameters

+

Parameters

@@ -632,11 +812,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -646,7 +825,7 @@

Get the number of crypto sessions in msg .

-

Parameters

+

Parameters

@@ -661,11 +840,10 @@
-

Returns

+

Returns

the number of crypto sessions

-

-

Since 1.4

+

Since: 1.4


@@ -677,7 +855,7 @@ at idx .

-

Parameters

+

Parameters

@@ -699,11 +877,10 @@
-

Returns

+

Returns

a GstMIKEYMapSRTP

-

-

Since 1.4

+

Since: 1.4


@@ -718,7 +895,7 @@

When idx is -1, the policy will be appended.

-

Parameters

+

Parameters

@@ -745,11 +922,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -760,7 +936,7 @@

Remove the SRTP policy at idx .

-

Parameters

+

Parameters

@@ -782,11 +958,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -800,7 +975,7 @@ with map .

-

Parameters

+

Parameters

@@ -827,11 +1002,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -844,7 +1018,7 @@

Add a Crypto policy for SRTP to msg .

-

Parameters

+

Parameters

@@ -877,11 +1051,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -891,7 +1064,7 @@

Get the number of payloads in msg .

-

Parameters

+

Parameters

@@ -906,12 +1079,11 @@
-

Returns

+

Returns

the number of payloads in msg

-

-

Since 1.4

+

Since: 1.4


@@ -923,7 +1095,7 @@ in msg

-

Parameters

+

Parameters

@@ -945,14 +1117,14 @@
-

Returns

+

Returns

the GstMIKEYPayload at idx . The payload remains valid for as long as it is part of msg .

[transfer none]

-

Since 1.4

+

Since: 1.4


@@ -966,7 +1138,335 @@ in msg .

-

Parameters

+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstMIKEYMessage

 

type

a GstMIKEYPayloadType

 

nth

payload to find

 
+
+
+

Returns

+

the nth +GstMIKEYPayload of type +.

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_insert_payload ()

+
gboolean
+gst_mikey_message_insert_payload (GstMIKEYMessage *msg,
+                                  guint idx,
+                                  GstMIKEYPayload *payload);
+

Insert the payload + at index idx + in msg +. If idx + is -1, the payload +will be appended to msg +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstMIKEYMessage

 

idx

an index

 

payload

a GstMIKEYPayload.

[transfer full]
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_remove_payload ()

+
gboolean
+gst_mikey_message_remove_payload (GstMIKEYMessage *msg,
+                                  guint idx);
+

Remove the payload in msg + at idx +

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

msg

a GstMIKEYMessage

 

idx

an index

 
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_replace_payload ()

+
gboolean
+gst_mikey_message_replace_payload (GstMIKEYMessage *msg,
+                                   guint idx,
+                                   GstMIKEYPayload *payload);
+

Replace the payload at idx + in msg + with payload +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstMIKEYMessage

 

idx

an index

 

payload

a GstMIKEYPayload.

[transfer full]
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.4

+
+
+
+

gst_mikey_message_add_payload ()

+
gboolean
+gst_mikey_message_add_payload (GstMIKEYMessage *msg,
+                               GstMIKEYPayload *payload);
+

Add a new payload to msg +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

msg

a GstMIKEYMessage

 

payload

a GstMIKEYPayload.

[transfer full]
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_new ()

+
GstMIKEYPayload *
+gst_mikey_payload_new (GstMIKEYPayloadType type);
+

Make a new GstMIKEYPayload with type +.

+
+

Parameters

+
+++++ + + + + + +

type

a GstMIKEYPayloadType

 
+
+
+

Returns

+

a new GstMIKEYPayload or NULL on failure.

+

[nullable]

+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_copy ()

+
GstMIKEYPayload *
+gst_mikey_payload_copy (const GstMIKEYPayload *payload);
+

Create a copy of the given payload.

+
+

Parameters

+
+++++ + + + + + +

payload

a GstMIKEYPayload.

 
+
+
+

Returns

+

a new copy of payload +.

+

[transfer full]

+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_key_data_set_interval ()

+
gboolean
+gst_mikey_payload_key_data_set_interval
+                               (GstMIKEYPayload *payload,
+                                guint8 vf_len,
+                                const guint8 *vf_data,
+                                guint8 vt_len,
+                                const guint8 *vt_data);
+

Set the key validity period in the GST_MIKEY_PT_KEY_DATA payload +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

payload

a GstMIKEYPayload

 

vf_len

the length of vf_data +

 

vf_data

the Valid From data.

[array length=vf_data]

vt_len

the length of vt_data +

 

vt_data

the Valid To data.

[array length=vt_len]
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_key_data_set_key ()

+
gboolean
+gst_mikey_payload_key_data_set_key (GstMIKEYPayload *payload,
+                                    GstMIKEYKeyDataType key_type,
+                                    guint16 key_len,
+                                    const guint8 *key_data);
+

Set key_len + bytes of key_data + of type key_type + as the key for the +GST_MIKEY_PT_KEY_DATA payload +.

+
+

Parameters

@@ -975,48 +1475,49 @@ - - + + - - + + - - + + + + + + +

msg

a GstMIKEYMessage

payload

a GstMIKEYPayload

 

type

a GstMIKEYPayloadType

key_type

a GstMIKEYKeyDataType

 

nth

payload to find

key_len

the length of key_data +

 

key_data

the key of type key_type +.

[array length=key_len]
-

Returns

-

the nth -GstMIKEYPayload of type -.

-

+

Returns

+

TRUE on success

-

Since 1.4

+

Since: 1.4


-

gst_mikey_message_insert_payload ()

+

gst_mikey_payload_key_data_set_salt ()

gboolean
-gst_mikey_message_insert_payload (GstMIKEYMessage *msg,
-                                  guint idx,
-                                  GstMIKEYPayload *payload);
-

Insert the payload - at index idx - in msg -. If idx - is -1, the payload -will be appended to msg -.

+gst_mikey_payload_key_data_set_salt (GstMIKEYPayload *payload, + guint16 salt_len, + const guint8 *salt_data); +

Set the salt key data. If salt_len + is 0 and salt_data + is NULL, the +salt data will be removed.

-

Parameters

+

Parameters

@@ -1025,41 +1526,41 @@ - - + + - - + + - - - + + +

msg

a GstMIKEYMessage

payload

a GstMIKEYPayload

 

idx

an index

salt_len

the length of salt_data +

 

payload

a GstMIKEYPayload.

[transfer full]

salt_data

the salt.

[array length=salt_len][allow-none]
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


-

gst_mikey_message_remove_payload ()

+

gst_mikey_payload_key_data_set_spi ()

gboolean
-gst_mikey_message_remove_payload (GstMIKEYMessage *msg,
-                                  guint idx);
-

Remove the payload in msg - at idx -

+gst_mikey_payload_key_data_set_spi (GstMIKEYPayload *payload, + guint8 spi_len, + const guint8 *spi_data); +

Set the SPI/MKI validity in the GST_MIKEY_PT_KEY_DATA payload +.

-

Parameters

+

Parameters

@@ -1068,38 +1569,94 @@ - - + + - - + + + + + + +

msg

a GstMIKEYMessage

payload

a GstMIKEYPayload

 

idx

an index

spi_len

the length of spi_data +

 

spi_data

the SPI/MKI data.

[array length=spi_len]
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


-

gst_mikey_message_replace_payload ()

+

gst_mikey_payload_ref ()

+
GstMIKEYPayload *
+gst_mikey_payload_ref (GstMIKEYPayload *payload);
+

Increase the refcount of this payload.

+
+

Parameters

+
+++++ + + + + + +

payload

The payload to refcount

 
+
+
+

Returns

+

payload +(for convenience when doing assignments).

+

[transfer full]

+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_unref ()

+
void
+gst_mikey_payload_unref (GstMIKEYPayload *payload);
+

Decrease the refcount of an payload, freeing it if the refcount reaches 0.

+
+

Parameters

+
+++++ + + + + + +

payload

the payload to refcount.

[transfer full]
+
+

Since: 1.4

+
+
+
+

gst_mikey_payload_kemac_set ()

gboolean
-gst_mikey_message_replace_payload (GstMIKEYMessage *msg,
-                                   guint idx,
-                                   GstMIKEYPayload *payload);
-

Replace the payload at idx - in msg - with payload -.

+gst_mikey_payload_kemac_set (GstMIKEYPayload *payload, + GstMIKEYEncAlg enc_alg, + GstMIKEYMacAlg mac_alg); +

Set the KEMAC parameters. payload + should point to a GST_MIKEY_PT_KEMAC +payload.

-

Parameters

+

Parameters

@@ -1108,40 +1665,39 @@ - - + + - - + + - - - + + +

msg

a GstMIKEYMessage

payload

a GstMIKEYPayload

 

idx

an index

enc_alg

the GstMIKEYEncAlg

 

payload

a GstMIKEYPayload.

[transfer full]

mac_alg

a GstMIKEYMacAlg

 
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


-

gst_mikey_message_add_payload ()

+

gst_mikey_payload_kemac_add_sub ()

gboolean
-gst_mikey_message_add_payload (GstMIKEYMessage *msg,
-                               GstMIKEYPayload *payload);
-

Add a new payload to msg +gst_mikey_payload_kemac_add_sub (GstMIKEYPayload *payload, + GstMIKEYPayload *newpay); +

Add a new sub payload to payload .

-

Parameters

+

Parameters

@@ -1150,34 +1706,35 @@ - - + + - - + +

msg

a GstMIKEYMessage

payload

a GstMIKEYPayload

 

payload

a GstMIKEYPayload.

newpay

a GstMIKEYPayload to add.

[transfer full]
-

Returns

-

TRUE on success

-

+

Returns

+

TRUE on success.

-

Since 1.4

+

Since: 1.4


-

gst_mikey_payload_new ()

-
GstMIKEYPayload *
-gst_mikey_payload_new (GstMIKEYPayloadType type);
-

Make a new GstMIKEYPayload with type -.

+

gst_mikey_payload_kemac_get_n_sub ()

+
guint
+gst_mikey_payload_kemac_get_n_sub (const GstMIKEYPayload *payload);
+

Get the number of sub payloads of payload +. payload + should be of type +GST_MIKEY_PT_KEMAC.

-

Parameters

+

Parameters

@@ -1185,60 +1742,71 @@ - - + +

type

a GstMIKEYPayloadType

payload

a GstMIKEYPayload

 
-

Returns

-

a new GstMIKEYPayload or NULL on failure.

-

[nullable]

+

Returns

+

the number of sub payloads in payload +

-

Since 1.4

+

Since: 1.4


-

gst_mikey_payload_copy ()

-
GstMIKEYPayload *
-gst_mikey_payload_copy (const GstMIKEYPayload *buf);
-

Create a copy of the given payload.

+

gst_mikey_payload_kemac_get_sub ()

+
const GstMIKEYPayload *
+gst_mikey_payload_kemac_get_sub (const GstMIKEYPayload *payload,
+                                 guint idx);
+

Get the sub payload of payload + at idx +. payload + should be of type +GST_MIKEY_PT_KEMAC.

-

Parameters

+

Parameters

- + + - + - + + + + + + +

payload

a GstMIKEYPayload.

a GstMIKEYPayload

 

idx

an index

 
-

Returns

-

a new copy of payload +

Returns

+

the GstMIKEYPayload at idx .

-

[transfer full]

+

[transfer none]

-

Since 1.4

+

Since: 1.4


-

gst_mikey_payload_kemac_set ()

+

gst_mikey_payload_kemac_remove_sub ()

gboolean
-gst_mikey_payload_kemac_set (GstMIKEYPayload *payload,
-                             GstMIKEYEncAlg enc_alg,
-                             GstMIKEYMacAlg mac_alg);
-

Set the KEMAC parameters. payload - should point to a GST_MIKEY_PT_KEMAC -payload.

+gst_mikey_payload_kemac_remove_sub (GstMIKEYPayload *payload, + guint idx); +

Remove the sub payload at idx + in payload +.

-

Parameters

+

Parameters

@@ -1252,24 +1820,18 @@ - - - - - - - + +
 

enc_alg

the GstMIKEYEncAlg

 

mac_alg

a GstMIKEYMacAlg

idx

the index to remove

 
-

Returns

-

TRUE on success

-

+

Returns

+

TRUE on success.

-

Since 1.4

+

Since: 1.4


@@ -1284,7 +1846,7 @@ must be of type GST_MIKEY_PT_PKE.

-

Parameters

+

Parameters

@@ -1317,11 +1879,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1334,7 +1895,7 @@

Add a new PKE payload to msg with the given parameters.

-

Parameters

+

Parameters

@@ -1367,11 +1928,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1383,7 +1943,7 @@

Set the timestamp in a GST_MIKEY_PT_T payload .

-

Parameters

+

Parameters

@@ -1410,11 +1970,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1426,7 +1985,7 @@

Add a new T payload to msg with the given parameters.

-

Parameters

+

Parameters

@@ -1454,11 +2013,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1469,7 +2027,7 @@ that contains the current time in NTP-UTC format.

-

Parameters

+

Parameters

@@ -1484,11 +2042,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1500,7 +2057,7 @@

Set the random values in a GST_MIKEY_PT_RAND payload .

-

Parameters

+

Parameters

@@ -1528,11 +2085,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1544,7 +2100,7 @@

Add a new RAND payload to msg with the given parameters.

-

Parameters

+

Parameters

@@ -1572,11 +2128,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1588,7 +2143,7 @@ with len random bytes.

-

Parameters

+

Parameters

@@ -1610,11 +2165,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1626,7 +2180,7 @@

Set the Security Policy parameters for payload .

-

Parameters

+

Parameters

@@ -1653,11 +2207,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1668,7 +2221,7 @@ payload .

-

Parameters

+

Parameters

@@ -1683,12 +2236,11 @@
-

Returns

+

Returns

the number of parameters in payload

-

-

Since 1.4

+

Since: 1.4


@@ -1701,7 +2253,7 @@ at idx .

-

Parameters

+

Parameters

@@ -1723,13 +2275,12 @@
-

Returns

+

Returns

the GstMIKEYPayloadSPParam at idx in payload

-

-

Since 1.4

+

Since: 1.4


@@ -1746,7 +2297,7 @@ and val .

-

Parameters

+

Parameters

@@ -1779,11 +2330,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4


@@ -1796,7 +2346,7 @@ at idx .

-

Parameters

+

Parameters

@@ -1818,11 +2368,10 @@
-

Returns

+

Returns

TRUE on success

-

-

Since 1.4

+

Since: 1.4

@@ -1910,8 +2459,6 @@

struct GstMIKEYMessage

struct GstMIKEYMessage {
-  GstMiniObject mini_object;
-
   guint8 version;
   GstMIKEYType type;
   gboolean V;
@@ -1933,11 +2480,6 @@
 
 
 
-

GstMiniObject mini_object;

-  -  - -

guint8 version;

the version

  @@ -2190,8 +2732,6 @@

struct GstMIKEYPayload

struct GstMIKEYPayload {
-  GstMiniObject mini_object;
-
   GstMIKEYPayloadType type;
   guint len;
 };
@@ -2207,11 +2747,6 @@
 
 
 
-

GstMiniObject mini_object;

-  -  - -

GstMIKEYPayloadType type;

the payload type

  @@ -2332,8 +2867,8 @@

GArray *subpayloads;

-  -  +

the subpayloads

@@ -2760,7 +3295,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstnavigation.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstnavigation.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstnavigation.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstnavigation.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstnavigation +gstnavigation: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -134,6 +134,14 @@ GstMessage * +gst_navigation_message_new_event () + + + + +GstMessage * + + gst_navigation_message_new_mouse_over () @@ -142,7 +150,7 @@ gboolean -gst_navigation_message_parse_mouse_over () +gst_navigation_message_parse_angles_changed () @@ -150,7 +158,15 @@ gboolean -gst_navigation_message_parse_angles_changed () +gst_navigation_message_parse_event () + + + + +gboolean + + +gst_navigation_message_parse_mouse_over () @@ -349,7 +365,7 @@ const char *event, const char *key);
-

Parameters

+

Parameters

@@ -392,7 +408,7 @@ usually the size in pixels of the window associated with the element implementing the GstNavigation interface.

-

Parameters

+

Parameters

@@ -439,7 +455,7 @@ GstNavigationCommand command);

Sends the indicated command to the navigation interface.

-

Parameters

+

Parameters

@@ -470,7 +486,7 @@

Inspect a GstNavigation command event and retrieve the enum value of the associated command.

-

Parameters

+

Parameters

@@ -493,9 +509,8 @@
-

Returns

+

Returns

TRUE if the navigation command could be extracted, otherwise FALSE.

-


@@ -505,7 +520,7 @@ gst_navigation_event_parse_key_event (GstEvent *event, const gchar **key);
-

Parameters

+

Parameters

@@ -542,7 +557,7 @@ a mouse button release event. Determine which type the event is using gst_navigation_event_get_type() to retrieve the GstNavigationEventType.

-

Parameters

+

Parameters

@@ -577,10 +592,9 @@
-

Returns

+

Returns

TRUE if the button number and both coordinates could be extracted, otherwise FALSE.

-


@@ -594,7 +608,7 @@

Inspect a GstNavigation mouse movement event and extract the coordinates of the event.

-

Parameters

+

Parameters

@@ -621,9 +635,8 @@
-

Returns

+

Returns

TRUE if both coordinates could be extracted, otherwise FALSE.

-


@@ -634,7 +647,7 @@

Check a bus message to see if it is a GstNavigation event, and return the GstNavigationMessageType identifying the type of the message if so.

-

Parameters

+

Parameters

@@ -649,11 +662,10 @@
-

Returns

+

Returns

The type of the GstMessage, or GST_NAVIGATION_MESSAGE_INVALID if the message is not a GstNavigation notification.

-


@@ -669,7 +681,7 @@ that the current angle, or current number of angles available in a multiangle video has changed.

-

Parameters

+

Parameters

@@ -696,9 +708,8 @@
-

Returns

+

Returns

The new GstMessage.

-


@@ -710,7 +721,7 @@

Creates a new GstNavigation message with type GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED

-

Parameters

+

Parameters

@@ -725,21 +736,20 @@
-

Returns

+

Returns

The new GstMessage.

-


-

gst_navigation_message_new_mouse_over ()

+

gst_navigation_message_new_event ()

GstMessage *
-gst_navigation_message_new_mouse_over (GstObject *src,
-                                       gboolean active);
+gst_navigation_message_new_event (GstObject *src, + GstEvent *event);

Creates a new GstNavigation message with type -GST_NAVIGATION_MESSAGE_MOUSE_OVER.

+GST_NAVIGATION_MESSAGE_EVENT.

-

Parameters

+

Parameters

@@ -753,32 +763,29 @@ - - - + + +
 

active

TRUE if the mouse has entered a clickable area of the display. -FALSE if it over a non-clickable area.

 

event

A navigation GstEvent.

[transfer none]
-

Returns

+

Returns

The new GstMessage.

-

+

Since: 1.6


-

gst_navigation_message_parse_mouse_over ()

-
gboolean
-gst_navigation_message_parse_mouse_over
-                               (GstMessage *message,
-                                gboolean *active);
-

Parse a GstNavigation message of type GST_NAVIGATION_MESSAGE_MOUSE_OVER -and extract the active/inactive flag. If the mouse over event is marked -active, it indicates that the mouse is over a clickable area.

+

gst_navigation_message_new_mouse_over ()

+
GstMessage *
+gst_navigation_message_new_mouse_over (GstObject *src,
+                                       gboolean active);
+

Creates a new GstNavigation message with type +GST_NAVIGATION_MESSAGE_MOUSE_OVER.

-

Parameters

+

Parameters

@@ -787,23 +794,22 @@ - - + + - +

message

A GstMessage to inspect.

src

A GstObject to set as source of the new message.

 

active

A pointer to a gboolean to receive the active/inactive state, -or NULL.

TRUE if the mouse has entered a clickable area of the display. +FALSE if it over a non-clickable area.

 
-

Returns

-

TRUE if the message could be successfully parsed. FALSE if not.

-

+

Returns

+

The new GstMessage.


@@ -819,7 +825,7 @@ and n_angles parameters.

-

Parameters

+

Parameters

@@ -847,9 +853,85 @@
-

Returns

+

Returns

+

TRUE if the message could be successfully parsed. FALSE if not.

+
+ +
+
+

gst_navigation_message_parse_event ()

+
gboolean
+gst_navigation_message_parse_event (GstMessage *message,
+                                    GstEvent **event);
+

Parse a GstNavigation message of type GST_NAVIGATION_MESSAGE_EVENT +and extract contained GstEvent. The caller must unref the event + when done +with it.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

message

A GstMessage to inspect.

 

event

a pointer to a GstEvent to receive the +contained navigation event.

[out][transfer full]
+
+
+

Returns

+

TRUE if the message could be successfully parsed. FALSE if not.

+
+

Since: 1.6

+
+
+
+

gst_navigation_message_parse_mouse_over ()

+
gboolean
+gst_navigation_message_parse_mouse_over
+                               (GstMessage *message,
+                                gboolean *active);
+

Parse a GstNavigation message of type GST_NAVIGATION_MESSAGE_MOUSE_OVER +and extract the active/inactive flag. If the mouse over event is marked +active, it indicates that the mouse is over a clickable area.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

message

A GstMessage to inspect.

 

active

A pointer to a gboolean to receive the active/inactive state, +or NULL.

 
+
+
+

Returns

TRUE if the message could be successfully parsed. FALSE if not.

-


@@ -861,9 +943,8 @@ query the pipeline for the set of currently available angles, which may be greater than one in a multiangle video.

-

Returns

+

Returns

The new query.

-


@@ -874,7 +955,7 @@

Inspect a GstQuery and return the GstNavigationQueryType associated with it if it is a GstNavigation query.

-

Parameters

+

Parameters

@@ -889,10 +970,9 @@
-

Returns

+

Returns

The GstNavigationQueryType of the query, or GST_NAVIGATION_QUERY_INVALID

-


@@ -903,9 +983,8 @@

Create a new GstNavigation commands query. When executed, it will query the pipeline for the set of currently available commands.

-

Returns

+

Returns

The new query.

-


@@ -922,7 +1001,7 @@ angles into the guint pointed to by the n_angles variable.

-

Parameters

+

Parameters

@@ -951,9 +1030,8 @@
-

Returns

+

Returns

TRUE if the query could be successfully parsed. FALSE if not.

-


@@ -966,7 +1044,7 @@

Parse the number of commands in the GstNavigation commands query .

-

Parameters

+

Parameters

@@ -988,9 +1066,8 @@
-

Returns

+

Returns

TRUE if the query could be successfully parsed. FALSE if not.

-


@@ -1009,7 +1086,7 @@ will be set to GST_NAVIGATION_COMMAND_INVALID.

-

Parameters

+

Parameters

@@ -1036,9 +1113,8 @@
-

Returns

+

Returns

TRUE if the query could be successfully parsed. FALSE if not.

-


@@ -1051,7 +1127,7 @@

Set the GstNavigation angles query result field in query .

-

Parameters

+

Parameters

@@ -1090,7 +1166,7 @@ of commands passed must be equal to n_commands .

-

Parameters

+

Parameters

@@ -1131,7 +1207,7 @@ of commands passed must be equal to n_commands .

-

Parameters

+

Parameters

@@ -1179,7 +1255,7 @@

Navigation interface.

-

Members

+

Members

@@ -1223,7 +1299,7 @@ GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = GST_NAVIGATION_COMMAND_MENU7

-

Members

+

Members

@@ -1360,7 +1436,7 @@

Enum values for the various events that an element implementing the GstNavigation interface might send up the pipeline.

-

Members

+

Members

@@ -1437,7 +1513,7 @@

A set of notifications that may be received on the bus when navigation related status changes.

-

Members

+

Members

@@ -1479,6 +1555,14 @@ + + + + +
 

GST_NAVIGATION_MESSAGE_EVENT

+

Sent when a navigation event was not handled +by any element in the pipeline (Since 1.6)

+
 
@@ -1488,7 +1572,7 @@

enum GstNavigationQueryType

Tyoes of navigation interface queries.

-

Members

+

Members

@@ -1566,7 +1650,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilscodecutils +gstpbutilscodecutils: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -212,7 +212,6 @@

Returns

The sample rate if sr_idx is valid, 0 otherwise.

-


@@ -241,7 +240,6 @@

Returns

The AAC index for this sample rate, -1 if the rate is not a valid AAC sample rate.

-


@@ -286,7 +284,6 @@

Returns

The profile as a const string and NULL if the profile could not be determined.

-


@@ -345,7 +342,6 @@

Returns

The level as a const string and NULL if the level could not be determined.

-


@@ -398,7 +394,6 @@

Returns

TRUE if the level and profile could be set, FALSE otherwise.

-


@@ -448,7 +443,6 @@

Returns

The profile as a const string, or NULL if there is an error.

-


@@ -486,7 +480,6 @@

Returns

The level as a const string, or NULL if there is an error.

-


@@ -533,7 +526,6 @@

Returns

TRUE if the level and profile could be set, FALSE otherwise.

-


@@ -560,7 +552,6 @@

Returns

the level_idc or 0 if the level is unknown

-


@@ -614,7 +605,6 @@

Returns

The profile as a const string, or NULL if there is an error.

Since 1.4

-


@@ -654,7 +644,6 @@

Returns

The tier as a const string, or NULL if there is an error.

Since 1.4

-


@@ -694,7 +683,6 @@

Returns

The level as a const string, or NULL if there is an error.

Since 1.4

-


@@ -722,7 +710,6 @@

Returns

the level_idc or 0 if the level is unknown

Since 1.4

-


@@ -771,7 +758,6 @@

Returns

TRUE if the level, tier, profile could be set, FALSE otherwise.

Since 1.4

-


@@ -812,7 +798,6 @@

Returns

The profile as a const string, or NULL if there is an error.

-


@@ -852,7 +837,6 @@

Returns

The level as a const string, or NULL if there is an error.

-


@@ -900,7 +884,6 @@

Returns

TRUE if the level and profile could be set, FALSE otherwise.

-

@@ -909,7 +892,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsdescriptions +gstpbutilsdescriptions: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -152,7 +152,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -187,7 +186,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -223,7 +221,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -259,7 +256,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -293,7 +289,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -339,7 +334,6 @@

Returns

TRUE if a codec tag was added, FALSE otherwise.

-


@@ -373,7 +367,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-

@@ -382,7 +375,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutils.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutils.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutils.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutils.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutils +gstpbutils: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -110,7 +110,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsinstallplugins +gstpbutilsinstallplugins: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -110,6 +110,30 @@ gst_install_plugins_context_set_xid () + + + + + + + + + + + +
+void + +gst_install_plugins_context_set_confirm_search () +
+void + +gst_install_plugins_context_set_desktop_id () +
+void + +gst_install_plugins_context_set_startup_notification_id () +
@@ -590,7 +614,6 @@

Returns

result code whether an external installer could be started

-


@@ -632,7 +655,6 @@

Returns

the result of the installation.

-


@@ -663,7 +685,6 @@

Returns

a descriptive string for the status code in ret

-


@@ -677,7 +698,6 @@

Returns

TRUE if plugin installation is in progress, otherwise FALSE

-


@@ -692,7 +712,6 @@

Returns

TRUE if plugin installation is likely to be supported.

-


@@ -705,7 +724,6 @@

Returns

a new GstInstallPluginsContext. Free with gst_install_plugins_context_free() when no longer needed

-


@@ -779,6 +797,123 @@ +
+
+

gst_install_plugins_context_set_confirm_search ()

+
void
+gst_install_plugins_context_set_confirm_search
+                               (GstInstallPluginsContext *ctx,
+                                gboolean confirm_search);
+

This function is used to tell the external installer process whether it +should ask for confirmation or not before searching for missing plugins.

+

If set, this option will be passed to the installer via a +--interaction=[show-confirm-search|hide-confirm-search] command line option.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

ctx

a GstInstallPluginsContext

 

confirm_search

whether to ask for confirmation before searching for plugins

 
+
+

Since: 1.6

+
+
+
+

gst_install_plugins_context_set_desktop_id ()

+
void
+gst_install_plugins_context_set_desktop_id
+                               (GstInstallPluginsContext *ctx,
+                                const gchar *desktop_id);
+

This function is used to pass the calling application's desktop file ID to +the external installer process.

+

A desktop file ID is the basename of the desktop file, including the +.desktop extension.

+

If set, the desktop file ID will be passed to the installer via a +--desktop-id= command line option.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

ctx

a GstInstallPluginsContext

 

desktop_id

the desktop file ID of the calling application

 
+
+

Since: 1.6

+
+
+
+

gst_install_plugins_context_set_startup_notification_id ()

+
void
+gst_install_plugins_context_set_startup_notification_id
+                               (GstInstallPluginsContext *ctx,
+                                const gchar *startup_id);
+

Sets the startup notification ID for the launched process.

+

This is typically used to to pass the current X11 event timestamp to the +external installer process.

+

Startup notification IDs are defined in the +FreeDesktop.Org Startup Notifications standard.

+

If set, the ID will be passed to the installer via a +--startup-notification-id= command line option.

+

GTK+/GNOME applications should be able to create a startup notification ID +like this:

+
+  timestamp = gtk_get_current_event_time ();
+  startup_id = g_strdup_printf ("_TIME%u", timestamp);
+...
+
+
+

Parameters

+
+++++ + + + + + + + + + + + + +

ctx

a GstInstallPluginsContext

 

startup_id

the startup notification ID

 
+
+

Since: 1.6

+

Types and Values

@@ -902,7 +1037,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsmissingplugins +gstpbutilsmissingplugins: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -205,7 +205,7 @@

msg

-

a missing-plugin GstMessage of type GST_MESSAGE_ELEMENT

+

a missing-plugin GstMessage of type GST_MESSAGE_ELEMENT

  @@ -214,7 +214,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -240,7 +239,7 @@

msg

-

a missing-plugin GstMessage of type GST_MESSAGE_ELEMENT

+

a missing-plugin GstMessage of type GST_MESSAGE_ELEMENT

  @@ -249,7 +248,6 @@

Returns

a newly-allocated description string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -278,7 +276,6 @@

Returns

TRUE if msg is a missing-plugins message, otherwise FALSE.

-


@@ -507,7 +504,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -543,7 +539,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -579,7 +574,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -614,7 +608,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-


@@ -649,7 +642,6 @@

Returns

a newly-allocated detail string, or NULL on error. Free string with g_free() when not needed any longer.

-

@@ -658,7 +650,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstpluginsbaseversion +gstpluginsbaseversion: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -104,14 +104,14 @@

GST_PLUGINS_BASE_VERSION_MINOR

-
#define GST_PLUGINS_BASE_VERSION_MINOR (4)
+
#define GST_PLUGINS_BASE_VERSION_MINOR (6)
 

The minor version of GStreamer's gst-plugins-base libraries at compile time.


GST_PLUGINS_BASE_VERSION_MICRO

-
#define GST_PLUGINS_BASE_VERSION_MICRO (3)
+
#define GST_PLUGINS_BASE_VERSION_MICRO (1)
 

The micro version of GStreamer's gst-plugins-base libraries at compile time.

@@ -181,7 +181,6 @@

Returns

a newly allocated string describing this version of gst-plugins-base

-

@@ -190,7 +189,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstriff.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstriff.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstriff.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstriff.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstriff +gstriff: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -330,7 +330,6 @@

Returns

FALSE on error, TRUE otherwise

-


@@ -379,7 +378,6 @@

FALSE if this is not a RIFF stream (in which case the caller should error out; we already throw an error), or TRUE if it is.

-


@@ -471,7 +469,6 @@

Returns

TRUE if parsing succeeded, otherwise FALSE. The stream should be skipped on error, but it is not fatal.

-


@@ -524,7 +521,6 @@

Returns

TRUE if parsing succeeded, otherwise FALSE.

-


@@ -577,7 +573,6 @@

Returns

TRUE if parsing succeeded, otherwise FALSE. The stream should be skipped on error, but it is not fatal.

-


@@ -621,7 +616,6 @@

Returns

TRUE if parsing succeeded, otherwise FALSE. The stream should be skipped on error, but it is not fatal.

-


@@ -675,7 +669,6 @@

Returns

flow status.

-

@@ -684,7 +677,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtcpbuffer +gstrtcpbuffer: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -68,6 +68,22 @@ gboolean +gst_rtcp_buffer_validate_data_reduced () + + + + +gboolean + + +gst_rtcp_buffer_validate_reduced () + + + + +gboolean + + gst_rtcp_buffer_validate_data () @@ -614,7 +630,6 @@

A newly allocated buffer with data and of size len .

-


@@ -656,23 +671,95 @@

A newly allocated buffer with a copy of data and of size len .

-


+

gst_rtcp_buffer_validate_data_reduced ()

+
gboolean
+gst_rtcp_buffer_validate_data_reduced (guint8 *data,
+                                       guint len);
+

Check if the data + and size + point to the data of a valid RTCP packet. +Use this function to validate a packet before using the other functions in +this module.

+

This function is updated to support reduced size rtcp packets according to +RFC 5506 and will validate full compound RTCP packets as well as reduced +size RTCP packets.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

data

the data to validate.

[array length=len]

len

the length of data +to validate

 
+
+
+

Returns

+

TRUE if the data points to a valid RTCP packet.

+
+

Since: 1.6

+
+
+
+

gst_rtcp_buffer_validate_reduced ()

+
gboolean
+gst_rtcp_buffer_validate_reduced (GstBuffer *buffer);
+

Check if the data pointed to by buffer + is a valid RTCP packet using +gst_rtcp_buffer_validate_reduced().

+
+

Parameters

+
+++++ + + + + + +

buffer

the buffer to validate

 
+
+
+

Returns

+

TRUE if buffer +is a valid RTCP packet.

+
+

Since: 1.6

+
+
+

gst_rtcp_buffer_validate_data ()

gboolean
 gst_rtcp_buffer_validate_data (guint8 *data,
                                guint len);

Check if the data and size - point to the data of a valid RTCP (compound) -packet. + point to the data of a valid compound, +non-reduced size RTCP packet. Use this function to validate a packet before using the other functions in this module.

-

Parameters

+

Parameters

@@ -695,9 +782,8 @@
-

Returns

+

Returns

TRUE if the data points to a valid RTCP packet.

-


@@ -709,7 +795,7 @@ is a valid RTCP packet using gst_rtcp_buffer_validate_data().

-

Parameters

+

Parameters

@@ -724,10 +810,9 @@
-

Returns

+

Returns

TRUE if buffer is a valid RTCP packet.

-


@@ -739,7 +824,7 @@ maximum size of mtu .

-

Parameters

+

Parameters

@@ -754,9 +839,8 @@
-

Returns

+

Returns

A newly allocated buffer.

-


@@ -772,7 +856,7 @@ buffer state is stored in rtcp .

-

Parameters

+

Parameters

@@ -805,13 +889,13 @@
gboolean
 gst_rtcp_buffer_unmap (GstRTCPBuffer *rtcp);

Finish rtcp - after being constructured. This function is usually called + after being constructed. This function is usually called after gst_rtcp_buffer_map() and after adding the RTCP items to the new buffer.

The function adjusts the size of rtcp with the total length of all the added packets.

-

Parameters

+

Parameters

@@ -834,7 +918,7 @@

Get the number of RTCP packets in rtcp .

-

Parameters

+

Parameters

@@ -849,10 +933,9 @@
-

Returns

+

Returns

the number of RTCP packets in rtcp .

-


@@ -865,7 +948,7 @@ rtcp .

-

Parameters

+

Parameters

@@ -887,10 +970,9 @@
-

Returns

+

Returns

TRUE if the packet existed in rtcp .

-


@@ -903,7 +985,7 @@ Use gst_rtcp_buffer_get_first_packet() to initialize packet .

-

Parameters

+

Parameters

@@ -918,11 +1000,10 @@
-

Returns

+

Returns

TRUE if packet is pointing to a valid packet after calling this function.

-


@@ -938,7 +1019,7 @@ will point to the newly created packet.

-

Parameters

+

Parameters

@@ -965,10 +1046,9 @@
-

Returns

+

Returns

TRUE if the packet could be created. This function returns FALSE if the max mtu is exceeded for the buffer.

-


@@ -979,7 +1059,7 @@

Removes the packet pointed to by packet and moves pointer to the next one

-

Parameters

+

Parameters

@@ -994,11 +1074,10 @@
-

Returns

+

Returns

TRUE if packet is pointing to a valid packet after calling this function.

-


@@ -1009,7 +1088,7 @@

Get the packet padding of the packet pointed to by packet .

-

Parameters

+

Parameters

@@ -1024,9 +1103,8 @@
-

Returns

+

Returns

If the packet has the padding bit set.

-


@@ -1037,7 +1115,7 @@

Get the count field in packet .

-

Parameters

+

Parameters

@@ -1052,12 +1130,11 @@
-

Returns

+

Returns

The count field in packet or -1 if packet does not point to a valid packet.

-


@@ -1068,7 +1145,7 @@

Get the packet type of the packet pointed to by packet .

-

Parameters

+

Parameters

@@ -1083,11 +1160,10 @@
-

Returns

+

Returns

The packet type or GST_RTCP_TYPE_INVALID when packet is not pointing to a valid packet.

-


@@ -1099,7 +1175,7 @@ . This is the length of the packet in 32-bit words minus one.

-

Parameters

+

Parameters

@@ -1114,10 +1190,9 @@
-

Returns

+

Returns

The length field of packet .

-


@@ -1132,7 +1207,7 @@ guint32 *octet_count);

Parse the SR sender info and store the values.

-

Parameters

+

Parameters

@@ -1187,7 +1262,7 @@

Set the given values in the SR packet packet .

-

Parameters

+

Parameters

@@ -1237,7 +1312,7 @@

Get the ssrc field of the RR packet .

-

Parameters

+

Parameters

@@ -1252,9 +1327,8 @@
-

Returns

+

Returns

the ssrc.

-


@@ -1266,7 +1340,7 @@

Set the ssrc field of the RR packet .

-

Parameters

+

Parameters

@@ -1296,7 +1370,7 @@

Get the number of report blocks in packet .

-

Parameters

+

Parameters

@@ -1311,10 +1385,9 @@
-

Returns

+

Returns

The number of report blocks in packet .

-


@@ -1335,7 +1408,7 @@ and store the result in the values.

-

Parameters

+

Parameters

@@ -1408,7 +1481,7 @@

Add a new report block to packet with the given values.

-

Parameters

+

Parameters

@@ -1460,11 +1533,10 @@
-

Returns

+

Returns

TRUE if the packet was created. This function can return FALSE if the max MTU is exceeded or the number of report blocks is greater than GST_RTCP_MAX_RB_COUNT.

-


@@ -1485,7 +1557,7 @@ with the given values.

Note: Not implemented.

-

Parameters

+

Parameters

@@ -1550,7 +1622,7 @@

Get the number of items in the SDES packet packet .

-

Parameters

+

Parameters

@@ -1565,10 +1637,9 @@
-

Returns

+

Returns

The number of items in packet .

-


@@ -1579,7 +1650,7 @@

Move to the first SDES item in packet .

-

Parameters

+

Parameters

@@ -1594,9 +1665,8 @@
-

Returns

+

Returns

TRUE if there was a first item.

-


@@ -1607,7 +1677,7 @@

Move to the next SDES item in packet .

-

Parameters

+

Parameters

@@ -1622,9 +1692,8 @@
-

Returns

+

Returns

TRUE if there was a next item.

-


@@ -1634,7 +1703,7 @@ gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket *packet);

Get the SSRC of the current SDES item.

-

Parameters

+

Parameters

@@ -1649,9 +1718,8 @@
-

Returns

+

Returns

the SSRC of the current item.

-


@@ -1661,7 +1729,7 @@ gst_rtcp_packet_sdes_first_entry (GstRTCPPacket *packet);

Move to the first SDES entry in the current item.

-

Parameters

+

Parameters

@@ -1676,9 +1744,8 @@
-

Returns

+

Returns

TRUE if there was a first entry.

-


@@ -1688,7 +1755,7 @@ gst_rtcp_packet_sdes_next_entry (GstRTCPPacket *packet);

Move to the next SDES entry in the current item.

-

Parameters

+

Parameters

@@ -1703,9 +1770,8 @@
-

Returns

+

Returns

TRUE if there was a next entry.

-


@@ -1728,7 +1794,7 @@ that this UTF8 string is NOT null-terminated. Use gst_rtcp_packet_sdes_copy_entry() to get a null-terminated copy of the entry.

-

Parameters

+

Parameters

@@ -1760,9 +1826,8 @@
-

Returns

+

Returns

TRUE if there was valid data.

-


@@ -1776,7 +1841,7 @@

This function is like gst_rtcp_packet_sdes_get_entry() but it returns a null-terminated copy of the data instead. use g_free() after usage.

-

Parameters

+

Parameters

@@ -1808,9 +1873,8 @@
-

Returns

+

Returns

TRUE if there was valid data.

-


@@ -1823,7 +1887,7 @@ to packet .

-

Parameters

+

Parameters

@@ -1845,10 +1909,9 @@
-

Returns

+

Returns

TRUE if the item could be added, FALSE if the maximum amount of items has been exceeded for the SDES packet or the MTU has been reached.

-


@@ -1862,7 +1925,7 @@

Add a new SDES entry to the current item in packet .

-

Parameters

+

Parameters

@@ -1894,10 +1957,9 @@
-

Returns

+

Returns

TRUE if the item could be added, FALSE if the MTU has been reached.

-


@@ -1908,7 +1970,7 @@

Get the number of SSRC fields in packet .

-

Parameters

+

Parameters

@@ -1923,10 +1985,9 @@
-

Returns

+

Returns

The number of SSRC fields in packet .

-


@@ -1939,7 +2000,7 @@ SSRC of the BYE packet .

-

Parameters

+

Parameters

@@ -1961,11 +2022,10 @@
-

Returns

+

Returns

The nth SSRC of packet .

-


@@ -1978,7 +2038,7 @@ to the BYE packet .

-

Parameters

+

Parameters

@@ -2000,11 +2060,10 @@
-

Returns

+

Returns

TRUE if the ssrc was added. This function can return FALSE if the max MTU is exceeded or the number of sources blocks is greater than GST_RTCP_MAX_BYE_SSRC_COUNT.

-


@@ -2019,7 +2078,7 @@ to BYE packet .

-

Parameters

+

Parameters

@@ -2047,11 +2106,10 @@
-

Returns

+

Returns

TRUE if the all the SSRCs were added. This function can return FALSE if the max MTU is exceeded or the number of sources blocks is greater than GST_RTCP_MAX_BYE_SSRC_COUNT.

-


@@ -2061,7 +2119,7 @@ gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket *packet);

Get the length of the reason string.

-

Parameters

+

Parameters

@@ -2076,10 +2134,9 @@
-

Returns

+

Returns

The length of the reason string or 0 when there is no reason string present.

-


@@ -2090,7 +2147,7 @@

Get the reason in packet .

-

Parameters

+

Parameters

@@ -2105,11 +2162,10 @@
-

Returns

+

Returns

The reason for the BYE packet or NULL if the packet did not contain a reason string. The string must be freed with g_free() after usage.

-


@@ -2122,7 +2178,7 @@ in packet .

-

Parameters

+

Parameters

@@ -2144,9 +2200,8 @@
-

Returns

+

Returns

TRUE if the string could be set.

-


@@ -2157,7 +2212,7 @@

Get the feedback message type of the FB packet .

-

Parameters

+

Parameters

@@ -2172,9 +2227,8 @@
-

Returns

+

Returns

The feedback message type.

-


@@ -2186,7 +2240,7 @@

Set the feedback message type of the FB packet .

-

Parameters

+

Parameters

@@ -2216,7 +2270,7 @@

Get the sender SSRC field of the RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2231,9 +2285,8 @@
-

Returns

+

Returns

the sender SSRC.

-


@@ -2245,7 +2298,7 @@

Set the sender SSRC field of the RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2275,7 +2328,7 @@

Get the media SSRC field of the RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2290,9 +2343,8 @@
-

Returns

+

Returns

the media SSRC.

-


@@ -2304,7 +2356,7 @@

Set the media SSRC field of the RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2335,7 +2387,7 @@ RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2350,9 +2402,8 @@
-

Returns

+

Returns

The length of the FCI in 32-bit words.

-


@@ -2365,7 +2416,7 @@ RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2387,9 +2438,8 @@
-

Returns

+

Returns

TRUE if there was enough space in the packet to add this much FCI

-


@@ -2400,7 +2450,7 @@

Get the Feedback Control Information attached to a RTPFB or PSFB packet .

-

Parameters

+

Parameters

@@ -2415,9 +2465,8 @@
-

Returns

+

Returns

a pointer to the FCI

-


@@ -2431,7 +2480,7 @@ number of seconds since 1900 and, in the lower 32 bits, the fractional seconds. The resulting value will be the number of nanoseconds since 1970.

-

Parameters

+

Parameters

@@ -2446,10 +2495,9 @@
-

Returns

+

Returns

the UNIX time for ntptime in nanoseconds.

-


@@ -2463,7 +2511,7 @@ bits, the fractional seconds. The resulting value can be used as an ntptime for constructing SR RTCP packets.

-

Parameters

+

Parameters

@@ -2478,10 +2526,9 @@
-

Returns

+

Returns

the NTP time for unixtime .

-


@@ -2495,7 +2542,7 @@ is typically a key in a GstStructure containing SDES items.

-

Parameters

+

Parameters

@@ -2510,11 +2557,10 @@
-

Returns

+

Returns

the GstRTCPSDESType for name or GST_RTCP_SDES_PRIV when name is a private sdes item.

-


@@ -2526,7 +2572,7 @@ to the string equivalent. The string is typically used as a key in a GstStructure containing SDES items.

-

Parameters

+

Parameters

@@ -2541,10 +2587,9 @@
-

Returns

+

Returns

the string equivalent of type

-

@@ -2822,9 +2867,12 @@   -

GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ

-  -  +

GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ

+ +

Request an SR packet for early + synchronization

+ + 

GST_RTCP_PSFB_TYPE_PLI

@@ -2908,7 +2956,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbaseaudiopayload +gstrtpbaseaudiopayload: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -383,7 +383,6 @@

Returns

a GstFlowReturn

-


@@ -432,7 +431,6 @@

Returns

a GstFlowReturn

-


@@ -510,7 +508,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbasedepayload +gstrtpbasedepayload: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -129,13 +129,13 @@

Functions

GST_RTP_BASE_DEPAYLOAD_SINKPAD()

-
#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->sinkpad)
+
#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->sinkpad)
 

GST_RTP_BASE_DEPAYLOAD_SRCPAD()

-
#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD (depayload)->srcpad)
+
#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->srcpad)
 

@@ -176,7 +176,6 @@

Returns

a GstFlowReturn.

-


@@ -215,7 +214,6 @@

Returns

a GstFlowReturn.

-

@@ -234,7 +232,8 @@ /* virtuals, inform the subclass of the caps. */ gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps); - /* pure virtual function, child must use this to process incoming + /* pure virtual function, child must implement either this method + * or the process_rtp_packet virtual method to process incoming * rtp packets. If the child returns a buffer without a valid timestamp, * the timestamp of @in will be applied to the result buffer and the * buffer will be pushed. If this function returns %NULL, nothing is @@ -249,6 +248,19 @@ /* the default implementation does the default actions for events but * implementation can override. */ gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event); + + /* Optional. Same as the process virtual function, but slightly more + * efficient, since it is passed the rtp buffer structure that has already + * been mapped (with GST_MAP_READ) by the base class and thus does not have + * to be mapped again by the subclass. Can be used by the subclass to process + * incoming rtp packets. If the subclass returns a buffer without a valid + * timestamp, the timestamp of the input buffer will be applied to the result + * buffer and the output buffer will be pushed out. If this function returns + * %NULL, nothing is pushed out. + * + * Since: 1.6 + */ + GstBuffer * (*process_rtp_packet) (GstRTPBaseDepayload *base, GstRTPBuffer * rtp_buffer); };

Base class for audio RTP payloader.

@@ -286,6 +298,11 @@

custom event handling

  + +

process_rtp_packet ()

+  +  + @@ -360,7 +377,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbasepayload +gstrtpbasepayload: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -356,7 +356,6 @@ and duration would exceed the configured MTU or max_ptime.

-


@@ -395,7 +394,6 @@

Returns

a GstFlowReturn.

-


@@ -434,7 +432,6 @@

Returns

a GstFlowReturn.

-


@@ -527,7 +524,6 @@

Returns

TRUE if the caps could be set.

-

@@ -780,7 +776,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbuffer +gstrtpbuffer: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -209,6 +209,14 @@ +GBytes * + + +gst_rtp_buffer_get_extension_bytes () + + + + guint32 @@ -337,6 +345,14 @@ +GBytes * + + +gst_rtp_buffer_get_payload_bytes () + + + + gpointer @@ -542,7 +558,6 @@

A newly allocated buffer with data and of size len .

-


@@ -585,7 +600,6 @@

A newly allocated buffer with a copy of data and of size len .

-


@@ -632,7 +646,6 @@

Returns

A newly allocated buffer that can hold an RTP packet with given parameters.

-


@@ -680,7 +693,6 @@

Returns

A newly allocated buffer that can hold an RTP packet of packet_len .

-


@@ -724,7 +736,6 @@

Returns

TRUE if buffer could be mapped.

-


@@ -777,7 +788,6 @@

Returns

The length of an RTP header with csrc_count CSRC entries.

-


@@ -822,7 +832,6 @@

Returns

The total length of an RTP header with given parameters.

-


@@ -867,7 +876,6 @@

Returns

The length of the payload of an RTP packet with given parameters.

-


@@ -929,7 +937,6 @@

Returns

The total length of the packet in buffer .

-


@@ -959,7 +966,6 @@

Returns

The total length of the header in buffer .

-


@@ -988,7 +994,6 @@

Returns

The version of buffer .

-


@@ -1049,7 +1054,6 @@

Returns

TRUE if buffer has the padding bit set.

-


@@ -1145,7 +1149,6 @@

Returns

TRUE if buffer has the extension bit set.

-


@@ -1201,8 +1204,9 @@ , data and wordlen unchanged.

+

[skip]

-

Parameters

+

Parameters

@@ -1235,21 +1239,67 @@
-

Returns

+

Returns

TRUE if buffer had the extension bit set.

-


+

gst_rtp_buffer_get_extension_bytes ()

+
GBytes *
+gst_rtp_buffer_get_extension_bytes (GstRTPBuffer *rtp,
+                                    guint16 *bits);
+

Similar to gst_rtp_buffer_get_extension_data, but more suitable for language +bindings usage. bits + will contain the extension 16 bits of custom data and +the extension data (not including the extension header) is placed in a new +GBytes structure.

+

If rtp + did not contain an extension, this function will return NULL, with +bits + unchanged. If there is an extension header but no extension data then +an empty GBytes will be returned.

+

[rename-to gst_rtp_buffer_get_extension_data]

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

rtp

the RTP packet

 

bits

location for header bits.

[out]
+
+
+

Returns

+

A new GBytes if an extension header was present +and NULL otherwise.

+

[transfer full]

+
+

Since: 1.2

+
+
+

gst_rtp_buffer_get_ssrc ()

guint32
 gst_rtp_buffer_get_ssrc (GstRTPBuffer *rtp);

Get the SSRC of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1264,10 +1314,9 @@
-

Returns

+

Returns

the SSRC of buffer in host order.

-


@@ -1280,7 +1329,7 @@ to ssrc .

-

Parameters

+

Parameters

@@ -1310,7 +1359,7 @@

Get the CSRC count of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1325,10 +1374,9 @@
-

Returns

+

Returns

the CSRC count of buffer .

-


@@ -1341,7 +1389,7 @@ in buffer .

-

Parameters

+

Parameters

@@ -1363,10 +1411,9 @@
-

Returns

+

Returns

the CSRC at index idx in host order.

-


@@ -1381,7 +1428,7 @@ to csrc .

-

Parameters

+

Parameters

@@ -1417,7 +1464,7 @@

Check if the marker bit is set on the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1432,10 +1479,9 @@
-

Returns

+

Returns

TRUE if buffer has the marker bit set.

-


@@ -1448,7 +1494,7 @@ to marker .

-

Parameters

+

Parameters

@@ -1478,7 +1524,7 @@

Get the payload type of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1493,9 +1539,8 @@
-

Returns

+

Returns

The payload type.

-


@@ -1508,7 +1553,7 @@ to payload_type .

-

Parameters

+

Parameters

@@ -1538,7 +1583,7 @@

Get the sequence number of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1553,9 +1598,8 @@
-

Returns

+

Returns

The sequence number in host order.

-


@@ -1568,7 +1612,7 @@ to seq .

-

Parameters

+

Parameters

@@ -1598,7 +1642,7 @@

Get the timestamp of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1613,9 +1657,8 @@
-

Returns

+

Returns

The timestamp in host order.

-


@@ -1628,7 +1671,7 @@ to timestamp .

-

Parameters

+

Parameters

@@ -1661,7 +1704,7 @@ so that a memcpy can be avoided.

-

Parameters

+

Parameters

@@ -1676,9 +1719,8 @@
-

Returns

+

Returns

A new buffer with the data of the payload.

-


@@ -1697,7 +1739,7 @@ is -1 the total payload starting from offset is subbuffered.

-

Parameters

+

Parameters

@@ -1724,9 +1766,8 @@
-

Returns

+

Returns

A new buffer with the specified data of the payload.

-


@@ -1737,7 +1778,7 @@

Get the length of the payload of the RTP packet in buffer .

-

Parameters

+

Parameters

@@ -1752,14 +1793,46 @@
-

Returns

+

Returns

The length of the payload in buffer .

-


+

gst_rtp_buffer_get_payload_bytes ()

+
GBytes *
+gst_rtp_buffer_get_payload_bytes (GstRTPBuffer *rtp);
+

Similar to gst_rtp_buffer_get_payload, but more suitable for language +bindings usage. The return value is a pointer to a GBytes structure +containing the payload data in rtp +.

+

[rename-to gst_rtp_buffer_get_payload]

+
+

Parameters

+
+++++ + + + + + +

rtp

the RTP packet

 
+
+
+

Returns

+

A new GBytes containing the payload data in rtp +.

+

[transfer full]

+
+

Since: 1.2

+
+
+

gst_rtp_buffer_get_payload ()

gpointer
 gst_rtp_buffer_get_payload (GstRTPBuffer *rtp);
@@ -1767,8 +1840,9 @@ . This pointer is valid as long as a reference to buffer is held.

+

[skip]

-

Parameters

+

Parameters

@@ -1783,7 +1857,7 @@
-

Returns

+

Returns

A pointer to the payload data in buffer .

@@ -1798,7 +1872,7 @@

Get the default clock-rate for the static payload type payload_type .

-

Parameters

+

Parameters

@@ -1813,10 +1887,9 @@
-

Returns

+

Returns

the default clock rate or -1 if the payload type is not static or the clock-rate is undefined.

-


@@ -1830,7 +1903,7 @@ and seqnum2 .

-

Parameters

+

Parameters

@@ -1852,14 +1925,13 @@
-

Returns

+

Returns

a negative value if seqnum1 is bigger than seqnum2 , 0 if they are equal or a positive value if seqnum1 is smaller than segnum2 .

-


@@ -1876,7 +1948,7 @@

This function makes sure that the returned value is a constantly increasing value even in the case where there is a timestamp wraparound.

-

Parameters

+

Parameters

@@ -1898,10 +1970,9 @@
-

Returns

+

Returns

The extended timestamp of timestamp .

-


@@ -1917,7 +1988,7 @@ extension header. If the existing extension data is not large enough, it will be made larger.

-

Parameters

+

Parameters

@@ -1945,9 +2016,8 @@
-

Returns

+

Returns

True if done.

-


@@ -1963,7 +2033,7 @@

Parses RFC 5285 style header extensions with a one byte header. It will return the nth extension with the requested id.

-

Parameters

+

Parameters

@@ -2000,10 +2070,9 @@
-

Returns

+

Returns

TRUE if buffer had the requested header extension

-


@@ -2020,7 +2089,7 @@

Parses RFC 5285 style header extensions with a two bytes header. It will return the nth extension with the requested id.

-

Parameters

+

Parameters

@@ -2062,10 +2131,9 @@
-

Returns

+

Returns

TRUE if buffer had the requested header extension

-


@@ -2085,7 +2153,7 @@ a two bytes header as described in RFC 5285. In that case, use gst_rtp_buffer_add_extension_twobytes_header()

-

Parameters

+

Parameters

@@ -2117,9 +2185,8 @@
-

Returns

+

Returns

TRUE if header extension could be added

-


@@ -2140,7 +2207,7 @@ a one byte header as described in RFC 5285. In that case, use gst_rtp_buffer_add_extension_onebyte_header()

-

Parameters

+

Parameters

@@ -2177,9 +2244,8 @@
-

Returns

+

Returns

TRUE if header extension could be added

-

@@ -2254,7 +2320,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtphdrext +gstrtphdrext: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -27,7 +27,7 @@

gstrtphdrext

-

gstrtphdrext

+

gstrtphdrext — Helper methods for dealing with RTP header extensions

@@ -81,6 +81,10 @@

Description

+
+

+

+

Functions

@@ -126,7 +130,6 @@

Returns

TRUE on success.

-


@@ -172,7 +175,6 @@

Returns

TRUE on success.

-


@@ -217,7 +219,6 @@

Returns

TRUE on success.

-


@@ -262,16 +263,18 @@

Returns

TRUE on success.

-

Types and Values

+
+

See Also

+

GstRTPBasePayload, GstRTPBaseDepayload, gstrtpbuffer

+
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtppayloads +gstrtppayloads: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -160,7 +160,6 @@

Returns

a GstRTPPayloadInfo or NULL when no info could be found.

-


@@ -191,7 +190,6 @@

Returns

a GstRTPPayloadInfo or NULL when no info could be found.

-

@@ -469,7 +467,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspconnection +gstrtspconnection: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -295,6 +295,38 @@ +void + + +gst_rtsp_connection_set_tls_database () + + + + +GTlsDatabase * + + +gst_rtsp_connection_get_tls_database () + + + + +void + + +gst_rtsp_connection_set_tls_interaction () + + + + +GTlsInteraction * + + +gst_rtsp_connection_get_tls_interaction () + + + + GstRTSPWatch * @@ -359,6 +391,14 @@ +void + + +gst_rtsp_watch_set_flushing () + + + + GstRTSPResult @@ -442,7 +482,6 @@

Returns

GST_RTSP_OK when conn contains a valid connection.

-


@@ -503,7 +542,6 @@

Returns

GST_RTSP_OK when conn contains a valid connection.

-


@@ -547,7 +585,6 @@

Returns

GST_RTSP_OK when conn contains a valid connection.

-


@@ -589,7 +626,6 @@

Returns

GST_RTSP_OK when a connection could be made.

-


@@ -618,7 +654,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -646,7 +681,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -702,7 +736,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -758,7 +791,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -815,7 +847,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -863,7 +894,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -911,7 +941,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -948,7 +977,6 @@

Returns

GST_RTSP_OK.

-


@@ -976,7 +1004,6 @@

Returns

GST_RTSP_OK.

-


@@ -1015,7 +1042,6 @@

Returns

GST_RTSP_OK.

-


@@ -1067,7 +1093,6 @@

Returns

GST_RTSP_OK.

-


@@ -1167,7 +1192,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -1226,7 +1250,6 @@

Returns

The IP address as a string. this value remains valid until the connection is closed.

-


@@ -1255,7 +1278,6 @@

Returns

The URL. This value remains valid until the connection is freed.

-


@@ -1315,7 +1337,6 @@

Returns

if conn is using HTTP tunneling.

-


@@ -1343,7 +1364,6 @@

Returns

returns a non-empty string if conn is being tunneled over HTTP.

-


@@ -1390,7 +1410,6 @@

Returns

return GST_RTSP_OK on success.

-


@@ -1463,7 +1482,6 @@

Returns

GST_RTSP_OK.

-


@@ -1471,6 +1489,28 @@

gst_rtsp_connection_get_read_socket ()

GSocket *
 gst_rtsp_connection_get_read_socket (const GstRTSPConnection *conn);
+

Get the file descriptor for reading.

+
+

Parameters

+
+++++ + + + + + +

conn

a GstRTSPConnection

 
+
+
+

Returns

+

the file descriptor used for reading or NULL on +error. The file descriptor remains valid until the connection is closed.

+

[transfer none]

+

@@ -1541,7 +1581,7 @@ .

[transfer none]

-

Since 1.2

+

Since: 1.2


@@ -1579,9 +1619,8 @@

TRUE if the validation flags are set correctly, or FALSE if conn is NULL or is not a TLS connection.

-

-

Since 1.2.1

+

Since: 1.2.1


@@ -1609,9 +1648,139 @@

Returns

the validationg flags.

-

-

Since 1.2.1

+

Since: 1.2.1

+
+
+
+

gst_rtsp_connection_set_tls_database ()

+
void
+gst_rtsp_connection_set_tls_database (GstRTSPConnection *conn,
+                                      GTlsDatabase *database);
+

Sets the anchor certificate authorities database. This certificate +database will be used to verify the server's certificate in case it +can't be verified with the default certificate database first.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

conn

a GstRTSPConnection

 

database

a GTlsDatabase

 
+
+

Since: 1.4

+
+
+
+

gst_rtsp_connection_get_tls_database ()

+
GTlsDatabase *
+gst_rtsp_connection_get_tls_database (GstRTSPConnection *conn);
+

Gets the anchor certificate authorities database that will be used +after a server certificate can't be verified with the default +certificate database.

+
+

Parameters

+
+++++ + + + + + +

conn

a GstRTSPConnection

 
+
+
+

Returns

+

the anchor certificate authorities database, or NULL if no +database has been previously set. Use g_object_unref() to release the +certificate database.

+

[transfer full]

+
+

Since: 1.4

+
+
+
+

gst_rtsp_connection_set_tls_interaction ()

+
void
+gst_rtsp_connection_set_tls_interaction
+                               (GstRTSPConnection *conn,
+                                GTlsInteraction *interaction);
+

Sets a GTlsInteraction object to be used when the connection or certificate +database need to interact with the user. This will be used to prompt the +user for passwords where necessary.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

conn

a GstRTSPConnection

 

interaction

a GTlsInteraction

 
+
+

Since: 1.6

+
+
+
+

gst_rtsp_connection_get_tls_interaction ()

+
GTlsInteraction *
+gst_rtsp_connection_get_tls_interaction
+                               (GstRTSPConnection *conn);
+

Gets a GTlsInteraction object to be used when the connection or certificate +database need to interact with the user. This will be used to prompt the +user for passwords where necessary.

+
+

Parameters

+
+++++ + + + + + +

conn

a GstRTSPConnection

 
+
+
+

Returns

+

a reference on the GTlsInteraction. Use +g_object_unref() to release.

+

[transfer full]

+
+

Since: 1.6


@@ -1630,8 +1799,9 @@ maincontext with gst_rtsp_watch_attach().

conn must exist for the entire lifetime of the watch.

+

[skip]

-

Parameters

+

Parameters

@@ -1665,10 +1835,9 @@
-

Returns

+

Returns

a GstRTSPWatch that can be used for asynchronous RTSP communication. Free with gst_rtsp_watch_unref() after usage.

-


@@ -1680,7 +1849,7 @@ by one. If the resulting reference count is zero the watch and associated memory will be destroyed.

-

Parameters

+

Parameters

@@ -1703,7 +1872,7 @@ GMainContext *context);

Adds a GstRTSPWatch to a context so that it will be executed within that context.

-

Parameters

+

Parameters

@@ -1725,9 +1894,8 @@
-

Returns

+

Returns

the ID (greater than 0) for the watch within the GMainContext.

-


@@ -1739,7 +1907,7 @@ , this is usually called after gst_rtsp_connection_do_tunnel() when the file descriptors of the connection might have changed.

-

Parameters

+

Parameters

@@ -1775,7 +1943,7 @@ will be non-zero and used as the ID argument in the message_sent callback.

-

Parameters

+

Parameters

@@ -1802,9 +1970,8 @@
-

Returns

+

Returns

GST_RTSP_OK on success.

-


@@ -1834,7 +2001,7 @@ gst_rtsp_watch_set_send_backlog(), this function will return GST_RTSP_ENOMEM.

-

Parameters

+

Parameters

@@ -1867,11 +2034,10 @@
-

Returns

+

Returns

GST_RTSP_OK on success. GST_RTSP_ENOMEM when the backlog limits are reached. GST_RTSP_EINTR when watch was flushing.

-


@@ -1885,7 +2051,7 @@ . See gst_rtsp_watch_set_send_backlog().

-

Parameters

+

Parameters

@@ -1911,7 +2077,7 @@
-

Since 1.2

+

Since: 1.2


@@ -1928,7 +2094,7 @@ or messages means no limits.

-

Parameters

+

Parameters

@@ -1954,7 +2120,41 @@
-

Since 1.2

+

Since: 1.2

+
+
+
+

gst_rtsp_watch_set_flushing ()

+
void
+gst_rtsp_watch_set_flushing (GstRTSPWatch *watch,
+                             gboolean flushing);
+

When flushing + is TRUE, abort a call to gst_rtsp_watch_wait_backlog() +and make sure gst_rtsp_watch_write_data() returns immediately with +GST_RTSP_EINTR. And empty the queue.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

watch

a GstRTSPWatch

 

flushing

new flushing state

 
+
+

Since: 1.4


@@ -1975,7 +2175,7 @@ returns GST_RTSP_ENOMEM. The caller then calls this function to wait for free space in the backlog queue and try again.

-

Parameters

+

Parameters

@@ -1997,16 +2197,15 @@
-

Returns

+

Returns

GST_RTSP_OK when if there is room in queue. GST_RTSP_ETIMEOUT when timeout was reached. GST_RTSP_EINTR when watch is flushing GST_RTSP_EINVAL when called with invalid parameters.

-

-

Since 1.4

+

Since: 1.4

@@ -2119,7 +2318,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspdefs +gstrtspdefs: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -241,7 +241,6 @@

Returns

a newly allocated string. g_free() after usage.

-


@@ -270,7 +269,6 @@

Returns

a string representation of method .

-


@@ -299,7 +297,6 @@

Returns

a string representation of version .

-


@@ -328,7 +325,6 @@

Returns

a string representation of field .

-


@@ -356,7 +352,6 @@

Returns

TRUE if multiple headers are allowed.

-


@@ -385,7 +380,6 @@

Returns

a string representation of code .

-


@@ -414,7 +408,6 @@

Returns

a new string of options . g_free() after usage.

-


@@ -443,9 +436,8 @@

Returns

a GstRTSPMethod

-

-

Since 1.2

+

Since: 1.2


@@ -474,7 +466,6 @@

a GstRTSPHeaderField for header or GST_RTSP_HDR_INVALID if the header field is unknown.

-


@@ -504,7 +495,6 @@

a GstRTSPMethod for method or GST_RTSP_INVALID if the method is unknown.

-

@@ -1669,7 +1659,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspextension +gstrtspextension: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -66,6 +66,7 @@

Functions

+

Types and Values

@@ -105,7 +106,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspmessage +gstrtspmessage: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -188,6 +188,38 @@ GstRTSPResult +gst_rtsp_message_add_header_by_name () + + + + +GstRTSPResult + + +gst_rtsp_message_take_header_by_name () + + + + +GstRTSPResult + + +gst_rtsp_message_remove_header_by_name () + + + + +GstRTSPResult + + +gst_rtsp_message_get_header_by_name () + + + + +GstRTSPResult + + gst_rtsp_message_append_headers () @@ -287,7 +319,6 @@

Returns

a GstRTSPResult.

-


@@ -317,7 +348,6 @@

Returns

a GstRTSPResult.

-


@@ -348,7 +378,6 @@

Returns

GST_RTSP_OK.

-


@@ -376,7 +405,6 @@

Returns

a GstRTSPResult.

-


@@ -404,7 +432,6 @@

Returns

the message type.

-


@@ -449,7 +476,6 @@

Returns

a GstRTSPResult.

-


@@ -495,7 +521,6 @@

Returns

a GstRTSPResult.

-


@@ -551,7 +576,6 @@

Returns

a GstRTSPResult.

-


@@ -608,7 +632,6 @@

Returns

a GstRTSPResult.

-


@@ -664,7 +687,6 @@

Returns

a GstRTSPResult.

-


@@ -720,7 +742,6 @@

Returns

a GstRTSPResult.

-


@@ -758,7 +779,6 @@

Returns

a GstRTSPResult.

-


@@ -794,7 +814,6 @@

Returns

a GstRTSPResult.

-


@@ -831,7 +850,6 @@

Returns

a GstRTSPResult.

-


@@ -877,7 +895,6 @@

Returns

a GstRTSPResult.

-


@@ -923,7 +940,6 @@

Returns

a GstRTSPResult.

-


@@ -969,7 +985,6 @@

Returns

a GstRTSPResult.

-


@@ -1024,11 +1039,205 @@

GST_RTSP_OK when field was found, GST_RTSP_ENOTIMPL if the key was not found.

-


+

gst_rtsp_message_add_header_by_name ()

+
GstRTSPResult
+gst_rtsp_message_add_header_by_name (GstRTSPMessage *msg,
+                                     const gchar *header,
+                                     const gchar *value);
+

Add a header with key header + and value + to msg +. This function takes a copy +of value +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstRTSPMessage

 

header

header string.

[transfer none]

value

the value of the header.

[transfer none]
+
+
+

Returns

+

a GstRTSPResult.

+
+

Since: 1.6

+
+
+
+

gst_rtsp_message_take_header_by_name ()

+
GstRTSPResult
+gst_rtsp_message_take_header_by_name (GstRTSPMessage *msg,
+                                      const gchar *header,
+                                      gchar *value);
+

Add a header with key header + and value + to msg +. This function takes +ownership of value +, but not of header +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstRTSPMessage

 

header

a header string.

[transfer none]

value

the value of the header.

[transfer full]
+
+
+

Returns

+

a GstRTSPResult.

+
+

Since: 1.6

+
+
+
+

gst_rtsp_message_remove_header_by_name ()

+
GstRTSPResult
+gst_rtsp_message_remove_header_by_name
+                               (GstRTSPMessage *msg,
+                                const gchar *header,
+                                gint index);
+

Remove the index + header with key header + from msg +. If index + equals -1, +all matching headers will be removed.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

msg

a GstRTSPMessage

 

header

the header string

 

index

the index of the header

 
+
+
+

Returns

+

a GstRTSPResult

+
+

Since: 1.6

+
+
+
+

gst_rtsp_message_get_header_by_name ()

+
GstRTSPResult
+gst_rtsp_message_get_header_by_name (GstRTSPMessage *msg,
+                                     const gchar *header,
+                                     gchar **value,
+                                     gint index);
+

Get the index + header value with key header + from msg +. The result in value + +stays valid as long as it remains present in msg +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

msg

a GstRTSPMessage

 

header

a GstRTSPHeaderField

 

value

pointer to hold the result.

[out][transfer none]

index

the index of the header

 
+
+
+

Returns

+

GST_RTSP_OK when field +was found, GST_RTSP_ENOTIMPL if the key +was not found.

+
+

Since: 1.6

+
+
+

gst_rtsp_message_append_headers ()

GstRTSPResult
 gst_rtsp_message_append_headers (const GstRTSPMessage *msg,
@@ -1038,7 +1247,7 @@
  suitable
 for transmission.

-

Parameters

+

Parameters

@@ -1060,9 +1269,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-


@@ -1076,7 +1284,7 @@ to a copy of data .

-

Parameters

+

Parameters

@@ -1104,9 +1312,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-


@@ -1123,7 +1330,7 @@ data .

-

Parameters

+

Parameters

@@ -1151,9 +1358,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-


@@ -1169,7 +1375,7 @@ is valid and unchanged.

-

Parameters

+

Parameters

@@ -1197,9 +1403,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-


@@ -1216,7 +1421,7 @@ the body and size of msg will be set to NULL and 0 respectively.

-

Parameters

+

Parameters

@@ -1244,9 +1449,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-


@@ -1257,7 +1461,7 @@

Dump the contents of msg to stdout.

-

Parameters

+

Parameters

@@ -1272,9 +1476,8 @@
-

Returns

+

Returns

GST_RTSP_OK.

-

@@ -1387,7 +1590,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtsprange +gstrtsprange: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -156,7 +156,6 @@

Returns

GST_RTSP_OK on success.

-


@@ -206,9 +205,8 @@

Returns

TRUE on success.

-

-

Since 1.2

+

Since: 1.2


@@ -236,7 +234,6 @@

Returns

The string representation of range . g_free() after usage.

-


@@ -273,7 +270,6 @@

Returns

TRUE if the range could be converted

-


@@ -482,7 +478,7 @@ -

Since 1.2

+

Since: 1.2


@@ -539,7 +535,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtsptransport +gstrtsptransport: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -164,7 +164,6 @@

Returns

a GstRTSPResult.

-


@@ -192,7 +191,6 @@

Returns

GST_RTSP_OK.

-


@@ -229,7 +227,6 @@

Returns

a GstRTSPResult.

-


@@ -259,7 +256,6 @@

Returns

a string describing the RTSP transport or NULL when the transport is invalid.

-


@@ -302,7 +298,6 @@

Returns

GST_RTSP_OK.

-


@@ -351,7 +346,6 @@

Returns

GST_RTSP_OK.

-


@@ -379,7 +373,6 @@

Returns

GST_RTSP_OK.

-

@@ -688,7 +681,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspurl +gstrtspurl: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -161,7 +161,6 @@

Returns

a GstRTSPResult.

-


@@ -190,7 +189,6 @@

Returns

a copy of url . Free with gst_rtsp_url_free() after usage.

-


@@ -241,7 +239,6 @@

Returns

a string with the request URI. g_free() after usage.

-


@@ -278,7 +275,6 @@

Returns

GST_RTSP_OK.

-


@@ -314,7 +310,6 @@

Returns

GST_RTSP_OK.

-


@@ -434,7 +429,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstsdpmessage +gstsdpmessage: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -132,6 +132,14 @@ GstSDPResult +gst_sdp_message_copy () + + + + +GstSDPResult + + gst_sdp_message_init () @@ -636,6 +644,14 @@ GstSDPResult +gst_sdp_media_copy () + + + + +GstSDPResult + + gst_sdp_media_init () @@ -1100,9 +1116,8 @@

Returns

GST_SDP_OK .

-

-

Since 1.2

+

Since: 1.2


@@ -1129,9 +1144,8 @@

Returns

GST_SDP_OK .

-

-

Since 1.2

+

Since: 1.2


@@ -1172,9 +1186,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1201,9 +1214,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1253,9 +1265,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1282,9 +1293,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1325,9 +1335,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1354,9 +1363,8 @@

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -1399,9 +1407,8 @@

Returns

GST_SDP_OK .

-

-

Since 1.2

+

Since: 1.2


@@ -1428,9 +1435,8 @@

Returns

GST_SDP_OK .

-

-

Since 1.2

+

Since: 1.2


@@ -1457,11 +1463,49 @@

Returns

a GstSDPResult.

-


+

gst_sdp_message_copy ()

+
GstSDPResult
+gst_sdp_message_copy (const GstSDPMessage *msg,
+                      GstSDPMessage **copy);
+

Allocate a new copy of msg + and store the result in copy +. The value in +copy + should be release with gst_sdp_message_free function.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

msg

a GstSDPMessage

 

copy

pointer to new GstSDPMessage.

[out][transfer full]
+
+
+

Returns

+

a GstSDPResult

+
+

Since: 1.2

+
+
+

gst_sdp_message_init ()

GstSDPResult
 gst_sdp_message_init (GstSDPMessage *msg);
@@ -1472,7 +1516,7 @@

When this function is invoked on newly allocated data (with malloc or on the stack), its contents should be set to 0 before calling this function.

-

Parameters

+

Parameters

@@ -1487,9 +1531,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1504,7 +1547,7 @@ was allocated on the stack and initialized with gst_sdp_message_init().

-

Parameters

+

Parameters

@@ -1519,9 +1562,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1536,7 +1578,7 @@ was dynamically allocated with gst_sdp_message_new().

-

Parameters

+

Parameters

@@ -1551,9 +1593,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1569,7 +1610,7 @@ msg .

-

Parameters

+

Parameters

@@ -1596,9 +1637,8 @@
-

Returns

+

Returns

GST_SDP_OK on success.

-


@@ -1609,7 +1649,7 @@

Convert the contents of msg to a text string.

-

Parameters

+

Parameters

@@ -1624,9 +1664,8 @@
-

Returns

+

Returns

A dynamically allocated string representing the SDP description.

-


@@ -1643,7 +1682,7 @@

where value is url encoded. This looslely resembles http://tools.ietf.org/html/draft-fujikawa-sdp-url-01

-

Parameters

+

Parameters

@@ -1665,9 +1704,8 @@
-

Returns

+

Returns

GST_SDP_OK on success.

-


@@ -1682,7 +1720,7 @@

@scheme:///[type=value *[&type=value]]

Where each value is url encoded.

-

Parameters

+

Parameters

@@ -1704,10 +1742,9 @@
-

Returns

+

Returns

a uri for msg .

-


@@ -1720,7 +1757,7 @@

Check if the given addr is a multicast address.

-

Parameters

+

Parameters

@@ -1747,10 +1784,9 @@
-

Returns

+

Returns

TRUE when addr is multicast.

-


@@ -1761,7 +1797,7 @@

Get the version in msg .

-

Parameters

+

Parameters

@@ -1776,9 +1812,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1790,7 +1825,7 @@

Set the version in msg .

-

Parameters

+

Parameters

@@ -1812,9 +1847,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1825,7 +1859,7 @@

Get the origin of msg .

-

Parameters

+

Parameters

@@ -1840,10 +1874,9 @@
-

Returns

+

Returns

a GstSDPOrigin. The result remains valid as long as msg is valid.

-


@@ -1860,7 +1893,7 @@

Configure the SDP origin in msg with the given parameters.

-

Parameters

+

Parameters

@@ -1907,9 +1940,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -1920,7 +1952,7 @@

Get the session name in msg .

-

Parameters

+

Parameters

@@ -1935,9 +1967,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1949,7 +1980,7 @@

Set the session name in msg .

-

Parameters

+

Parameters

@@ -1971,9 +2002,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -1984,7 +2014,7 @@

Get the information in msg .

-

Parameters

+

Parameters

@@ -1999,9 +2029,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2013,7 +2042,7 @@

Set the information in msg .

-

Parameters

+

Parameters

@@ -2035,9 +2064,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2048,7 +2076,7 @@

Get the URI in msg .

-

Parameters

+

Parameters

@@ -2063,9 +2091,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2077,7 +2104,7 @@

Set the URI in msg .

-

Parameters

+

Parameters

@@ -2099,9 +2126,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2112,7 +2138,7 @@

Get the number of emails in msg .

-

Parameters

+

Parameters

@@ -2127,10 +2153,9 @@
-

Returns

+

Returns

the number of emails in msg .

-


@@ -2143,7 +2168,7 @@ from msg .

-

Parameters

+

Parameters

@@ -2165,10 +2190,9 @@
-

Returns

+

Returns

the email at position idx .

-


@@ -2185,7 +2209,7 @@ When -1 is given as idx , the email is inserted at the end.

-

Parameters

+

Parameters

@@ -2212,11 +2236,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2230,7 +2253,7 @@ with email .

-

Parameters

+

Parameters

@@ -2257,11 +2280,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2273,7 +2295,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -2295,11 +2317,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2311,7 +2332,7 @@ to the list of emails in msg .

-

Parameters

+

Parameters

@@ -2333,9 +2354,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2346,7 +2366,7 @@

Get the number of phones in msg .

-

Parameters

+

Parameters

@@ -2361,10 +2381,9 @@
-

Returns

+

Returns

the number of phones in msg .

-


@@ -2377,7 +2396,7 @@ from msg .

-

Parameters

+

Parameters

@@ -2399,10 +2418,9 @@
-

Returns

+

Returns

the phone at position idx .

-


@@ -2419,7 +2437,7 @@ When -1 is given as idx , the phone is inserted at the end.

-

Parameters

+

Parameters

@@ -2446,11 +2464,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2464,7 +2481,7 @@ with phone .

-

Parameters

+

Parameters

@@ -2491,11 +2508,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2507,7 +2523,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -2529,11 +2545,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2545,7 +2560,7 @@ to the list of phones in msg .

-

Parameters

+

Parameters

@@ -2567,9 +2582,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2580,7 +2594,7 @@

Get the connection of msg .

-

Parameters

+

Parameters

@@ -2595,10 +2609,9 @@
-

Returns

+

Returns

a GstSDPConnection. The result remains valid as long as msg is valid.

-


@@ -2614,7 +2627,7 @@

Configure the SDP connection in msg with the given parameters.

-

Parameters

+

Parameters

@@ -2657,9 +2670,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2670,7 +2682,7 @@

Get the number of bandwidth information in msg .

-

Parameters

+

Parameters

@@ -2685,10 +2697,9 @@
-

Returns

+

Returns

the number of bandwidth information in msg .

-


@@ -2701,7 +2712,7 @@ from msg .

-

Parameters

+

Parameters

@@ -2723,9 +2734,8 @@
-

Returns

+

Returns

a GstSDPBandwidth.

-


@@ -2742,7 +2752,7 @@ When -1 is given as idx , the bandwidth is inserted at the end.

-

Parameters

+

Parameters

@@ -2769,11 +2779,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2787,7 +2796,7 @@ with bw .

-

Parameters

+

Parameters

@@ -2814,11 +2823,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2830,7 +2838,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -2852,11 +2860,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -2868,7 +2875,7 @@

Add the specified bandwidth information to msg .

-

Parameters

+

Parameters

@@ -2895,9 +2902,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -2908,7 +2914,7 @@

Get the number of time information entries in msg .

-

Parameters

+

Parameters

@@ -2923,10 +2929,9 @@
-

Returns

+

Returns

the number of time information entries in msg .

-


@@ -2939,7 +2944,7 @@ from msg .

-

Parameters

+

Parameters

@@ -2961,9 +2966,8 @@
-

Returns

+

Returns

a GstSDPTime.

-


@@ -2980,7 +2984,7 @@ When -1 is given as idx , the times are inserted at the end.

-

Parameters

+

Parameters

@@ -3007,11 +3011,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3025,7 +3028,7 @@ with t .

-

Parameters

+

Parameters

@@ -3052,11 +3055,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3068,7 +3070,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -3090,11 +3092,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3109,7 +3110,7 @@ to msg .

-

Parameters

+

Parameters

@@ -3141,9 +3142,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3154,7 +3154,7 @@

Get the number of time zone information entries in msg .

-

Parameters

+

Parameters

@@ -3169,10 +3169,9 @@
-

Returns

+

Returns

the number of time zone information entries in msg .

-


@@ -3185,7 +3184,7 @@ from msg .

-

Parameters

+

Parameters

@@ -3207,9 +3206,8 @@
-

Returns

+

Returns

a GstSDPZone.

-


@@ -3226,7 +3224,7 @@ When -1 is given as idx , the zone is inserted at the end.

-

Parameters

+

Parameters

@@ -3250,11 +3248,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3268,7 +3265,7 @@ with zone .

-

Parameters

+

Parameters

@@ -3295,11 +3292,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3311,7 +3307,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -3333,11 +3329,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3349,7 +3344,7 @@

Add time zone information to msg .

-

Parameters

+

Parameters

@@ -3376,9 +3371,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3389,7 +3383,7 @@

Get the encryption information from msg .

-

Parameters

+

Parameters

@@ -3404,9 +3398,8 @@
-

Returns

+

Returns

a GstSDPKey.

-


@@ -3419,7 +3412,7 @@

Adds the encryption information to msg .

-

Parameters

+

Parameters

@@ -3446,9 +3439,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3459,7 +3451,7 @@

Get the number of attributes in msg .

-

Parameters

+

Parameters

@@ -3474,10 +3466,9 @@
-

Returns

+

Returns

the number of attributes in msg .

-


@@ -3490,7 +3481,7 @@ in msg .

-

Parameters

+

Parameters

@@ -3512,10 +3503,9 @@
-

Returns

+

Returns

the GstSDPAttribute at position idx .

-


@@ -3528,7 +3518,7 @@ in msg .

-

Parameters

+

Parameters

@@ -3550,10 +3540,9 @@
-

Returns

+

Returns

the attribute value of the first attribute with key .

-


@@ -3568,7 +3557,7 @@ in msg .

-

Parameters

+

Parameters

@@ -3595,11 +3584,10 @@
-

Returns

+

Returns

the attribute value of the nth attribute with key .

-


@@ -3616,7 +3604,7 @@ When -1 is given as idx , the attribute is inserted at the end.

-

Parameters

+

Parameters

@@ -3643,11 +3631,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3661,7 +3648,7 @@ with attr .

-

Parameters

+

Parameters

@@ -3688,11 +3675,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3704,7 +3690,7 @@ at index idx .

-

Parameters

+

Parameters

@@ -3726,11 +3712,10 @@
-

Returns

+

Returns

a GstSDPResult.

-

-

Since 1.2

+

Since: 1.2


@@ -3744,7 +3729,7 @@ to msg .

-

Parameters

+

Parameters

@@ -3771,10 +3756,9 @@
-

Returns

+

Returns

GST_SDP_OK .

-


@@ -3785,7 +3769,7 @@

Get the number of media descriptions in msg .

-

Parameters

+

Parameters

@@ -3800,10 +3784,9 @@
-

Returns

+

Returns

the number of media descriptions in msg .

-


@@ -3816,7 +3799,7 @@ in msg .

-

Parameters

+

Parameters

@@ -3838,9 +3821,8 @@
-

Returns

+

Returns

a GstSDPMedia.

-


@@ -3857,7 +3839,7 @@ will have to be reinitialized with gst_sdp_media_init() before it can be used again.

-

Parameters

+

Parameters

@@ -3879,9 +3861,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3892,7 +3873,7 @@

Dump the parsed contents of msg to stdout.

-

Parameters

+

Parameters

@@ -3907,9 +3888,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3920,7 +3900,7 @@

Allocate a new GstSDPMedia and store the result in media .

-

Parameters

+

Parameters

@@ -3935,13 +3915,51 @@
-

Returns

+

Returns

a GstSDPResult.

-


+

gst_sdp_media_copy ()

+
GstSDPResult
+gst_sdp_media_copy (const GstSDPMedia *media,
+                    GstSDPMedia **copy);
+

Allocate a new copy of media + and store the result in copy +. The value in +copy + should be release with gst_sdp_media_free function.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

media

a GstSDPMedia

 

copy

pointer to new GstSDPMedia.

[out][transfer full]
+
+
+

Returns

+

a GstSDPResult

+
+

Since: 1.2

+
+
+

gst_sdp_media_init ()

GstSDPResult
 gst_sdp_media_init (GstSDPMedia *media);
@@ -3952,7 +3970,7 @@

When this function is invoked on newly allocated data (with malloc or on the stack), its contents should be set to 0 before calling this function.

-

Parameters

+

Parameters

@@ -3967,9 +3985,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -3984,7 +4001,7 @@ was allocated on the stack and initialized with gst_sdp_media_init().

-

Parameters

+

Parameters

@@ -3999,9 +4016,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -4016,7 +4032,7 @@ was dynamically allocated with gst_sdp_media_new().

-

Parameters

+

Parameters

@@ -4031,9 +4047,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -4044,7 +4059,7 @@

Convert the contents of media to a text string.

-

Parameters

+

Parameters

@@ -4059,9 +4074,8 @@
-

Returns

+

Returns

A dynamically allocated string representing the media.

-


@@ -4072,7 +4086,7 @@

Get the media description of media .

-

Parameters

+

Parameters

@@ -4087,9 +4101,8 @@
-

Returns

+

Returns

the media description.

-


@@ -4102,7 +4115,7 @@ to med .

-

Parameters

+

Parameters

@@ -4124,9 +4137,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -4137,7 +4149,7 @@

Get the port number for media .

-

Parameters

+

Parameters

@@ -4152,10 +4164,9 @@
-

Returns

+

Returns

the port number of media .

-


@@ -4166,7 +4177,7 @@

Get the number of ports for media .

-

Parameters

+

Parameters

@@ -4181,10 +4192,9 @@
-

Returns

+

Returns

the number of ports for media .

-


@@ -4197,7 +4207,7 @@

Set the port information in media .

-

Parameters

+

Parameters

@@ -4224,9 +4234,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -4237,7 +4246,7 @@

Get the transport protocol of media

-

Parameters

+

Parameters

@@ -4252,10 +4261,9 @@
-

Returns

+

Returns

the transport protocol of media .

-


@@ -4268,7 +4276,7 @@ to proto .

-

Parameters

+

Parameters

@@ -4290,9 +4298,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -4303,7 +4310,7 @@

Get the number of formats in media .

-

Parameters

+

Parameters

@@ -4318,10 +4325,9 @@
-

Returns

+

Returns

the number of formats in media .

-


@@ -4334,7 +4340,7 @@ in media .

-

Parameters

+

Parameters

@@ -4356,10 +4362,9 @@
-

Returns

+

Returns

the format at position idx .

-


@@ -4375,7 +4380,7 @@ is -1, the format is appended.

-

Parameters

+

Parameters

@@ -4402,11 +4407,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4420,7 +4424,7 @@ with format .

-

Parameters

+

Parameters

@@ -4447,11 +4451,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4463,7 +4466,7 @@ at idx .

-

Parameters

+

Parameters

@@ -4485,11 +4488,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4500,7 +4502,7 @@

Add the format information to media .

-

Parameters

+

Parameters

@@ -4522,9 +4524,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -4535,7 +4536,7 @@

Get the information of media

-

Parameters

+

Parameters

@@ -4550,10 +4551,9 @@
-

Returns

+

Returns

the information of media .

-


@@ -4566,7 +4566,7 @@ to information .

-

Parameters

+

Parameters

@@ -4588,9 +4588,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -4601,7 +4600,7 @@

Get the number of connection fields in media .

-

Parameters

+

Parameters

@@ -4616,10 +4615,9 @@
-

Returns

+

Returns

the number of connections in media .

-


@@ -4632,7 +4630,7 @@ in media .

-

Parameters

+

Parameters

@@ -4654,10 +4652,9 @@
-

Returns

+

Returns

the GstSDPConnection at position idx .

-


@@ -4673,7 +4670,7 @@ is -1, the connection is appended.

-

Parameters

+

Parameters

@@ -4700,11 +4697,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4718,7 +4714,7 @@ with conn .

-

Parameters

+

Parameters

@@ -4745,11 +4741,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4761,7 +4756,7 @@ at idx .

-

Parameters

+

Parameters

@@ -4783,11 +4778,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4802,7 +4796,7 @@

Add the given connection parameters to media .

-

Parameters

+

Parameters

@@ -4845,9 +4839,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -4858,7 +4851,7 @@

Get the number of bandwidth fields in media .

-

Parameters

+

Parameters

@@ -4873,10 +4866,9 @@
-

Returns

+

Returns

the number of bandwidths in media .

-


@@ -4889,7 +4881,7 @@ in media .

-

Parameters

+

Parameters

@@ -4911,10 +4903,9 @@
-

Returns

+

Returns

the GstSDPBandwidth at position idx .

-


@@ -4930,7 +4921,7 @@ is -1, the bandwidth is appended.

-

Parameters

+

Parameters

@@ -4957,11 +4948,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -4975,7 +4965,7 @@ with bw .

-

Parameters

+

Parameters

@@ -5002,11 +4992,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -5018,7 +5007,7 @@ at idx .

-

Parameters

+

Parameters

@@ -5040,11 +5029,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -5058,7 +5046,7 @@ to media .

-

Parameters

+

Parameters

@@ -5085,9 +5073,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-


@@ -5098,7 +5085,7 @@

Get the encryption information from media .

-

Parameters

+

Parameters

@@ -5113,9 +5100,8 @@
-

Returns

+

Returns

a GstSDPKey.

-


@@ -5128,7 +5114,7 @@

Adds the encryption information to media .

-

Parameters

+

Parameters

@@ -5155,9 +5141,8 @@
-

Returns

+

Returns

a GstSDPResult.

-


@@ -5168,7 +5153,7 @@

Get the number of attribute fields in media .

-

Parameters

+

Parameters

@@ -5183,10 +5168,9 @@
-

Returns

+

Returns

the number of attributes in media .

-


@@ -5199,7 +5183,7 @@ in media .

-

Parameters

+

Parameters

@@ -5221,10 +5205,9 @@
-

Returns

+

Returns

the GstSDPAttribute at position idx .

-


@@ -5237,7 +5220,7 @@ in media .

-

Parameters

+

Parameters

@@ -5259,10 +5242,9 @@
-

Returns

+

Returns

the first attribute value for key .

-


@@ -5277,7 +5259,7 @@ in media .

-

Parameters

+

Parameters

@@ -5304,10 +5286,9 @@
-

Returns

+

Returns

the nth attribute value.

-


@@ -5323,7 +5304,7 @@ is -1, the attribute is appended.

-

Parameters

+

Parameters

@@ -5350,11 +5331,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -5368,7 +5348,7 @@ with attr .

-

Parameters

+

Parameters

@@ -5395,11 +5375,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -5411,7 +5390,7 @@ at idx .

-

Parameters

+

Parameters

@@ -5433,11 +5412,10 @@
-

Returns

+

Returns

GST_SDP_OK.

-

-

Since 1.2

+

Since: 1.2


@@ -5451,7 +5429,7 @@ to media .

-

Parameters

+

Parameters

@@ -5478,9 +5456,8 @@
-

Returns

+

Returns

GST_SDP_OK.

-

@@ -6039,7 +6016,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gststreamvolume +gststreamvolume: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -200,7 +200,6 @@

Returns

The current stream volume as linear factor

-


@@ -262,7 +261,6 @@

Returns

Returns TRUE if the stream is muted

-


@@ -332,7 +330,6 @@

Returns

the converted volume

-

@@ -405,7 +402,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagdemux +gsttagdemux: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -109,6 +109,7 @@

Functions

+

Types and Values

@@ -274,7 +275,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagexif.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagexif.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagexif.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagexif.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagexif +gsttagexif: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -126,7 +126,6 @@

Returns

A GstBuffer containing the tag entries followed by the tag data

-


@@ -155,7 +154,6 @@

Returns

A GstBuffer containing the data

-


@@ -199,7 +197,6 @@

Returns

The parsed taglist

-


@@ -227,7 +224,6 @@

Returns

The taglist

-

@@ -240,7 +236,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttag.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttag.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttag.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttag.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttag +gsttag: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -63,6 +63,14 @@ gst_tag_parse_extended_comment () + + +GstSample * + + +gst_tag_image_data_to_image_sample () + + @@ -207,6 +215,10 @@ GST_TAG_ID3V2_HEADER_SIZE +#define +GST_TAG_MUSICAL_KEY + + enum GstTagImageType @@ -285,7 +297,6 @@

Returns

a newly-allocated string in UTF-8 encoding, or NULL

-


@@ -348,7 +359,67 @@

Returns

TRUE if the string could be parsed, otherwise FALSE

-

+
+ +
+
+

gst_tag_image_data_to_image_sample ()

+
GstSample *
+gst_tag_image_data_to_image_sample (const guint8 *image_data,
+                                    guint image_data_len,
+                                    GstTagImageType image_type);
+

Helper function for tag-reading plugins to create a GstSample suitable to +add to a GstTagList as an image tag (such as GST_TAG_IMAGE or +GST_TAG_PREVIEW_IMAGE) from the encoded image data and an (optional) image +type.

+

Background: cover art and other images in tags are usually stored as a +blob of binary image data, often accompanied by a MIME type or some other +content type string (e.g. 'png', 'jpeg', 'jpg'). Sometimes there is also an +'image type' to indicate what kind of image this is (e.g. front cover, +back cover, artist, etc.). The image data may also be an URI to the image +rather than the image itself.

+

In GStreamer, image tags are GstSamples containing the raw image +data, with the sample caps describing the content type of the image +(e.g. image/jpeg, image/png, text/uri-list). The sample info may contain +an additional 'image-type' field of GST_TYPE_TAG_IMAGE_TYPE to describe +the type of image (front cover, back cover etc.). GST_TAG_PREVIEW_IMAGE +tags should not carry an image type, their type is already indicated via +the special tag name.

+

This function will do various checks and typefind the encoded image +data (we can't trust the declared mime type).

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

image_data

the (encoded) image

 

image_data_len

the length of the encoded image data at image_data +

 

image_type

type of the image, or GST_TAG_IMAGE_TYPE_UNDEFINED. Pass +GST_TAG_IMAGE_TYPE_NONE if no image type should be set at all (e.g. +for preview images)

 
+
+
+

Returns

+

a newly-allocated image sample for use in tag lists, or NULL

@@ -656,11 +727,25 @@
+

GST_TAG_MUSICAL_KEY

+
#define GST_TAG_MUSICAL_KEY                   "musical-key"
+
+

Musical key in which the sound starts. It is represented as a string +with a maximum length of three characters. The ground keys are +represented with "A","B","C","D","E", "F" and "G" and halfkeys +represented with "b" and "#". Minor is represented as "m" (e.g. "Dbm"). +Off key is represented with an "o" only. +This notation might be extended in the future to support non-minor/major +keys.

+

Since: 1.2

+
+
+

enum GstTagImageType

Type of image contained in an image tag (specified as "image-type" field in the info structure in the image's GstSample)

-

Members

+

Members

@@ -672,7 +757,7 @@ @@ -821,7 +906,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagid3.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagid3.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagid3.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagid3.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagid3 +gsttagid3: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -136,7 +136,6 @@

Returns

the number of ID3v1 genres that can be identified

-


@@ -163,7 +162,6 @@

Returns

the genre or NULL if no genre is associated with that ID.

-


@@ -191,7 +189,6 @@

Returns

A new tag list or NULL if the data was not an ID3v1 tag.

-


@@ -218,7 +215,6 @@

Returns

The corresponding GStreamer tag or NULL if none exists.

-


@@ -254,7 +250,6 @@

Returns

The corresponding GStreamer tag or NULL if none exists.

-


@@ -281,7 +276,6 @@

Returns

The corresponding ID3v2 tag or NULL if none exists.

-


@@ -293,7 +287,7 @@ guint image_data_len, guint id3_picture_type);

Adds an image from an ID3 APIC frame (or similar, such as used in FLAC) -to the given tag list. Also see gst_tag_image_data_to_image_sample() for +to the given tag list. Also see gst_tag_image_data_to_image_sample() for more information on image tags in GStreamer.

Parameters

@@ -332,7 +326,6 @@

Returns

TRUE if the image was processed, otherwise FALSE

-


@@ -360,7 +353,6 @@

Returns

Size of tag, or 0 if header is invalid or too small.

-


@@ -389,7 +381,6 @@

Returns

A new GstTagList with all tags that could be extracted from the given vorbiscomment buffer or NULL on error.

-

@@ -402,7 +393,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttaglanguagecodes +gsttaglanguagecodes: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -155,7 +155,6 @@ not be mapped to a language name. The returned string must not be modified and does not need to freed; it will stay valid until the application is terminated.

-


@@ -209,7 +208,6 @@ , or NULL if no mapping is known. The returned string must not be modified or freed.

-


@@ -245,7 +243,6 @@ , or NULL if no mapping is known. The returned string must not be modified or freed.

-


@@ -281,7 +278,6 @@ , or NULL if no mapping is known. The returned string must not be modified or freed.

-


@@ -313,7 +309,6 @@

Returns

TRUE if the two- or three-letter language code in lang_code is a valid ISO-639 language code.

-

@@ -326,7 +321,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttaglicenses +gsttaglicenses: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -145,7 +145,6 @@

Returns

the flags of the license, or 0 if the license is unknown

-


@@ -174,7 +173,6 @@

Returns

the nick name of the license, or NULL if the license is unknown

-


@@ -204,7 +202,6 @@

Returns

the title of the license, or NULL if the license is unknown or no title is available.

-


@@ -234,7 +231,6 @@

Returns

the description of the license, or NULL if the license is unknown or a description is not available.

-


@@ -268,7 +264,6 @@

Returns

the jurisdiction code of the license, or NULL if the license is unknown or is not specific to a particular jurisdiction.

-


@@ -297,7 +292,6 @@

Returns

the version of the license, or NULL if the license is not known or has no version

-


@@ -458,7 +452,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagmux.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagmux.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagmux.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagmux.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagmux +gsttagmux: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -86,6 +86,7 @@

Functions

+

Types and Values

@@ -162,7 +163,6 @@
+
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagvorbis +gsttagvorbis: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -136,7 +136,6 @@

Returns

The corresponding GStreamer tag or NULL if none exists.

-


@@ -163,7 +162,6 @@

Returns

The corresponding vorbiscomment tag or NULL if none exists.

-


@@ -299,7 +297,6 @@

Returns

A new GstTagList with all tags that could be extracted from the given vorbiscomment buffer or NULL on error.

-


@@ -350,7 +347,6 @@

Returns

A new GstTagList with all tags that could be extracted from the given vorbiscomment buffer or NULL on error.

-


@@ -399,7 +395,6 @@

Returns

A new GstBuffer containing a vorbiscomment buffer with all tags that could be converted from the given tag list.

-

@@ -412,7 +407,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagxmp +gsttagxmp: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -102,7 +102,6 @@

Returns

new taglist or NULL, free the list when done

-


@@ -145,7 +144,6 @@

Returns

new buffer or NULL, unref the buffer when done

-


@@ -171,7 +169,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gsttagxmpwriter +gsttagxmpwriter: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -192,7 +192,6 @@

Returns

TRUE if it is going to be used

-


@@ -264,7 +263,6 @@ +
Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,509 @@ + + + + +GstVideoChroma: GStreamer Base Plugins 1.0 Library Reference Manual + + + + + + + + + +

GST_TAG_IMAGE_TYPE_NONE

No image type. Can be used to - tell functions such as gst_tag_image_data_to_image_sample() that no + tell functions such as gst_tag_image_data_to_image_sample() that no image type should be set.

 
+ + + + + + +
+
+
+ + +
+

GstVideoChroma

+

GstVideoChroma — Functions and utility object for operating on chroma video planes

+
+
+

Functions

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+GstVideoChromaSite + +gst_video_chroma_from_string () +
const gchar * + +gst_video_chroma_to_string () +
+void + +gst_video_chroma_resample () +
+void + +gst_video_chroma_resample_free () +
+void + +gst_video_chroma_resample_get_info () +
+GstVideoChromaResample * + +gst_video_chroma_resample_new () +
+
+
+

Types and Values

+
++++ + + + + + + + + + + + + + + + + + + +
enumGstVideoChromaSite
enumGstVideoChromaFlags
enumGstVideoChromaMethod
 GstVideoChromaResample
+
+
+

Includes

+
#include <gst/video/video-chroma.h>
+
+
+
+

Description

+

The functions gst_video_chroma_from_string() and gst_video_chroma_to_string() convert +between GstVideoChromaSite and string descriptions.

+

GstVideoChromaResample is a utility object for resampling chroma planes +and converting between different chroma sampling sitings.

+
+
+

Functions

+
+

gst_video_chroma_from_string ()

+
GstVideoChromaSite
+gst_video_chroma_from_string (const gchar *s);
+

Convert s + to a GstVideoChromaSite

+
+

Parameters

+
+++++ + + + + + +

s

a chromasite string

 
+
+
+

Returns

+

a GstVideoChromaSite or GST_VIDEO_CHROMA_SITE_UNKNOWN when s +does +not contain a valid chroma description.

+
+
+
+
+

gst_video_chroma_to_string ()

+
const gchar *
+gst_video_chroma_to_string (GstVideoChromaSite site);
+

Converts site + to its string representation.

+
+

Parameters

+
+++++ + + + + + +

site

a GstVideoChromaSite

 
+
+
+

Returns

+

a string describing site +.

+
+
+
+
+

gst_video_chroma_resample ()

+
void
+gst_video_chroma_resample (GstVideoChromaResample *resample,
+                           gpointer lines[],
+                           gint width);
+

Perform resampling of width + chroma pixels in lines +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

resample

a GstVideoChromaResample

 

lines

pixel lines

 

width

the number of pixels on one line

 
+
+
+
+
+

gst_video_chroma_resample_free ()

+
void
+gst_video_chroma_resample_free (GstVideoChromaResample *resample);
+

Free resample +

+
+

Parameters

+
+++++ + + + + + +

resample

a GstVideoChromaResample

 
+
+
+
+
+

gst_video_chroma_resample_get_info ()

+
void
+gst_video_chroma_resample_get_info (GstVideoChromaResample *resample,
+                                    guint *n_lines,
+                                    gint *offset);
+

The resampler must be fed n_lines + at a time. The first line should be +at offset +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

resample

a GstVideoChromaResample

 

n_lines

the number of input lines

 

offset

the first line

 
+
+
+
+
+

gst_video_chroma_resample_new ()

+
GstVideoChromaResample *
+gst_video_chroma_resample_new (GstVideoChromaMethod method,
+                               GstVideoChromaSite site,
+                               GstVideoChromaFlags flags,
+                               GstVideoFormat format,
+                               gint h_factor,
+                               gint v_factor);
+

Create a new resampler object for the given parameters. When h_factor + or +v_factor + is > 0, upsampling will be used, otherwise subsampling is +performed.

+

[skip]

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

method

a GstVideoChromaMethod

 

site

a GstVideoChromaSite

 

flags

GstVideoChromaFlags

 

format

the GstVideoFormat

 

h_factor

horizontal resampling factor

 

v_factor

vertical resampling factor

 
+
+
+

Returns

+

a new GstVideoChromaResample that should be freed with +gst_video_chroma_resample_free() after usage.

+
+
+
+
+

Types and Values

+
+

enum GstVideoChromaSite

+

Various Chroma sitings.

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

GST_VIDEO_CHROMA_SITE_UNKNOWN

+

unknown cositing

+
 

GST_VIDEO_CHROMA_SITE_NONE

+

no cositing

+
 

GST_VIDEO_CHROMA_SITE_H_COSITED

+

chroma is horizontally cosited

+
 

GST_VIDEO_CHROMA_SITE_V_COSITED

+

chroma is vertically cosited

+
 

GST_VIDEO_CHROMA_SITE_ALT_LINE

+

choma samples are sited on alternate lines

+
 

GST_VIDEO_CHROMA_SITE_COSITED

+

chroma samples cosited with luma samples

+
 

GST_VIDEO_CHROMA_SITE_JPEG

+

jpeg style cositing, also for mpeg1 and mjpeg

+
 

GST_VIDEO_CHROMA_SITE_MPEG2

+

mpeg2 style cositing

+
 

GST_VIDEO_CHROMA_SITE_DV

+

DV style cositing

+
 
+
+
+
+
+

enum GstVideoChromaFlags

+

Extra flags that influence the result from gst_video_chroma_resample_new().

+
+

Members

+
+++++ + + + + + + + + + + + + +

GST_VIDEO_CHROMA_FLAG_NONE

+

no flags

+
 

GST_VIDEO_CHROMA_FLAG_INTERLACED

+

the input is interlaced

+
 
+
+
+
+
+

enum GstVideoChromaMethod

+

Different subsampling and upsampling methods

+
+

Members

+
+++++ + + + + + + + + + + + + +

GST_VIDEO_CHROMA_METHOD_NEAREST

+

Duplicates the chroma samples when + upsampling and drops when subsampling

+
 

GST_VIDEO_CHROMA_METHOD_LINEAR

+

Uses linear interpolation to reconstruct + missing chroma and averaging to subsample

+
 
+
+
+
+
+

GstVideoChromaResample

+
typedef struct _GstVideoChromaResample GstVideoChromaResample;
+
+
+
+ + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoDecoder +GstVideoDecoder: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -313,6 +313,14 @@ gst_video_decoder_merge_tags () + + +GstCaps * + + +gst_video_decoder_proxy_getcaps () + +
@@ -355,7 +363,8 @@

Description

This base class is for video decoders turning encoded data into raw video frames.

-

The GstVideoDecoder base class and derived subclasses should cooperate as follows:

+

The GstVideoDecoder base class and derived subclasses should cooperate as +follows:

  1. Configuration

    @@ -372,7 +381,8 @@ parameters require reconfiguration.

  2. - Incoming data buffers are processed as needed, described in Data Processing below. + Incoming data buffers are processed as needed, described in Data + Processing below.

  3. GstVideoDecoder calls stop at end of all processing. @@ -388,15 +398,17 @@ corresponding to and referred to as 'frames'.

  4. - Each input frame is provided in turn to the subclass' handle_frame callback. + Each input frame is provided in turn to the subclass' handle_frame + callback. The ownership of the frame is given to the handle_frame callback.

  5. If codec processing results in decoded data, the subclass should call gst_video_decoder_finish_frame to have decoded data pushed. - downstream. Otherwise, the subclass must call gst_video_decoder_drop_frame, to - allow the base class to do timestamp and offset tracking, and possibly to - requeue the frame for a later attempt in the case of reverse playback. + downstream. Otherwise, the subclass must call + gst_video_decoder_drop_frame, to allow the base class to do timestamp + and offset tracking, and possibly to requeue the frame for a later + attempt in the case of reverse playback.

@@ -413,19 +425,20 @@
  • Seeking/Flushing

    • - When the pipeline is seeked or otherwise flushed, the subclass is informed via a call - to its reset callback, with the hard parameter set to true. This indicates the - subclass should drop any internal data queues and timestamps and prepare for a fresh - set of buffers to arrive for parsing and decoding. + When the pipeline is seeked or otherwise flushed, the subclass is + informed via a call to its reset callback, with the hard parameter + set to true. This indicates the subclass should drop any internal data + queues and timestamps and prepare for a fresh set of buffers to arrive + for parsing and decoding.

  • End Of Stream

    • - At end-of-stream, the subclass parse function may be called some final times with the - at_eos parameter set to true, indicating that the element should not expect any more data - to be arriving, and it should parse and remaining frames and call - gst_video_decoder_have_frame() if possible. + At end-of-stream, the subclass parse function may be called some final + times with the at_eos parameter set to true, indicating that the element + should not expect any more data to be arriving, and it should parse and + remaining frames and call gst_video_decoder_have_frame() if possible.

  • @@ -450,24 +463,28 @@ approach caters for seeking and duration reporting using estimated input bitrates. To enable it, a subclass should call gst_video_decoder_set_estimate_rate - to enable handling of incoming byte-streams.

    + to enable handling of incoming +byte-streams.

    The base class provides some support for reverse playback, in particular in case incoming data is not packetized or upstream does not provide -fragments on keyframe boundaries. However, the subclass should then be prepared -for the parsing and frame processing stage to occur separately (in normal -forward processing, the latter immediately follows the former), -The subclass also needs to ensure the parsing stage properly marks keyframes, -unless it knows the upstream elements will do so properly for incoming data.

    +fragments on keyframe boundaries. However, the subclass should then be +prepared for the parsing and frame processing stage to occur separately +(in normal forward processing, the latter immediately follows the former), +The subclass also needs to ensure the parsing stage properly marks +keyframes, unless it knows the upstream elements will do so properly for +incoming data.

    The bare minimum that a functional subclass needs to implement is:

    • Provide pad templates

    • - Inform the base class of output caps via gst_video_decoder_set_output_state + Inform the base class of output caps via + gst_video_decoder_set_output_state

    • Parse input data, if it is not considered packetized from upstream - Data will be provided to parse which should invoke gst_video_decoder_add_to_frame and - gst_video_decoder_have_frame to separate the data belonging to each video frame. + Data will be provided to parse which should invoke + gst_video_decoder_add_to_frame and gst_video_decoder_have_frame to + separate the data belonging to each video frame.

    • Accept data in handle_frame and provide decoded results to @@ -490,7 +507,7 @@ is set to the proper value to return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).

      -

      Parameters

      +

      Parameters

      @@ -546,7 +563,7 @@

      Gives the pointer to the sink GstPad object of the element.

      -

      Parameters

      +

      Parameters

      @@ -568,7 +585,7 @@

      Gives the pointer to the source GstPad object of the element.

      -

      Parameters

      +

      Parameters

      @@ -590,7 +607,7 @@

      Obtain a lock to protect the decoder function from concurrent access.

      -

      Parameters

      +

      Parameters

      @@ -612,7 +629,7 @@

      Release the lock that protects the decoder function from concurrent access.

      -

      Parameters

      +

      Parameters

      @@ -634,7 +651,7 @@

      Gives the segment of the element.

      -

      Parameters

      +

      Parameters

      @@ -656,7 +673,7 @@

      Gives the segment of the element.

      -

      Parameters

      +

      Parameters

      @@ -680,7 +697,7 @@

      Removes next n_bytes of input data and adds it to currently parsed frame.

      -

      Parameters

      +

      Parameters

      @@ -714,7 +731,7 @@

      You should use gst_video_decoder_allocate_output_frame() instead of this function, if possible at all.

      -

      Parameters

      +

      Parameters

      @@ -729,7 +746,7 @@
      -

      Returns

      +

      Returns

      allocated buffer, or NULL if no buffer could be allocated (e.g. when downstream is flushing or shutting down).

      [transfer full]

      @@ -749,7 +766,7 @@

      The buffer allocated here is owned by the frame and you should only keep references to the frame, not the buffer.

      -

      Parameters

      +

      Parameters

      @@ -771,9 +788,8 @@
      -

      Returns

      -

      GST_FLOW_OK if an output buffer could be allocated

      -

      +

      Returns

      +

      GST_FLOW_OK if an output buffer could be allocated


      @@ -790,7 +806,7 @@

      Unref the allocator after use it.

      -

      Parameters

      +

      Parameters

      @@ -826,7 +842,7 @@
      GstBufferPool *
       gst_video_decoder_get_buffer_pool (GstVideoDecoder *decoder);
      -

      Parameters

      +

      Parameters

      @@ -841,7 +857,7 @@
      -

      Returns

      +

      Returns

      the instance of the GstBufferPool used by the decoder; free it after use it.

      [transfer full]

      @@ -858,7 +874,7 @@ case and posts a QoS message with the frame's details on the bus. In any case, the frame is considered finished and released.

      -

      Parameters

      +

      Parameters

      @@ -880,9 +896,8 @@
      -

      Returns

      +

      Returns

      a GstFlowReturn, usually GST_FLOW_OK.

      -


      @@ -901,7 +916,7 @@ considered read-only. This function will also change the metadata of the buffer.

      -

      Parameters

      +

      Parameters

      @@ -923,9 +938,8 @@
      -

      Returns

      +

      Returns

      a GstFlowReturn resulting from sending data downstream

      -


    @@ -939,7 +953,7 @@ without any processing other than removing it from list of pending frames, after which it is considered finished and released.

    -

    Parameters

    +

    Parameters

    @@ -960,7 +974,7 @@
    -

    Since 1.2.2

    +

    Since: 1.2.2


    @@ -971,7 +985,7 @@ Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if negotiate fails.

    -

    Parameters

    +

    Parameters

    @@ -986,9 +1000,8 @@
    -

    Returns

    +

    Returns

    TRUE if the negotiation succeeded, else FALSE.

    -


    @@ -999,7 +1012,7 @@ int frame_number);

    Get a pending unfinished GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -1021,7 +1034,7 @@
    -

    Returns

    +

    Returns

    pending unfinished GstVideoCodecFrame identified by frame_number .

    [transfer full]

    @@ -1034,7 +1047,7 @@ gst_video_decoder_get_frames (GstVideoDecoder *decoder);

    Get all pending unfinished GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -1049,7 +1062,7 @@
    -

    Returns

    +

    Returns

    pending unfinished GstVideoCodecFrame.

    [transfer full][element-type GstVideoCodecFrame]

    @@ -1066,7 +1079,7 @@ In particular, a negative result means decoding in time is no longer possible and should therefore occur as soon/skippy as possible.

    -

    Parameters

    +

    Parameters

    @@ -1088,9 +1101,8 @@
    -

    Returns

    +

    Returns

    max decoding time.

    -


    @@ -1099,7 +1111,7 @@
    gint
     gst_video_decoder_get_max_errors (GstVideoDecoder *dec);
    -

    Parameters

    +

    Parameters

    @@ -1114,9 +1126,8 @@
    -

    Returns

    +

    Returns

    currently configured decoder tolerated error count.

    -


    @@ -1126,7 +1137,7 @@ gst_video_decoder_get_oldest_frame (GstVideoDecoder *decoder);

    Get the oldest pending unfinished GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -1141,7 +1152,7 @@
    -

    Returns

    +

    Returns

    oldest pending unfinished GstVideoCodecFrame.

    [transfer full]

    @@ -1154,7 +1165,7 @@

    Queries whether input data is considered packetized or not by the base class.

    -

    Parameters

    +

    Parameters

    @@ -1169,9 +1180,8 @@
    -

    Returns

    +

    Returns

    TRUE if input data is considered packetized.

    -


    @@ -1183,7 +1193,7 @@

    Returns the number of bytes previously added to the current frame by calling gst_video_decoder_add_to_frame().

    -

    Parameters

    +

    Parameters

    @@ -1198,11 +1208,10 @@
    -

    Returns

    +

    Returns

    The number of bytes pending for the current frame

    -

    -

    Since 1.4

    +

    Since: 1.4


    @@ -1210,7 +1219,7 @@
    gdouble
     gst_video_decoder_get_qos_proportion (GstVideoDecoder *decoder);
    -

    Parameters

    +

    Parameters

    @@ -1226,11 +1235,10 @@
    -

    Returns

    +

    Returns

    The current QoS proportion.

    -

    -

    Since 1.0.3

    +

    Since: 1.0.3


    @@ -1241,7 +1249,7 @@ metadata and passes it along for further processing, i.e. handle_frame .

    -

    Parameters

    +

    Parameters

    @@ -1256,9 +1264,8 @@
    -

    Returns

    +

    Returns

    a GstFlowReturn

    -


    @@ -1273,7 +1280,7 @@ and max_latency .

    -

    Parameters

    +

    Parameters

    @@ -1313,7 +1320,7 @@ latency is. Will also post a LATENCY message on the bus so the pipeline can reconfigure its global latency.

    -

    Parameters

    +

    Parameters

    @@ -1346,7 +1353,7 @@
    gint
     gst_video_decoder_get_estimate_rate (GstVideoDecoder *dec);
    -

    Parameters

    +

    Parameters

    @@ -1361,9 +1368,8 @@
    -

    Returns

    +

    Returns

    currently configured byte to time conversion setting

    -


    @@ -1373,7 +1379,7 @@ gst_video_decoder_get_output_state (GstVideoDecoder *decoder);

    Get the GstVideoCodecState currently describing the output stream.

    -

    Parameters

    +

    Parameters

    @@ -1388,7 +1394,7 @@
    -

    Returns

    +

    Returns

    GstVideoCodecState describing format of video data.

    [transfer full]

    @@ -1401,7 +1407,7 @@ gboolean enabled);

    Allows baseclass to perform byte to time estimated conversion.

    -

    Parameters

    +

    Parameters

    @@ -1449,7 +1455,7 @@

    The new output state will only take effect (set on pads and buffers) starting from the next call to gst_video_decoder_finish_frame().

    -

    Parameters

    +

    Parameters

    @@ -1486,7 +1492,7 @@
    -

    Returns

    +

    Returns

    the newly configured output state.

    [transfer full]

    @@ -1503,7 +1509,7 @@ GST_VIDEO_DECODER_MAX_ERRORS.

    The '-1' option was added in 1.4

    -

    Parameters

    +

    Parameters

    @@ -1535,7 +1541,7 @@ input is packetized, then the parse method will not be called.

    -

    Parameters

    +

    Parameters

    @@ -1564,7 +1570,7 @@ gst_video_decoder_get_needs_format (GstVideoDecoder *dec);

    Queries decoder required format handling.

    -

    Parameters

    +

    Parameters

    @@ -1579,11 +1585,10 @@
    -

    Returns

    +

    Returns

    TRUE if required format handling is enabled.

    -

    -

    Since 1.4

    +

    Since: 1.4


    @@ -1598,7 +1603,7 @@ is then expected being able to do so either by default or based on the input data.

    -

    Parameters

    +

    Parameters

    @@ -1619,7 +1624,7 @@
    -

    Since 1.4

    +

    Since: 1.4


    @@ -1628,13 +1633,14 @@ gst_video_decoder_merge_tags (GstVideoDecoder *decoder, const GstTagList *tags, GstTagMergeMode mode); -

    Adds tags to so-called pending tags, which will be processed -before pushing out data downstream.

    +

    Sets the audio decoder tags and how they should be merged with any +upstream stream tags. This will override any tags previously-set +with gst_audio_decoder_merge_tags().

    Note that this is provided for convenience, and the subclass is not required to use this and can still do tag handling on its own.

    MT safe.

    -

    Parameters

    +

    Parameters

    @@ -1649,17 +1655,64 @@ - - + + - + + + + +

    tags

    a GstTagList to merge

     

    a GstTagList to merge, or NULL to unset +previously-set tags.

    [allow-none]

    mode

    the GstTagMergeMode to use

    the GstTagMergeMode to use, usually GST_TAG_MERGE_REPLACE

     
    +
    +
    +
    +
    +

    gst_video_decoder_proxy_getcaps ()

    +
    GstCaps *
    +gst_video_decoder_proxy_getcaps (GstVideoDecoder *decoder,
    +                                 GstCaps *caps,
    +                                 GstCaps *filter);
    +

    Returns caps that express caps + (or sink template caps if caps + == NULL) +restricted to resolution/format/... combinations supported by downstream +elements.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + +

    decoder

    a GstVideoDecoder

     

    caps

    initial caps.

    [allow-none]

    filter

    filter caps.

    [allow-none]
    +
    +

    Returns

    +

    a GstCaps owned by caller.

    +

    [transfer full]

    +
    +

    Since: 1.6

    @@ -1746,6 +1799,15 @@ gboolean (*src_query) (GstVideoDecoder *decoder, GstQuery *query); + + GstCaps* (*getcaps) (GstVideoDecoder *decoder, + GstCaps *filter); + + GstFlowReturn (*drain) (GstVideoDecoder *decoder); + + gboolean (*transform_meta) (GstVideoDecoder *decoder, + GstVideoCodecFrame *frame, + GstMeta * meta); };

    Subclasses can override any of the available virtual methods or not, as @@ -1756,7 +1818,7 @@ parse needs to be overridden as well.

    -

    Members

    +

    Members

    @@ -1815,8 +1877,7 @@ +data at EOS. Sub-classes can refuse to decode new data after.

    @@ -1895,6 +1956,33 @@ default handler. Since 1.4

    + + + + + + + + + + + + + + +

    finish ()

    Optional. Called to request subclass to dispatch any pending remaining -data (e.g. at EOS or segment end). Sub-classes should be prepared -to handle new data afterward, or seamless segment processing will break.

     
     

    getcaps ()

    Optional. +Allows for a custom sink getcaps implementation. +If not implemented, default returns +gst_video_decoder_proxy_getcaps +applied to sink template caps.

     

    drain ()

    Optional. +Called to request subclass to decode any data it can at this +point, but that more data may arrive after. (e.g. at segment end). +Sub-classes should be prepared to handle new data afterward, +or seamless segment processing will break. Since: 1.6

     

    transform_meta ()

    Optional. Transform the metadata on the input buffer to the +output buffer. By default this method is copies all meta without +tags and meta with only the "video" tag. subclasses can +implement this method and return TRUE if the metadata is to be +copied. Since 1.6

     
    @@ -1902,7 +1990,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,345 @@ + + + + +GstVideoDither: GStreamer Base Plugins 1.0 Library Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    GstVideoDither

    +

    GstVideoDither — Utility object for dithering and quantizing lines of video

    +
    +
    +

    Functions

    +
    ++++ + + + + + + + + + + + + + + +
    +void + +gst_video_dither_free () +
    +void + +gst_video_dither_line () +
    +GstVideoDither * + +gst_video_dither_new () +
    +
    +
    +

    Types and Values

    +
    ++++ + + + + + + + + + + + + + + +
     GstVideoDither
    enumGstVideoDitherFlags
    enumGstVideoDitherMethod
    +
    +
    +

    Includes

    +
    #include <gst/video/video-dither.h>
    +
    +
    +
    +

    Description

    +

    GstVideoDither provides implementations of several dithering algorithms +that can be applied to lines of video pixels to quantize and dither them.

    +
    +
    +

    Functions

    +
    +

    gst_video_dither_free ()

    +
    void
    +gst_video_dither_free (GstVideoDither *dither);
    +

    Free dither +

    +
    +

    Parameters

    +
    +++++ + + + + + +

    dither

    a GstVideoDither

     
    +
    +
    +
    +
    +

    gst_video_dither_line ()

    +
    void
    +gst_video_dither_line (GstVideoDither *dither,
    +                       gpointer line,
    +                       guint x,
    +                       guint y,
    +                       guint width);
    +

    Dither width + pixels starting from offset x + in line + using dither +.

    +

    y + is the line number of line + in the output image.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    dither

    a GstVideoDither

     

    line

    pointer to the pixels of the line

     

    x

    x coordinate

     

    y

    y coordinate

     

    width

    the width

     
    +
    +
    +
    +
    +

    gst_video_dither_new ()

    +
    GstVideoDither *
    +gst_video_dither_new (GstVideoDitherMethod method,
    +                      GstVideoDitherFlags flags,
    +                      GstVideoFormat format,
    +                      guint quantizer[GST_VIDEO_MAX_COMPONENTS],
    +                      guint width);
    +

    Make a new dither object for dithering lines of format + using the +algorithm described by method +.

    +

    Each component will be quantized to a multiple of quantizer +. Better +performance is achived when quantizer + is a power of 2.

    +

    width + is the width of the lines that this ditherer will handle.

    +

    [skip]

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    method

    a GstVideoDitherMethod

     

    flags

    a GstVideoDitherFlags

     

    format

    a GstVideoFormat

     

    quantizer

    quantizer

     

    width

    the width of the lines

     
    +
    +
    +

    Returns

    +

    a new GstVideoDither

    +
    +
    +
    +
    +

    Types and Values

    +
    +

    GstVideoDither

    +
    typedef struct _GstVideoDither GstVideoDither;
    +
    +
    +
    +

    enum GstVideoDitherFlags

    +

    Extra flags that influence the result from gst_video_chroma_resample_new().

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + +

    GST_VIDEO_DITHER_FLAG_NONE

    +

    no flags

    +
     

    GST_VIDEO_DITHER_FLAG_INTERLACED

    +

    the input is interlaced

    +
     

    GST_VIDEO_DITHER_FLAG_QUANTIZE

    +

    quantize values in addition to adding dither.

    +
     
    +
    +
    +
    +
    +

    enum GstVideoDitherMethod

    +

    Different dithering methods to use.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_DITHER_NONE

    +

    no dithering

    +
     

    GST_VIDEO_DITHER_VERTERR

    +

    propagate rounding errors downwards

    +
     

    GST_VIDEO_DITHER_FLOYD_STEINBERG

    +

    Dither with floyd-steinberg error diffusion

    +
     

    GST_VIDEO_DITHER_SIERRA_LITE

    +

    Dither with Sierra Lite error diffusion

    +
     

    GST_VIDEO_DITHER_BAYER

    +

    ordered dither using a bayer pattern

    +
     
    +
    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoEncoder +GstVideoEncoder: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -329,7 +329,7 @@

    Gives the pointer to the sink GstPad object of the element.

    -

    Parameters

    +

    Parameters

    @@ -351,7 +351,7 @@

    Gives the pointer to the source GstPad object of the element.

    -

    Parameters

    +

    Parameters

    @@ -373,7 +373,7 @@

    Gives the segment of the element.

    -

    Parameters

    +

    Parameters

    @@ -395,7 +395,7 @@

    Gives the segment of the element.

    -

    Parameters

    +

    Parameters

    @@ -417,7 +417,7 @@

    Obtain a lock to protect the encoder function from concurrent access.

    -

    Parameters

    +

    Parameters

    @@ -439,7 +439,7 @@

    Release the lock that protects the encoder function from concurrent access.

    -

    Parameters

    +

    Parameters

    @@ -465,7 +465,7 @@ for encoder 's current GstVideoCodecState.

    -

    Parameters

    +

    Parameters

    @@ -487,7 +487,7 @@
    -

    Returns

    +

    Returns

    allocated buffer.

    [transfer full]

    @@ -507,7 +507,7 @@

    The buffer allocated here is owned by the frame and you should only keep references to the frame, not the buffer.

    -

    Parameters

    +

    Parameters

    @@ -534,9 +534,8 @@
    -

    Returns

    -

    GST_FLOW_OK if an output buffer could be allocated

    -

    +

    Returns

    +

    GST_FLOW_OK if an output buffer could be allocated


    @@ -553,7 +552,7 @@

    Unref the allocator after use it.

    -

    Parameters

    +

    Parameters

    @@ -600,7 +599,7 @@ considered read-only. This function will also change the metadata of the buffer.

    -

    Parameters

    +

    Parameters

    @@ -622,9 +621,8 @@
    -

    Returns

    +

    Returns

    a GstFlowReturn resulting from sending data downstream

    -


    @@ -636,7 +634,7 @@ Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if negotiate fails.

    -

    Parameters

    +

    Parameters

    @@ -651,9 +649,8 @@
    -

    Returns

    +

    Returns

    TRUE if the negotiation succeeded, else FALSE.

    -


    @@ -664,7 +661,7 @@ int frame_number);

    Get a pending unfinished GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -686,7 +683,7 @@
    -

    Returns

    +

    Returns

    pending unfinished GstVideoCodecFrame identified by frame_number .

    [transfer full]

    @@ -699,7 +696,7 @@ gst_video_encoder_get_frames (GstVideoEncoder *encoder);

    Get all pending unfinished GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -714,7 +711,7 @@
    -

    Returns

    +

    Returns

    pending unfinished GstVideoCodecFrame.

    [transfer full][element-type GstVideoCodecFrame]

    @@ -726,7 +723,7 @@ gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder);

    Get the oldest unfinished pending GstVideoCodecFrame

    -

    Parameters

    +

    Parameters

    @@ -741,7 +738,7 @@
    -

    Returns

    +

    Returns

    oldest unfinished pending GstVideoCodecFrame.

    [transfer full]

    @@ -754,7 +751,7 @@ GList *headers);

    Set the codec headers to be sent downstream whenever requested.

    -

    Parameters

    +

    Parameters

    @@ -788,7 +785,7 @@ and max_latency .

    -

    Parameters

    +

    Parameters

    @@ -826,7 +823,7 @@ GstClockTime max_latency);

    Informs baseclass of encoding latency.

    -

    Parameters

    +

    Parameters

    @@ -878,7 +875,7 @@

    The new output state will only take effect (set on pads and buffers) starting from the next call to gst_video_encoder_finish_frame().

    -

    Parameters

    +

    Parameters

    @@ -906,7 +903,7 @@
    -

    Returns

    +

    Returns

    the newly configured output state.

    [transfer full]

    @@ -918,7 +915,7 @@ gst_video_encoder_get_output_state (GstVideoEncoder *encoder);

    Get the current GstVideoCodecState

    -

    Parameters

    +

    Parameters

    @@ -933,7 +930,7 @@
    -

    Returns

    +

    Returns

    GstVideoCodecState describing format of video data.

    [transfer full]

    @@ -951,7 +948,7 @@ restricted to resolution/format/... combinations supported by downstream elements (e.g. muxers).

    -

    Parameters

    +

    Parameters

    @@ -966,21 +963,21 @@ - - + + - - + +

    caps

    initial caps

     

    initial caps.

    [allow-none]

    filter

    filter caps

     

    filter caps.

    [allow-none]
    -

    Returns

    -

    a GstCaps owned by caller

    -

    +

    Returns

    +

    a GstCaps owned by caller.

    +

    [transfer full]


    @@ -990,13 +987,14 @@ gst_video_encoder_merge_tags (GstVideoEncoder *encoder, const GstTagList *tags, GstTagMergeMode mode); -

    Adds tags to so-called pending tags, which will be processed -before pushing out data downstream.

    +

    Sets the video encoder tags and how they should be merged with any +upstream stream tags. This will override any tags previously-set +with gst_video_encoder_merge_tags().

    Note that this is provided for convenience, and the subclass is not required to use this and can still do tag handling on its own.

    MT safe.

    -

    Parameters

    +

    Parameters

    @@ -1011,12 +1009,13 @@ - - + + - + @@ -1110,6 +1109,10 @@ gboolean (*src_query) (GstVideoEncoder *encoder, GstQuery *query); + + gboolean (*transform_meta) (GstVideoEncoder *encoder, + GstVideoCodecFrame *frame, + GstMeta * meta); };

    Subclasses can override any of the available virtual methods or not, as @@ -1119,7 +1122,7 @@ and get_caps are likely needed as well.

    -

    Members

    +

    Members

    tags

    a GstTagList to merge

     

    a GstTagList to merge, or NULL to unset +previously-set tags.

    [allow-none]

    mode

    the GstTagMergeMode to use

    the GstTagMergeMode to use, usually GST_TAG_MERGE_REPLACE

     
    @@ -1270,6 +1273,15 @@ default handler. Since 1.4

    + + + + +
     

    transform_meta ()

    Optional. Transform the metadata on the input buffer to the +output buffer. By default this method is copies all meta without +tags and meta with only the "video" tag. subclasses can +implement this method and return TRUE if the metadata is to be +copied. Since 1.6

     
    @@ -1277,7 +1289,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideofilter +gstvideofilter: GStreamer Base Plugins 1.0 Library Reference Manual - - + + @@ -21,7 +21,7 @@ Home Up Prev -Next +Next
    @@ -80,6 +80,7 @@

    Functions

    +

    Types and Values

    @@ -140,7 +141,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideo.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideo.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideo.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideo.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideo +gstvideo: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -49,6 +49,14 @@ +gboolean + + +gst_video_guess_framerate () + + + + void @@ -137,21 +145,6 @@ -GstVideoChromaSite - - -gst_video_chroma_from_string () - - - -const gchar * - - -gst_video_chroma_to_string () - - - - void @@ -394,6 +387,38 @@ +void + + +gst_video_color_range_offsets () + + + + +gboolean + + +gst_video_color_matrix_get_Kr_Kb () + + + + +gdouble + + +gst_video_color_transfer_decode () + + + + +gdouble + + +gst_video_color_transfer_encode () + + + + gboolean @@ -405,23 +430,23 @@ gboolean -gst_video_colorimetry_from_string () +gst_video_colorimetry_is_equal () -gchar * +gboolean -gst_video_colorimetry_to_string () +gst_video_colorimetry_from_string () -void +gchar * -gst_video_color_range_offsets () +gst_video_colorimetry_to_string () @@ -623,6 +648,30 @@ +#define + +GST_VIDEO_INFO_CHROMA_SITE() + + + +#define + +GST_VIDEO_INFO_COLORIMETRY() + + + +#define + +GST_VIDEO_INFO_MULTIVIEW_FLAGS() + + + +#define + +GST_VIDEO_INFO_MULTIVIEW_MODE() + + + void @@ -632,6 +681,30 @@ +GstVideoInfo * + + +gst_video_info_new () + + + + +GstVideoInfo * + + +gst_video_info_copy () + + + + +void + + +gst_video_info_free () + + + + void @@ -906,6 +979,127 @@ GST_VIDEO_TILE_Y_TILES() + + +gboolean + + +gst_video_blend () + + + + +void + + +gst_video_blend_scale_linear_RGBA () + + + + +GstVideoConverter * + + +gst_video_converter_new () + + + + +void + + +gst_video_converter_free () + + + +const GstStructure * + + +gst_video_converter_get_config () + + + + +gboolean + + +gst_video_converter_set_config () + + + + +void + + +gst_video_converter_frame () + + + +const GValue * + + +gst_video_multiview_get_mono_modes () + + + +const GValue * + + +gst_video_multiview_get_unpacked_modes () + + + +const GValue * + + +gst_video_multiview_get_doubled_height_modes () + + + +const GValue * + + +gst_video_multiview_get_doubled_size_modes () + + + +const GValue * + + +gst_video_multiview_get_doubled_width_modes () + + + + +GstVideoMultiviewMode + + +gst_video_multiview_mode_from_caps_string () + + + +const gchar * + + +gst_video_multiview_mode_to_caps_string () + + + + +gboolean + + +gst_video_multiview_guess_half_aspect () + + + + +void + + +gst_video_multiview_video_info_change_mode () + + @@ -955,10 +1149,6 @@ enum -GstVideoChromaSite - - -enum GstVideoFormatFlags @@ -987,11 +1177,11 @@ enum -GstVideoTransferFunction +GstVideoColorPrimaries enum -GstVideoColorPrimaries +GstVideoTransferFunction   @@ -1007,6 +1197,18 @@ enum +GstVideoMultiviewMode + + +enum +GstVideoMultiviewFramePacking + + +enum +GstVideoMultiviewFlags + + +enum GstVideoFlags @@ -1029,6 +1231,10 @@ enum GstVideoTileMode + +  +GstVideoConverter + @@ -1073,13 +1279,13 @@

    dar_n

    -

    Numerator of the calculated display_ratio

    -  +

    Numerator of the calculated display_ratio.

    +[out]

    dar_d

    -

    Denominator of the calculated display_ratio

    -  +

    Denominator of the calculated display_ratio.

    +[out]

    video_width

    @@ -1119,11 +1325,57 @@

    A boolean indicating success and a calculated Display Ratio in the dar_n and dar_d parameters. The return value is FALSE in the case of integer overflow or other error.

    -


    +

    gst_video_guess_framerate ()

    +
    gboolean
    +gst_video_guess_framerate (GstClockTime duration,
    +                           gint *dest_n,
    +                           gint *dest_d);
    +

    Given the nominal duration of one video frame, +this function will check some standard framerates for +a close match (within 0.1%) and return one if possible,

    +

    It will calculate an arbitrary framerate if no close +match was found, and return FALSE.

    +

    It returns FALSE if a duration of 0 is passed.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + +

    duration

    Nominal duration of one frame

     

    dest_n

    Numerator of the calculated framerate.

    [out][allow-none]

    dest_d

    Denominator of the calculated framerate.

    [out][allow-none]
    +
    +
    +

    Returns

    +

    TRUE if a close "standard" framerate was +recognised, and FALSE otherwise.

    +
    +

    Since: 1.6

    +
    +
    +

    GstVideoConvertSampleCallback ()

    void
     (*GstVideoConvertSampleCallback) (GstSample *sample,
    @@ -1142,7 +1394,7 @@
     

    The output caps can be any raw video formats or any image formats (jpeg, png, ...).

    The width, height and pixel-aspect-ratio can also be specified in the output caps.

    -

    Parameters

    +

    Parameters

    @@ -1174,10 +1426,9 @@
    -

    Returns

    +

    Returns

    The converted GstSample, or NULL if an error happened (in which case err will point to the GError).

    -


    @@ -1205,7 +1456,7 @@ is not needed anymore.

    -

    Parameters

    +

    Parameters

    @@ -1257,7 +1508,7 @@

    Set align to its default values with no padding and no alignment.

    -

    Parameters

    +

    Parameters

    @@ -1284,7 +1535,7 @@

    To parse an event created by gst_video_event_new_still_frame() use gst_video_event_parse_still_frame().

    -

    Parameters

    +

    Parameters

    @@ -1299,9 +1550,8 @@
    -

    Returns

    +

    Returns

    The new GstEvent

    -


    @@ -1318,7 +1568,7 @@ event.

    Create a still frame event using gst_video_event_new_still_frame()

    -

    Parameters

    +

    Parameters

    @@ -1340,9 +1590,8 @@
    -

    Returns

    +

    Returns

    TRUE if the event is a valid still-frame event. FALSE if not

    -


    @@ -1363,7 +1612,7 @@

    To parse an event created by gst_video_event_new_downstream_force_key_unit() use gst_video_event_parse_downstream_force_key_unit().

    -

    Parameters

    +

    Parameters

    @@ -1400,9 +1649,8 @@
    -

    Returns

    +

    Returns

    The new GstEvent

    -


    @@ -1422,7 +1670,7 @@

    running_time will be adjusted for any pad offsets of pads it was passing through.

    -

    Parameters

    +

    Parameters

    @@ -1464,9 +1712,8 @@
    -

    Returns

    +

    Returns

    TRUE if the event is a valid downstream force key unit event.

    -


    @@ -1486,7 +1733,7 @@

    To parse an event created by gst_video_event_new_downstream_force_key_unit() use gst_video_event_parse_downstream_force_key_unit().

    -

    Parameters

    +

    Parameters

    @@ -1513,9 +1760,8 @@
    -

    Returns

    +

    Returns

    The new GstEvent

    -


    @@ -1534,7 +1780,7 @@

    running_time will be adjusted for any pad offsets of pads it was passing through.

    -

    Parameters

    +

    Parameters

    @@ -1566,9 +1812,8 @@
    -

    Returns

    +

    Returns

    TRUE if the event is a valid upstream force-key-unit event. FALSE if not

    -


    @@ -1579,7 +1824,7 @@

    Checks if an event is a force key unit event. Returns true for both upstream and downstream force key unit events.

    -

    Parameters

    +

    Parameters

    @@ -1594,68 +1839,8 @@
    -

    Returns

    -

    TRUE if the event is a valid force key unit event

    -

    -
    - -
    -
    -

    gst_video_chroma_from_string ()

    -
    GstVideoChromaSite
    -gst_video_chroma_from_string (const gchar *s);
    -

    Convert s - to a GstVideoChromaSite

    -
    -

    Parameters

    -
    ----- - - - - - -

    s

    a chromasite string

     
    -
    -

    Returns

    -

    a GstVideoChromaSite or GST_VIDEO_CHROMA_SITE_UNKNOWN when s -does -not contain a valid chroma description.

    -

    -
    -
    -
    -
    -

    gst_video_chroma_to_string ()

    -
    const gchar *
    -gst_video_chroma_to_string (GstVideoChromaSite site);
    -

    Converts site - to its string representation.

    -
    -

    Parameters

    -
    ----- - - - - - -

    site

    a GstVideoChromaSite

     
    -
    -
    -

    Returns

    -

    a string describing site -.

    -

    +

    TRUE if the event is a valid force key unit event


    @@ -1674,16 +1859,22 @@ pixels from the given planes and strides containing data of format info . The pixels will be unpacked into dest - which each component -interleaved. dest + with each component +interleaved as per info +'s unpack_format, which will usually be one of +GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB64 or +GST_VIDEO_FORMAT_AYUV64 depending on the format to unpack. +dest should at least be big enough to hold width - * -n_components * size(unpack_format) bytes.

    + * bytes_per_pixel bytes +where bytes_per_pixel relates to the unpack format and will usually be +either 4 or 8 depending on the unpack format. bytes_per_pixel will be +the same as the pixel stride for plane 0 for the above formats.

    For subsampled formats, the components will be duplicated in the destination array. Reconstruction of the missing components can be performed in a separate step after unpacking.

    -

    Parameters

    +

    Parameters

    @@ -1745,7 +1936,7 @@ gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], - GstVideoChromaSite chroma_site, + GstVideoChromaSite chroma_site, gint y, gint width);

    Packs width @@ -1761,14 +1952,15 @@ and y should be a multiple of pack_lines.

    -

    Subsampled formats will use the horizontally cosited component in the -destination. Subsampling should be performed before packing.

    -

    Because tis function does not have a x coordinate, it is not possible to +

    Subsampled formats will use the horizontally and vertically cosited +component from the source. Subsampling should be performed before +packing.

    +

    Because this function does not have a x coordinate, it is not possible to pack pixels starting from an unaligned position. For tiled images this means that packing should start from a tile coordinate. For subsampled -formats this means that a complete pixel need to be packed.

    +formats this means that a complete pixel needs to be packed.

    -

    Parameters

    +

    Parameters

    @@ -2029,7 +2221,7 @@ guint alpha_mask);

    Find the GstVideoFormat for the given parameters.

    -

    Parameters

    +

    Parameters

    @@ -2078,10 +2270,9 @@
    -

    Returns

    +

    Returns

    a GstVideoFormat or GST_VIDEO_FORMAT_UNKNOWN when the parameters to not specify a known format.

    -


    @@ -2093,7 +2284,7 @@ If the FOURCC cannot be represented by GstVideoFormat, GST_VIDEO_FORMAT_UNKNOWN is returned.

    -

    Parameters

    +

    Parameters

    @@ -2108,9 +2299,8 @@
    -

    Returns

    +

    Returns

    the GstVideoFormat describing the FOURCC value

    -


    @@ -2123,7 +2313,7 @@ has no corresponding FOURCC value, 0 is returned.

    -

    Parameters

    +

    Parameters

    @@ -2138,10 +2328,9 @@
    -

    Returns

    +

    Returns

    the FOURCC corresponding to format

    -


    @@ -2152,7 +2341,7 @@

    Convert the format string to its GstVideoFormat.

    -

    Parameters

    +

    Parameters

    @@ -2167,11 +2356,10 @@
    -

    Returns

    +

    Returns

    the GstVideoFormat for format or GST_VIDEO_FORMAT_UNKNOWN when the string is not a known format.

    -


    @@ -2179,6 +2367,28 @@

    gst_video_format_to_string ()

    const gchar *
     gst_video_format_to_string (GstVideoFormat format);
    +

    Returns a string containing a descriptive name for +the GstVideoFormat if there is one, or NULL otherwise.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    format

    a GstVideoFormat video format

     
    +
    +
    +

    Returns

    +

    the name corresponding to format +

    +

    @@ -2188,7 +2398,7 @@

    Get the GstVideoFormatInfo for format

    -

    Parameters

    +

    Parameters

    @@ -2203,10 +2413,9 @@
    -

    Returns

    +

    Returns

    The GstVideoFormatInfo for format .

    -


    @@ -2215,7 +2424,7 @@
    #define             GST_VIDEO_CAPS_MAKE(format)

    Generic caps string for video, for use in pad templates.

    -

    Parameters

    +

    Parameters

    @@ -2233,16 +2442,23 @@
    -

    gst_video_colorimetry_matches ()

    -
    gboolean
    -gst_video_colorimetry_matches (GstVideoColorimetry *cinfo,
    -                               const gchar *color);
    -

    Check if the colorimetry information in info - matches that of the -string color +

    gst_video_color_range_offsets ()

    +
    void
    +gst_video_color_range_offsets (GstVideoColorRange range,
    +                               const GstVideoFormatInfo *info,
    +                               gint offset[GST_VIDEO_MAX_COMPONENTS],
    +                               gint scale[GST_VIDEO_MAX_COMPONENTS]);
    +

    Compute the offset and scale values for each component of info +. For each +component, (c[i] - offset[i]) / scale[i] will scale the component c[i] to the +range [0.0 .. 1.0].

    +

    The reverse operation (c[i] * scale[i]) + offset[i] can be used to convert +the component values in range [0.0 .. 1.0] back to their representation in +info + and range .

    -

    Parameters

    +

    Parameters

    @@ -2251,38 +2467,89 @@ - - + + - - + + + + + + + + + + + +

    cinfo

    a GstVideoInfo

    range

    a GstVideoColorRange

     

    color

    a colorimetry string

    info

    a GstVideoFormatInfo

     

    offset

    output offsets.

    [out]

    scale

    output scale.

    [out]
    -
    -

    Returns

    -

    TRUE if color -conveys the same colorimetry info as the color -information in info -.

    -

    -

    -

    gst_video_colorimetry_from_string ()

    +

    gst_video_color_matrix_get_Kr_Kb ()

    gboolean
    -gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo,
    -                                   const gchar *color);
    -

    Parse the colorimetry string and update cinfo - with the parsed -values.

    +gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, + gdouble *Kr, + gdouble *Kb); +

    Get the coefficients used to convert between Y'PbPr and R'G'B' using matrix +.

    +

    When:

    +
    + + + + + + + +
    1
    +2
    0.0 <= [Y',R',G',B'] <= 1.0)
    +(-0.5 <= [Pb,Pr] <= 0.5)
    +
    + +

    +

    the general conversion is given by:

    +
    + + + + + + + +
    1
    +2
    +3
    Y' = Kr*R' + (1-Kr-Kb)*G' + Kb*B'
    +Pb = (B'-Y')/(2*(1-Kb))
    +Pr = (R'-Y')/(2*(1-Kr))
    +
    + +

    +

    and the other way around:

    +
    + + + + + + + +
    1
    +2
    +3
    R' = Y' + Cr*2*(1-Kr)
    +G' = Y' - Cb*2*(1-Kb)*Kb/(1-Kr-Kb) - Cr*2*(1-Kr)*Kr/(1-Kr-Kb)
    +B' = Y' + Cb*2*(1-Kb)
    +
    + +

    -

    Parameters

    +

    Parameters

    @@ -2291,73 +2558,116 @@ - - + + - - + + + + + + +

    cinfo

    a GstVideoColorimetry

    matrix

    a GstVideoColorMatrix

     

    color

    a colorimetry string

    Kr

    result red channel coefficient

     

    Kb

    result blue channel coefficient

     
    -

    Returns

    -

    TRUE if color -points to valid colorimetry info.

    -

    +

    Returns

    +

    TRUE if matrix +was a YUV color format and Kr +and Kb +contain valid +values.

    +

    Since: 1.6


    -

    gst_video_colorimetry_to_string ()

    -
    gchar *
    -gst_video_colorimetry_to_string (GstVideoColorimetry *cinfo);
    -

    Make a string representation of cinfo +

    gst_video_color_transfer_decode ()

    +
    gdouble
    +gst_video_color_transfer_decode (GstVideoTransferFunction func,
    +                                 gdouble val);
    +

    Convert val + to its gamma decoded value. This is the inverse operation of +gst_video_color_transfer_encode() .

    +

    For a non-linear value L' in the range [0..1], conversion to the linear +L is in general performed with a power function like:

    +
    + + + + + + + +
    1
    L = L' ^ gamma
    +
    + +

    +

    Depending on func +, different formulas might be applied. Some formulas +encode a linear segment in the lower range.

    -

    Parameters

    +

    Parameters

    - - - + + + + - + + + + + + +

    cinfo

    a GstVideoColorimetry

    func

    a GstVideoTransferFunction

     

    val

    a value

     
    -

    Returns

    -

    a string representation of cinfo -.

    -

    +

    Returns

    +

    the gamme decoded value of val +

    +

    Since: 1.6


    -

    gst_video_color_range_offsets ()

    -
    void
    -gst_video_color_range_offsets (GstVideoColorRange range,
    -                               const GstVideoFormatInfo *info,
    -                               gint offset[GST_VIDEO_MAX_COMPONENTS],
    -                               gint scale[GST_VIDEO_MAX_COMPONENTS]);
    -

    Compute the offset and scale values for each component of info -. For each -component, (c[i] - offset[i]) / scale[i] will scale the component c[i] to the -range [0.0 .. 1.0].

    -

    The reverse operation (c[i] * scale[i]) + offset[i] can be used to convert -the component values in range [0.0 .. 1.0] back to their representation in -info - and range -.

    +

    gst_video_color_transfer_encode ()

    +
    gdouble
    +gst_video_color_transfer_encode (GstVideoTransferFunction func,
    +                                 gdouble val);
    +

    Convert val + to its gamma encoded value.

    +

    For a linear value L in the range [0..1], conversion to the non-linear +(gamma encoded) L' is in general performed with a power function like:

    +
    + + + + + + + +
    1
    L' = L ^ (1 / gamma)
    +
    + +

    +

    Depending on func +, different formulas might be applied. Some formulas +encode a linear segment in the lower range.

    -

    Parameters

    +

    Parameters

    @@ -2366,40 +2676,178 @@ - - + + - - + + + +

    range

    a GstVideoColorRange

    func

    a GstVideoTransferFunction

     

    info

    a GstVideoFormatInfo

    val

    a value

     
    +
    +
    +

    Returns

    +

    the gamme encoded value of val +

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_colorimetry_matches ()

    +
    gboolean
    +gst_video_colorimetry_matches (GstVideoColorimetry *cinfo,
    +                               const gchar *color);
    +

    Check if the colorimetry information in info + matches that of the +string color +.

    +
    +

    Parameters

    +
    +++++ + - - - + + + - - - + + +

    offset

    output offsets.

    [out]

    cinfo

    a GstVideoInfo

     

    scale

    output scale.

    [out]

    color

    a colorimetry string

     
    +
    +

    Returns

    +

    TRUE if color +conveys the same colorimetry info as the color +information in info +.

    -
    -
    -

    GST_VIDEO_INFO_FORMAT()

    -
    #define GST_VIDEO_INFO_FORMAT(i)         (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
    -

    -

    GST_VIDEO_INFO_NAME()

    -
    #define GST_VIDEO_INFO_NAME(i)           (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
    -
    +

    gst_video_colorimetry_is_equal ()

    +
    gboolean
    +gst_video_colorimetry_is_equal (const GstVideoColorimetry *cinfo,
    +                                const GstVideoColorimetry *other);
    +

    Compare the 2 colorimetry sets for equality

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + +

    cinfo

    a GstVideoColorimetry

     

    other

    another GstVideoColorimetry

     
    +
    +
    +

    Returns

    +

    TRUE if cinfo +and other +are equal.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_colorimetry_from_string ()

    +
    gboolean
    +gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo,
    +                                   const gchar *color);
    +

    Parse the colorimetry string and update cinfo + with the parsed +values.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + +

    cinfo

    a GstVideoColorimetry

     

    color

    a colorimetry string

     
    +
    +
    +

    Returns

    +

    TRUE if color +points to valid colorimetry info.

    +
    +
    +
    +
    +

    gst_video_colorimetry_to_string ()

    +
    gchar *
    +gst_video_colorimetry_to_string (GstVideoColorimetry *cinfo);
    +

    Make a string representation of cinfo +.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    cinfo

    a GstVideoColorimetry

     
    +
    +
    +

    Returns

    +

    a string representation of cinfo +.

    +
    +
    +
    +
    +

    GST_VIDEO_INFO_FORMAT()

    +
    #define GST_VIDEO_INFO_FORMAT(i)         (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
    +
    +
    +
    +
    +

    GST_VIDEO_INFO_NAME()

    +
    #define GST_VIDEO_INFO_NAME(i)           (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
    +

    @@ -2589,13 +3037,100 @@

    +

    GST_VIDEO_INFO_CHROMA_SITE()

    +
    #define GST_VIDEO_INFO_CHROMA_SITE(i) ((i)->chroma_site)
    +
    +
    +
    +
    +

    GST_VIDEO_INFO_COLORIMETRY()

    +
    #define GST_VIDEO_INFO_COLORIMETRY(i) ((i)->colorimetry)
    +
    +
    +
    +
    +

    GST_VIDEO_INFO_MULTIVIEW_FLAGS()

    +
    #define GST_VIDEO_INFO_MULTIVIEW_FLAGS(i)          ((i)->ABI.abi.multiview_flags)
    +
    +
    +
    +
    +

    GST_VIDEO_INFO_MULTIVIEW_MODE()

    +
    #define GST_VIDEO_INFO_MULTIVIEW_MODE(i)          ((i)->ABI.abi.multiview_mode)
    +
    +
    +
    +

    gst_video_info_init ()

    void
     gst_video_info_init (GstVideoInfo *info);

    Initialize info with default values.

    -

    Parameters

    +

    Parameters

    +
    +++++ + + + + + +

    info

    a GstVideoInfo

     
    +
    +
    +
    +
    +

    gst_video_info_new ()

    +
    GstVideoInfo *
    +gst_video_info_new (void);
    +

    Allocate a new GstVideoInfo that is also initialized with +gst_video_info_init().

    +
    +

    Returns

    +

    a new GstVideoInfo. free with gst_video_info_free().

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_info_copy ()

    +
    GstVideoInfo *
    +gst_video_info_copy (const GstVideoInfo *info);
    +

    Copy a GstVideoInfo structure.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    info

    a GstVideoInfo

     
    +
    +
    +

    Returns

    +

    a new GstVideoInfo. free with gst_video_info_free.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_info_free ()

    +
    void
    +gst_video_info_free (GstVideoInfo *info);
    +

    Free a GstVideoInfo structure previously allocated with gst_video_info_new() +or gst_video_info_copy().

    +
    +

    Parameters

    @@ -2609,6 +3144,7 @@
    +

    Since: 1.6


    @@ -2623,9 +3159,11 @@ and height .

    Note: This initializes info - first, no values are preserved.

    + first, no values are preserved. This function +does not set the offsets correctly for interlaced vertically +subsampled formats.

    -

    Parameters

    +

    Parameters

    @@ -2667,7 +3205,7 @@ and update info .

    -

    Parameters

    +

    Parameters

    @@ -2689,10 +3227,9 @@
    -

    Returns

    +

    Returns

    TRUE if caps could be parsed

    -


    @@ -2703,7 +3240,7 @@

    Convert the values of info into a GstCaps.

    -

    Parameters

    +

    Parameters

    @@ -2718,10 +3255,9 @@
    -

    Returns

    +

    Returns

    a new GstCaps containing the info of info .

    -


    @@ -2738,7 +3274,7 @@ raw video, GST_FORMAT_DEFAULT corresponds to video frames. This function can be used to handle pad queries of the type GST_QUERY_CONVERT.

    -

    Parameters

    +

    Parameters

    @@ -2777,9 +3313,8 @@
    -

    Returns

    +

    Returns

    TRUE if the conversion was successful.

    -


    @@ -2790,7 +3325,7 @@ const GstVideoInfo *other);

    Compares two GstVideoInfo and returns whether they are equal or not

    -

    Parameters

    +

    Parameters

    @@ -2812,11 +3347,10 @@
    -

    Returns

    +

    Returns

    TRUE if info and other are equal, else FALSE.

    -


    @@ -2833,7 +3367,7 @@ is required and align will be updated with the new padding values.

    -

    Parameters

    +

    Parameters

    @@ -2879,7 +3413,7 @@ frame->data .

    -

    Parameters

    +

    Parameters

    @@ -2916,9 +3450,8 @@
    -

    Returns

    +

    Returns

    TRUE on success.

    -


    @@ -2938,7 +3471,7 @@ frame->data .

    -

    Parameters

    +

    Parameters

    @@ -2970,9 +3503,8 @@
    -

    Returns

    +

    Returns

    TRUE on success.

    -


    @@ -2982,7 +3514,7 @@ gst_video_frame_unmap (GstVideoFrame *frame);

    Unmap the memory previously mapped with gst_video_frame_map.

    -

    Parameters

    +

    Parameters

    @@ -3007,7 +3539,7 @@ to dest .

    -

    Parameters

    +

    Parameters

    @@ -3029,9 +3561,8 @@
    -

    Returns

    +

    Returns

    TRUE if the contents could be copied.

    -


    @@ -3046,7 +3577,7 @@ to dest .

    -

    Parameters

    +

    Parameters

    @@ -3073,9 +3604,8 @@
    -

    Returns

    +

    Returns

    TRUE if the contents could be copied.

    -


    @@ -3240,7 +3770,7 @@

    Use this method when mode is of type GST_VIDEO_TILE_MODE_INDEXED.

    -

    Parameters

    +

    Parameters

    @@ -3277,16 +3807,15 @@
    -

    Returns

    +

    Returns

    the index of the tile at x and y in the tiled image of x_tiles by y_tiles .

    -

    -

    Since 1.4

    +

    Since: 1.4


    @@ -3294,7 +3823,7 @@
    #define             GST_VIDEO_TILE_MAKE_MODE(num, type)

    use this macro to create new tile modes.

    -

    Parameters

    +

    Parameters

    @@ -3324,7 +3853,7 @@

    Get the tile mode type of mode

    -

    Parameters

    +

    Parameters

    @@ -3347,7 +3876,7 @@

    Check if mode is an indexed tile type

    -

    Parameters

    +

    Parameters

    @@ -3368,7 +3897,7 @@
    #define             GST_VIDEO_TILE_MAKE_STRIDE(x_tiles, y_tiles)

    Encode the number of tile in X and Y into the stride.

    -

    Parameters

    +

    Parameters

    @@ -3397,7 +3926,7 @@

    Extract the number of tiles in X from the stride value.

    -

    Parameters

    +

    Parameters

    @@ -3419,7 +3948,7 @@

    Extract the number of tiles in Y from the stride value.

    -

    Parameters

    +

    Parameters

    @@ -3434,55 +3963,55 @@
    - -
    -

    Types and Values

    +
    -

    struct GstVideoAlignment

    -
    struct GstVideoAlignment {
    -  guint padding_top;
    -  guint padding_bottom;
    -  guint padding_left;
    -  guint padding_right;
    -  guint stride_align[GST_VIDEO_MAX_PLANES];
    -};
    -
    -

    Extra alignment paramters for the memory of video buffers. This -structure is usually used to configure the bufferpool if it supports the -GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.

    +

    gst_video_blend ()

    +
    gboolean
    +gst_video_blend (GstVideoFrame *dest,
    +                 GstVideoFrame *src,
    +                 gint x,
    +                 gint y,
    +                 gfloat global_alpha);
    +

    Lets you blend the src + image into the dest + image

    -

    Members

    +

    Parameters

    ---+++ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +

    guint padding_top;

    extra pixels on the top

     

    dest

    The GstVideoFrame where to blend src +in

     

    guint padding_bottom;

    extra pixels on the bottom

     

    src

    the GstVideoFrame that we want to blend into

     

    guint padding_left;

    extra pixels on the left side

     

    x

    The x offset in pixel where the src +image should be blended

     

    guint padding_right;

    extra pixels on the right side

     

    y

    the y offset in pixel where the src +image should be blended

     

    guint stride_align[GST_VIDEO_MAX_PLANES];

    array with extra alignment requirements for the strides

     

    global_alpha

    the global_alpha each per-pixel alpha value is multiplied +with

     
    @@ -3490,52 +4019,583 @@

    -

    GST_META_TAG_VIDEO_STR

    -
    #define GST_META_TAG_VIDEO_STR "video"
    -
    -

    This metadata is relevant for video streams.

    -

    Since 1.2

    -
    -
    -
    -

    GST_META_TAG_VIDEO_ORIENTATION_STR

    -
    #define GST_META_TAG_VIDEO_ORIENTATION_STR "orientation"
    -
    -

    This metadata stays relevant as long as video orientation is unchanged.

    -

    Since 1.2

    -
    -
    -
    -

    GST_META_TAG_VIDEO_SIZE_STR

    -
    #define GST_META_TAG_VIDEO_SIZE_STR "size"
    -
    -

    This metadata stays relevant as long as video size is unchanged.

    -

    Since 1.2

    -
    -
    -
    -

    GST_META_TAG_VIDEO_COLORSPACE_STR

    -
    #define GST_META_TAG_VIDEO_COLORSPACE_STR "colorspace"
    -
    -

    This metadata stays relevant as long as video colorspace is unchanged.

    -

    Since 1.2

    -
    -
    -
    -

    enum GstVideoFormat

    -

    Enum value describing the most common video formats.

    +

    gst_video_blend_scale_linear_RGBA ()

    +
    void
    +gst_video_blend_scale_linear_RGBA (GstVideoInfo *src,
    +                                   GstBuffer *src_buffer,
    +                                   gint dest_height,
    +                                   gint dest_width,
    +                                   GstVideoInfo *dest,
    +                                   GstBuffer **dest_buffer);
    +

    Scales a buffer containing RGBA (or AYUV) video. This is an internal +helper function which is used to scale subtitle overlays, and may be +deprecated in the near future. Use GstVideoScaler to scale video buffers +instead.

    -

    Members

    +

    Parameters

    ---+++ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_FORMAT_UNKNOWN

    +

    src

    the GstVideoInfo describing the video data in src_buffer +

     

    src_buffer

    the source buffer containing video pixels to scale

     

    dest_height

    the height in pixels to scale the video data in src_buffer +to

     

    dest_width

    the width in pixels to scale the video data in src_buffer +to

     

    dest

    pointer to a GstVideoInfo structure that will be filled in +with the details for dest_buffer +.

    [out]

    dest_buffer

    a pointer to a GstBuffer variable, which will be +set to a newly-allocated buffer containing the scaled pixels.

    [out]
    +
    +
    +
    +
    +

    gst_video_converter_new ()

    +
    GstVideoConverter *
    +gst_video_converter_new (GstVideoInfo *in_info,
    +                         GstVideoInfo *out_info,
    +                         GstStructure *config);
    +

    Create a new converter object to convert between in_info + and out_info + +with config +.

    +

    [skip]

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + +

    in_info

    a GstVideoInfo

     

    out_info

    a GstVideoInfo

     

    config

    a GstStructure with configuration options.

    [transfer full]
    +
    +
    +

    Returns

    +

    a GstVideoConverter or NULL if conversion is not possible.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_converter_free ()

    +
    void
    +gst_video_converter_free (GstVideoConverter *convert);
    +

    Free convert +

    +
    +

    Parameters

    +
    +++++ + + + + + +

    convert

    a GstVideoConverter

     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_converter_get_config ()

    +
    const GstStructure *
    +gst_video_converter_get_config (GstVideoConverter *convert);
    +

    Get the current configuration of convert +.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    convert

    a GstVideoConverter

     
    +
    +
    +

    Returns

    +

    a GstStructure that remains valid for as long as convert +is valid +or until gst_video_converter_set_config() is called.

    +
    +
    +
    +
    +

    gst_video_converter_set_config ()

    +
    gboolean
    +gst_video_converter_set_config (GstVideoConverter *convert,
    +                                GstStructure *config);
    +

    Set config + as extra configuraion for convert +.

    +

    If the parameters in config + can not be set exactly, this function returns +FALSE and will try to update as much state as possible. The new state can +then be retrieved and refined with gst_video_converter_get_config().

    +

    Look at the GST_VIDEO_CONVERTER_OPT_* fields to check valid configuration +option and values.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + +

    convert

    a GstVideoConverter

     

    config

    a GstStructure.

    [transfer full]
    +
    +
    +

    Returns

    +

    TRUE when config +could be set.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_converter_frame ()

    +
    void
    +gst_video_converter_frame (GstVideoConverter *convert,
    +                           const GstVideoFrame *src,
    +                           GstVideoFrame *dest);
    +

    Convert the pixels of src + into dest + using convert +.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + +

    convert

    a GstVideoConverter

     

    dest

    a GstVideoFrame

     

    src

    a GstVideoFrame

     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_get_mono_modes ()

    +
    const GValue *
    +gst_video_multiview_get_mono_modes (void);
    +
    +

    Returns

    +

    A const GValue containing a list of mono video modes

    +

    Utility function that returns a GValue with a GstList of mono video +modes (mono/left/right) for use in caps negotiations.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_get_unpacked_modes ()

    +
    const GValue *
    +gst_video_multiview_get_unpacked_modes
    +                               (void);
    +
    +

    Returns

    +

    A const GValue containing a list of 'unpacked' stereo video modes

    +

    Utility function that returns a GValue with a GstList of unpacked +stereo video modes (separated/frame-by-frame/frame-by-frame-multiview) +for use in caps negotiations.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_get_doubled_height_modes ()

    +
    const GValue *
    +gst_video_multiview_get_doubled_height_modes
    +                               (void);
    +
    +

    Returns

    +

    A const GValue containing a list of stereo video modes

    +

    Utility function that returns a GValue with a GstList of packed stereo +video modes with double the height of a single view for use in +caps negotiations. Currently this is top-bottom and row-interleaved.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_get_doubled_size_modes ()

    +
    const GValue *
    +gst_video_multiview_get_doubled_size_modes
    +                               (void);
    +
    +

    Returns

    +

    A const GValue containing a list of stereo video modes

    +

    Utility function that returns a GValue with a GstList of packed +stereo video modes that have double the width/height of a single +view for use in caps negotiation. Currently this is just +'checkerboard' layout.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_get_doubled_width_modes ()

    +
    const GValue *
    +gst_video_multiview_get_doubled_width_modes
    +                               (void);
    +
    +

    Returns

    +

    A const GValue containing a list of stereo video modes

    +

    Utility function that returns a GValue with a GstList of packed stereo +video modes with double the width of a single view for use in +caps negotiations. Currently this is side-by-side, side-by-side-quincunx +and column-interleaved.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_mode_from_caps_string ()

    +
    GstVideoMultiviewMode
    +gst_video_multiview_mode_from_caps_string
    +                               (const gchar *caps_mview_mode);
    +
    +

    Parameters

    +
    +++++ + + + + + +

    caps_mview_mode

    multiview-mode field string from caps

     
    +
    +
    +

    Returns

    +

    The GstVideoMultiviewMode value

    +

    Given a string from a caps multiview-mode field, +output the corresponding GstVideoMultiviewMode +or GST_VIDEO_MULTIVIEW_MODE_NONE

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_mode_to_caps_string ()

    +
    const gchar *
    +gst_video_multiview_mode_to_caps_string
    +                               (GstVideoMultiviewMode mview_mode);
    +
    +

    Parameters

    +
    +++++ + + + + + +

    mview_mode

    A GstVideoMultiviewMode value

     
    +
    +
    +

    Returns

    +

    The caps string representation of the mode, or NULL if invalid.

    +

    Given a GstVideoMultiviewMode returns the multiview-mode caps string +for insertion into a caps structure

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_guess_half_aspect ()

    +
    gboolean
    +gst_video_multiview_guess_half_aspect (GstVideoMultiviewMode mv_mode,
    +                                       guint width,
    +                                       guint height,
    +                                       guint par_n,
    +                                       guint par_d);
    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    mv_mode

    A GstVideoMultiviewMode

     

    width

    Video frame width in pixels

     

    height

    Video frame height in pixels

     

    par_n

    Numerator of the video pixel-aspect-ratio

     

    par_d

    Denominator of the video pixel-aspect-ratio

     
    +
    +
    +

    Returns

    +

    A boolean indicating whether the +GST_VIDEO_MULTIVIEW_FLAG_HALF_ASPECT flag should be set.

    +

    Utility function that heuristically guess whether a +frame-packed stereoscopic video contains half width/height +encoded views, or full-frame views by looking at the +overall display aspect ratio.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_multiview_video_info_change_mode ()

    +
    void
    +gst_video_multiview_video_info_change_mode
    +                               (GstVideoInfo *info,
    +                                GstVideoMultiviewMode out_mview_mode,
    +                                GstVideoMultiviewFlags out_mview_flags);
    +

    Utility function that transforms the width/height/PAR +and multiview mode and flags of a GstVideoInfo into +the requested mode.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + +

    info

    A GstVideoInfo structure to operate on

     

    out_mview_mode

    A GstVideoMultiviewMode value

     

    out_mview_flags

    A set of GstVideoMultiviewFlags

     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    Types and Values

    +
    +

    struct GstVideoAlignment

    +
    struct GstVideoAlignment {
    +  guint padding_top;
    +  guint padding_bottom;
    +  guint padding_left;
    +  guint padding_right;
    +  guint stride_align[GST_VIDEO_MAX_PLANES];
    +};
    +
    +

    Extra alignment paramters for the memory of video buffers. This +structure is usually used to configure the bufferpool if it supports the +GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    guint padding_top;

    extra pixels on the top

     

    guint padding_bottom;

    extra pixels on the bottom

     

    guint padding_left;

    extra pixels on the left side

     

    guint padding_right;

    extra pixels on the right side

     

    guint stride_align[GST_VIDEO_MAX_PLANES];

    array with extra alignment requirements for the strides

     
    +
    +
    +
    +
    +

    GST_META_TAG_VIDEO_STR

    +
    #define GST_META_TAG_VIDEO_STR "video"
    +
    +

    This metadata is relevant for video streams.

    +

    Since: 1.2

    +
    +
    +
    +

    GST_META_TAG_VIDEO_ORIENTATION_STR

    +
    #define GST_META_TAG_VIDEO_ORIENTATION_STR "orientation"
    +
    +

    This metadata stays relevant as long as video orientation is unchanged.

    +

    Since: 1.2

    +
    +
    +
    +

    GST_META_TAG_VIDEO_SIZE_STR

    +
    #define GST_META_TAG_VIDEO_SIZE_STR "size"
    +
    +

    This metadata stays relevant as long as video size is unchanged.

    +

    Since: 1.2

    +
    +
    +
    +

    GST_META_TAG_VIDEO_COLORSPACE_STR

    +
    #define GST_META_TAG_VIDEO_COLORSPACE_STR "colorspace"
    +
    +

    This metadata stays relevant as long as video colorspace is unchanged.

    +

    Since: 1.2

    +
    +
    +
    +

    enum GstVideoFormat

    +

    Enum value describing the most common video formats.

    +
    +

    Members

    +
    +++++ + + + + @@ -3914,6 +4974,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_FORMAT_UNKNOWN

    Unknown or unset video format id

       

    GST_VIDEO_FORMAT_A420_10BE

    +

    planar 4:4:2:0 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_A420_10LE

    +

    planar 4:4:2:0 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_A422_10BE

    +

    planar 4:4:2:2 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_A422_10LE

    +

    planar 4:4:2:2 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_A444_10BE

    +

    planar 4:4:4:4 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_A444_10LE

    +

    planar 4:4:4:4 YUV, 10 bits per channel

    +
     

    GST_VIDEO_FORMAT_NV61

    +

    planar 4:2:2 YUV with interleaved VU plane (Since 1.6)

    +
     
    @@ -4103,90 +5212,10 @@

    -

    enum GstVideoChromaSite

    -

    Various Chroma sitings.

    -
    -

    Members

    -
    ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    GST_VIDEO_CHROMA_SITE_UNKNOWN

    -

    unknown cositing

    -
     

    GST_VIDEO_CHROMA_SITE_NONE

    -

    no cositing

    -
     

    GST_VIDEO_CHROMA_SITE_H_COSITED

    -

    chroma is horizontally cosited

    -
     

    GST_VIDEO_CHROMA_SITE_V_COSITED

    -

    chroma is vertically cosited

    -
     

    GST_VIDEO_CHROMA_SITE_ALT_LINE

    -

    choma samples are sited on alternate lines

    -
     

    GST_VIDEO_CHROMA_SITE_COSITED

    -

    chroma samples cosited with luma samples

    -
     

    GST_VIDEO_CHROMA_SITE_JPEG

    -

    jpeg style cositing, also for mpeg1 and mjpeg

    -
     

    GST_VIDEO_CHROMA_SITE_MPEG2

    -

    mpeg2 style cositing

    -
     

    GST_VIDEO_CHROMA_SITE_DV

    -

    DV style cositing

    -
     
    -
    -
    -
    -

    enum GstVideoFormatFlags

    The different video flags that a format info can have.

    -

    Members

    +

    Members

    @@ -4275,7 +5304,7 @@

    enum GstVideoPackFlags

    The different flags that can be used when packing and unpacking.

    -

    Members

    +

    Members

    @@ -4337,7 +5366,7 @@

    Possible color range values. These constants are defined for 8 bit color values and can be scaled for other bit depths.

    -

    Members

    +

    Members

    @@ -4377,7 +5406,7 @@

    The color matrix is used to convert between Y'PbPr and non-linear RGB (R'G'B')

    -

    Members

    +

    Members

    @@ -4427,17 +5456,24 @@ + + + + +
     

    GST_VIDEO_COLOR_MATRIX_BT2020

    +

    ITU-R BT.2020 color matrix. Since: 1.6.

    +
     

    -

    enum GstVideoTransferFunction

    -

    The video transfer function defines the formula for converting between -non-linear RGB (R'G'B') and linear RGB

    +

    enum GstVideoColorPrimaries

    +

    The color primaries define the how to transform linear RGB values to and from +the CIE XYZ colorspace.

    -

    Members

    +

    Members

    @@ -4446,151 +5482,167 @@ - + - + - + - + - + - + - + - + + + + +

    GST_VIDEO_TRANSFER_UNKNOWN

    GST_VIDEO_COLOR_PRIMARIES_UNKNOWN

    -

    unknown transfer function

    +

    unknown color primaries

     

    GST_VIDEO_TRANSFER_GAMMA10

    GST_VIDEO_COLOR_PRIMARIES_BT709

    -

    linear RGB, gamma 1.0 curve

    +

    BT709 primaries

     

    GST_VIDEO_TRANSFER_GAMMA18

    GST_VIDEO_COLOR_PRIMARIES_BT470M

    -

    Gamma 1.8 curve

    +

    BT470M primaries

     

    GST_VIDEO_TRANSFER_GAMMA20

    GST_VIDEO_COLOR_PRIMARIES_BT470BG

    -

    Gamma 2.0 curve

    +

    BT470BG primaries

     

    GST_VIDEO_TRANSFER_GAMMA22

    GST_VIDEO_COLOR_PRIMARIES_SMPTE170M

    -

    Gamma 2.2 curve

    +

    SMPTE170M primaries

     

    GST_VIDEO_TRANSFER_BT709

    GST_VIDEO_COLOR_PRIMARIES_SMPTE240M

    -

    Gamma 2.2 curve with a linear segment in the lower - range

    +

    SMPTE240M primaries

     

    GST_VIDEO_TRANSFER_SMPTE240M

    GST_VIDEO_COLOR_PRIMARIES_FILM

    -

    Gamma 2.2 curve with a linear segment in the - lower range

    +

    Generic film

     

    GST_VIDEO_TRANSFER_SRGB

    GST_VIDEO_COLOR_PRIMARIES_BT2020

    -

    Gamma 2.4 curve with a linear segment in the lower - range

    +

    BT2020 primaries. Since: 1.6.

    +
     
    +
    +
    +
    +
    +

    enum GstVideoTransferFunction

    +

    The video transfer function defines the formula for converting between +non-linear RGB (R'G'B') and linear RGB

    +
    +

    Members

    +
    +++++ + + + + - + - + - + - -

    GST_VIDEO_TRANSFER_UNKNOWN

    +

    unknown transfer function

     

    GST_VIDEO_TRANSFER_GAMMA28

    GST_VIDEO_TRANSFER_GAMMA10

    -

    Gamma 2.8 curve

    +

    linear RGB, gamma 1.0 curve

     

    GST_VIDEO_TRANSFER_LOG100

    GST_VIDEO_TRANSFER_GAMMA18

    -

    Logarithmic transfer characteristic - 100:1 range

    +

    Gamma 1.8 curve

     

    GST_VIDEO_TRANSFER_LOG316

    GST_VIDEO_TRANSFER_GAMMA20

    -

    Logarithmic transfer characteristic - 316.22777:1 range

    +

    Gamma 2.0 curve

     
    -
    -
    -
    -
    -

    enum GstVideoColorPrimaries

    -

    The color primaries define the how to transform linear RGB values to and from -the CIE XYZ colorspace.

    -
    -

    Members

    -
    ----- - - + - + - + + + + + + - + - + - + - + @@ -4610,7 +5662,7 @@

    Structure describing the color info.

    -

    Members

    +

    Members

    GST_VIDEO_COLOR_PRIMARIES_UNKNOWN

    GST_VIDEO_TRANSFER_GAMMA22

    -

    unknown color primaries

    +

    Gamma 2.2 curve

     

    GST_VIDEO_COLOR_PRIMARIES_BT709

    GST_VIDEO_TRANSFER_BT709

    -

    BT709 primaries

    +

    Gamma 2.2 curve with a linear segment in the lower + range

     

    GST_VIDEO_COLOR_PRIMARIES_BT470M

    GST_VIDEO_TRANSFER_SMPTE240M

    -

    BT470M primaries

    +

    Gamma 2.2 curve with a linear segment in the + lower range

    +
     

    GST_VIDEO_TRANSFER_SRGB

    +

    Gamma 2.4 curve with a linear segment in the lower + range

     

    GST_VIDEO_COLOR_PRIMARIES_BT470BG

    GST_VIDEO_TRANSFER_GAMMA28

    -

    BT470BG primaries

    +

    Gamma 2.8 curve

     

    GST_VIDEO_COLOR_PRIMARIES_SMPTE170M

    GST_VIDEO_TRANSFER_LOG100

    -

    SMPTE170M primaries

    +

    Logarithmic transfer characteristic + 100:1 range

     

    GST_VIDEO_COLOR_PRIMARIES_SMPTE240M

    GST_VIDEO_TRANSFER_LOG316

    -

    SMPTE240M primaries

    +

    Logarithmic transfer characteristic + 316.22777:1 range

     

    GST_VIDEO_COLOR_PRIMARIES_FILM

    GST_VIDEO_TRANSFER_BT2020_12

    -

    Generic film

    +

    Gamma 2.2 curve with a linear segment in the lower + range. Used for BT.2020 with 12 bits per + component. Since: 1.6.

     
    @@ -4667,6 +5719,14 @@ gsize offset[GST_VIDEO_MAX_PLANES]; gint stride[GST_VIDEO_MAX_PLANES]; + + /* Union preserves padded struct size for backwards compat + * Consumer code should use the accessor macros for fields */ + union { + struct { + GstVideoMultiviewMode multiview_mode; + GstVideoMultiviewFlags multiview_flags; + } abi; };

    Information describing image properties. This information can be filled @@ -4675,7 +5735,7 @@ gst_video_frame_map().

    Use the provided macros to access the info in this structure.

    -

    Members

    +

    Members

    @@ -4719,8 +5779,8 @@ - - + + @@ -4768,7 +5828,7 @@

    The possible values of the GstVideoInterlaceMode describing the interlace mode of the stream.

    -

    Members

    +

    Members

     

    GstVideoChromaSite chroma_site;

    a GstVideoChromaSite.

    GstVideoChromaSite chroma_site;

    a GstVideoChromaSite.

     
    @@ -4818,10 +5878,336 @@
    +

    enum GstVideoMultiviewMode

    +

    All possible stereoscopic 3D and multiview representations. +In conjunction with GstVideoMultiviewFlags, describes how +multiview content is being transported in the stream.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_MULTIVIEW_MODE_NONE

    +

    A special value indicating +no multiview information. Used in GstVideoInfo and other places to +indicate that no specific multiview handling has been requested or +provided. This value is never carried on caps.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_MONO

    +

    All frames are monoscopic.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_LEFT

    +

    All frames represent a left-eye view.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_RIGHT

    +

    All frames represent a right-eye view.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE

    +

    Left and right eye views are +provided in the left and right half of the frame respectively.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX

    +

    Left and right eye +views are provided in the left and right half of the frame, but +have been sampled using quincunx method, with half-pixel offset +between the 2 views.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED

    +

    Alternating vertical +columns of pixels represent the left and right eye view respectively.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED

    +

    Alternating horizontal +rows of pixels represent the left and right eye view respectively.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM

    +

    The top half of the frame +contains the left eye, and the bottom half the right eye.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD

    +

    Pixels are arranged with +alternating pixels representing left and right eye views in a +checkerboard fashion.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME

    +

    Left and right eye views +are provided in separate frames alternately.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME

    +

    Multiple +independent views are provided in separate frames in sequence. +This method only applies to raw video buffers at the moment. +Specific view identification is via the GstVideoMultiviewMeta +and GstVideoMeta(s) on raw video buffers.

    +
     

    GST_VIDEO_MULTIVIEW_MODE_SEPARATED

    +

    Multiple views are +provided as separate GstMemory framebuffers attached to each +GstBuffer, described by the GstVideoMultiviewMeta +and GstVideoMeta(s)

    +
     
    +
    +
    +
    +
    +

    enum GstVideoMultiviewFramePacking

    +

    GstVideoMultiviewFramePacking represents the subset of GstVideoMultiviewMode +values that can be applied to any video frame without needing extra metadata. +It can be used by elements that provide a property to override the +multiview interpretation of a video stream when the video doesn't contain +any markers.

    +

    This enum is used (for example) on playbin, to re-interpret a played +video stream as a stereoscopic video. The individual enum values are +equivalent to and have the same value as the matching GstVideoMultiviewMode.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE

    +

    A special value indicating +no frame packing info.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO

    +

    All frames are monoscopic.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT

    +

    All frames represent a left-eye view.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT

    +

    All frames represent a right-eye view.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE

    +

    Left and right eye views are +provided in the left and right half of the frame respectively.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX

    +

    Left and right eye +views are provided in the left and right half of the frame, but +have been sampled using quincunx method, with half-pixel offset +between the 2 views.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED

    +

    Alternating vertical +columns of pixels represent the left and right eye view respectively.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED

    +

    Alternating horizontal +rows of pixels represent the left and right eye view respectively.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM

    +

    The top half of the frame +contains the left eye, and the bottom half the right eye.

    +
     

    GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD

    +

    Pixels are arranged with +alternating pixels representing left and right eye views in a +checkerboard fashion.

    +
     
    +
    +
    +
    +
    +

    enum GstVideoMultiviewFlags

    +

    GstVideoMultiviewFlags are used to indicate extra properties of a +stereo/multiview stream beyond the frame layout and buffer mapping +that is conveyed in the GstMultiviewMode.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_MULTIVIEW_FLAGS_NONE

    +

    No flags

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST

    +

    For stereo streams, the + normal arrangement of left and right views is reversed.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED

    +

    The left view is vertically + mirrored.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED

    +

    The left view is horizontally + mirrored.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED

    +

    The right view is + vertically mirrored.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED

    +

    The right view is + horizontally mirrored.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT

    +

    For frame-packed + multiview modes, indicates that the individual + views have been encoded with half the true width or height + and should be scaled back up for display. This flag + is used for overriding input layout interpretation + by adjusting pixel-aspect-ratio. + For side-by-side, column interleaved or checkerboard packings, the + pixel width will be doubled. For row interleaved and top-bottom + encodings, pixel height will be doubled.

    +
     

    GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO

    +

    The video stream contains both + mono and multiview portions, signalled on each buffer by the + absence or presence of the GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW + + buffer flag.

    +
     
    +
    +
    +
    +

    enum GstVideoFlags

    Extra video flags

    -

    Members

    +

    Members

    @@ -4873,7 +6259,7 @@

    A video frame obtained from gst_video_frame_map()

    -

    Members

    +

    Members

    @@ -4888,8 +6274,8 @@ - - + + @@ -4926,7 +6312,7 @@

    enum GstVideoFrameFlags

    Extra video frame flags

    -

    Members

    +

    Members

    GstVideoFrameFlags flags;

      

    GstVideoFrameFlags for the frame

     

    GstBuffer *buffer;

    @@ -4945,7 +6331,7 @@ @@ -4971,6 +6357,22 @@ + + + + + + + + + +

    GST_VIDEO_FRAME_FLAG_INTERLACED

    The video frame is interlaced. In mixed - interlace-mode, this flags specifies if the frame is interlace or + interlace-mode, this flag specifies if the frame is interlaced or progressive.

       

    GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW

    +

    The video contains one or + more non-mono views

    +
     

    GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE

    +

    The video frame is the first + in a set of corresponding views provided as sequential frames.

    +
     
    @@ -4978,9 +6380,10 @@

    enum GstVideoBufferFlags

    -

    Additional video buffer flags.

    +

    Additional video buffer flags. These flags can potentially be used on any +buffers carrying video data - even encoded data.

    -

    Members

    +

    Members

    @@ -5010,7 +6413,7 @@ @@ -5019,15 +6422,38 @@ + + + + + + + + + + - - + +

    GST_VIDEO_BUFFER_FLAG_RFF

    If the GstBuffer is interlaced, then the first field - (as defined by the GST_VIDEO_BUFFER_TFF flag setting) + (as defined by the GST_VIDEO_BUFFER_TFF flag setting) is repeated.

     

    GST_VIDEO_BUFFER_FLAG_ONEFIELD

    If the GstBuffer is interlaced, then only the - first field (as defined by the GST_VIDEO_BUFFER_TFF + first field (as defined by the GST_VIDEO_BUFFER_TFF flag setting) is to be displayed.

     

    GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW

    +

    The GstBuffer contains one or more specific views, + such as left or right eye view. This flags is set on + any buffer that contains non-mono content - even for + streams that contain only a single viewpoint. In mixed + mono / non-mono streams, the absense of the flag marks + mono buffers.

    +
     

    GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE

    +

    When conveying stereo/multiview content with + frame-by-frame methods, this flag marks the first buffer + in a bundle of frames that belong together.

    +
     

    GST_VIDEO_BUFFER_FLAG_LAST

       +

    Offset to define more flags

    +
     
    @@ -5038,7 +6464,7 @@

    enum GstVideoTileType

    Enum value describing the most common tiling types.

    -

    Members

    +

    Members

    @@ -5062,7 +6488,7 @@

    enum GstVideoTileMode

    Enum value describing the available tiling modes.

    -

    Members

    +

    Members

    @@ -5091,10 +6517,14 @@
    +
    +
    +

    GstVideoConverter

    +
    typedef struct _GstVideoConverter GstVideoConverter;
    +
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideometa.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideometa.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideometa.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideometa.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideometa +gstvideometa: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -79,9 +79,11 @@ -#define + +GstVideoMeta * + -gst_buffer_get_video_meta() +gst_buffer_get_video_meta () @@ -273,7 +275,6 @@

    Returns

    TRUE if the map operation was successful.

    -


    @@ -314,7 +315,6 @@

    Returns

    TRUE if the memory was successfully unmapped.

    -


    @@ -380,8 +380,8 @@

    Returns

    the GstVideoMeta on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -453,15 +453,42 @@

    Returns

    the GstVideoMeta on buffer -.

    -

    +.

    +

    [transfer none]


    -

    gst_buffer_get_video_meta()

    -
    #define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE))
    -
    +

    gst_buffer_get_video_meta ()

    +
    GstVideoMeta *
    +gst_buffer_get_video_meta (GstBuffer *buffer);
    +

    Find the GstVideoMeta on buffer + with the lowest id +.

    +

    Buffers can contain multiple GstVideoMeta metadata items when dealing with +multiview buffers.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    buffer

    a GstBuffer

     
    +
    +
    +

    Returns

    +

    the GstVideoMeta with lowest id (usually 0) or NULL when there +is no such metadata on buffer +.

    +

    [transfer none]

    +

    @@ -501,8 +528,8 @@

    the GstVideoMeta with id or NULL when there is no such metadata on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -576,8 +603,8 @@

    Returns

    the GstVideoRegionOfInterestMeta on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -639,8 +666,8 @@

    Returns

    the GstVideoRegionOfInterestMeta on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -684,11 +711,11 @@

    Returns

    -

    the GstVideoeRegionOfInterestMeta with id +

    the GstVideoRegionOfInterestMeta with id or NULL when there is no such metadata on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -729,11 +756,26 @@   -

    upload

    -

    the function to upload the buffer to a specific texture ID

    +

    texture_orientation

    +

    the GstVideoGLTextureOrientation

    +  + + +

    n_textures

    +

    the number of textures

    +  + + +

    texture_type

    +

    array of GstVideoGLTextureType

      +

    upload

    +

    the function to upload the buffer to a specific texture ID.

    +[scope call] + +

    user_data

    user data for the implementor of upload

    @@ -741,15 +783,15 @@

    user_data_copy

    -

    function to copy user_data -

    -  +

    function to copy user_data +.

    +[scope call]

    user_data_free

    -

    function to free user_data -

    -  +

    function to free user_data +.

    +[scope call] @@ -757,8 +799,8 @@

    Returns

    the GstVideoGLTextureUploadMeta on buffer -.

    -

    +.

    +

    [transfer none]


    @@ -800,7 +842,6 @@

    Returns

    TRUE if uploading succeeded, FALSE otherwise.

    -

    @@ -1048,13 +1089,13 @@

    guint w;

    -  -  +

    bounding box width

    guint h;

    -  -  +

    bounding box height

    +  @@ -1070,7 +1111,7 @@

    When this option is enabled on the bufferpool, GST_BUFFER_POOL_OPTION_VIDEO_META should also be enabled.

    -

    Since 1.2.2

    +

    Since: 1.2.2


    @@ -1123,7 +1164,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideoorientation +gstvideoorientation: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -152,7 +152,7 @@ gint *center);

    Get the horizontal centering offset from the given object.

    -

    Parameters

    +

    Parameters

    @@ -174,9 +174,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports centering

    -


    @@ -187,7 +186,7 @@ gboolean *flip);

    Get the horizontal flipping state (TRUE for flipped) from the given object.

    -

    Parameters

    +

    Parameters

    @@ -209,9 +208,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports flipping

    -


    @@ -222,7 +220,7 @@ gint *center);

    Get the vertical centering offset from the given object.

    -

    Parameters

    +

    Parameters

    @@ -244,9 +242,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports centering

    -


    @@ -257,7 +254,7 @@ gboolean *flip);

    Get the vertical flipping state (TRUE for flipped) from the given object.

    -

    Parameters

    +

    Parameters

    @@ -279,9 +276,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports flipping

    -


    @@ -292,7 +288,7 @@ gint center);

    Set the horizontal centering offset for the given object.

    -

    Parameters

    +

    Parameters

    @@ -314,9 +310,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports centering

    -


    @@ -327,7 +322,7 @@ gboolean flip);

    Set the horizontal flipping state (TRUE for flipped) for the given object.

    -

    Parameters

    +

    Parameters

    @@ -349,9 +344,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports flipping

    -


    @@ -362,7 +356,7 @@ gint center);

    Set the vertical centering offset for the given object.

    -

    Parameters

    +

    Parameters

    @@ -384,9 +378,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports centering

    -


    @@ -397,7 +390,7 @@ gboolean flip);

    Set the vertical flipping state (TRUE for flipped) for the given object.

    -

    Parameters

    +

    Parameters

    @@ -419,9 +412,8 @@
    -

    Returns

    +

    Returns

    TRUE in case the element supports flipping

    -

    @@ -456,7 +448,7 @@

    GstVideoOrientationInterface interface.

    -

    Members

    +

    Members

    @@ -516,7 +508,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideooverlaycomposition +gstvideooverlaycomposition: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -490,7 +490,6 @@

    Returns

    the number of rectangles

    -


    @@ -565,7 +564,6 @@

    Returns

    the sequence number of comp

    -


    @@ -716,6 +714,11 @@
    +
    +

    Returns

    +

    a GstVideoOverlayCompositionMeta.

    +

    [transfer none]

    +

    @@ -1173,7 +1176,6 @@

    Returns

    TRUE if valid render dimensions were retrieved.

    -


    @@ -1214,7 +1216,6 @@

    Returns

    the sequence number of rectangle

    -


    @@ -1335,7 +1336,6 @@

    Returns

    the GstVideoOverlayFormatFlags associated with the rectangle.

    -


    @@ -1363,7 +1363,6 @@

    Returns

    the global-alpha value associated with the rectangle.

    -


    @@ -1376,7 +1375,7 @@

    Sets the global alpha value associated with a GstVideoOverlayRectangle. Per- pixel alpha values are multiplied with this value. Valid values: 0 <= global_alpha <= 1; 1 to deactivate.

    -

    # rectangle +

    rectangle must be writable, meaning its refcount must be 1. You can make the rectangles inside a GstVideoOverlayComposition writable using gst_video_overlay_composition_make_writable() or @@ -1389,11 +1388,18 @@ - + +

    rectangle

    a GstVideoOverlayRectangle

      - + + +

    global_alpha

    +

    Global alpha value (0 to 1.0)

    +  + + @@ -1412,7 +1418,7 @@
    #define             GST_VIDEO_OVERLAY_COMPOSITION_BLEND_FORMATS

    Video formats supported by gst_video_overlay_composition_blend(), for use in overlay elements' pad template caps.

    -

    Since 1.2

    +

    Since: 1.2


    @@ -1495,7 +1501,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideooverlay +gstvideooverlay: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -134,7 +134,7 @@

    Description

    -

    +

    The GstVideoOverlay interface is used for 2 main purposes :

      @@ -146,7 +146,7 @@

    • To force a redrawing of the latest video frame the video sink element -displayed on the Window. Indeed if the GstPipeline is in GST_STATE_PAUSED +displayed on the Window. Indeed if the GstPipeline is in GST_STATE_PAUSED state, moving the Window around will damage its content. Application developers will want to handle the Expose events themselves and force the video sink element to refresh the Window's content. @@ -246,7 +246,7 @@


    -

    Two basic usage scenarios

    +

    Two basic usage scenarios

    There are two basic usage scenarios: in the simplest case, the application uses playbin or plasink or knows exactly what particular element is used @@ -293,7 +293,7 @@


    -

    GstVideoOverlay and Gtk+

    +

    GstVideoOverlay and Gtk+

    @@ -502,7 +502,7 @@

    -

    GstVideoOverlay and Qt

    +

    GstVideoOverlay and Qt

    @@ -634,7 +634,7 @@

    This will post a "have-window-handle" element message on the bus.

    This function should only be used by video overlay plugin developers.

    -

    Parameters

    +

    Parameters

    @@ -668,7 +668,7 @@ will tell the overlay to stop using that window and create an internal one.

    -

    Parameters

    +

    Parameters

    @@ -702,7 +702,7 @@ window.

    This function should only be used by video overlay plugin developers.

    -

    Parameters

    +

    Parameters

    @@ -725,7 +725,7 @@

    Tell an overlay that it has been exposed. This will redraw the current frame in the drawable even if the pipeline is PAUSED.

    -

    Parameters

    +

    Parameters

    @@ -752,7 +752,7 @@ for them. This method allows you to disable events handling completely from the GstVideoOverlay.

    -

    Parameters

    +

    Parameters

    @@ -796,7 +796,7 @@

    This method is needed for non fullscreen video overlay in UI toolkits that do not support subwindows.

    -

    Parameters

    +

    Parameters

    @@ -833,9 +833,8 @@
    -

    Returns

    +

    Returns

    FALSE if not supported by the sink.

    -


    @@ -847,7 +846,7 @@

    Convenience function to check if the given message is a "prepare-window-handle" message from a GstVideoOverlay.

    -

    Parameters

    +

    Parameters

    @@ -862,10 +861,9 @@
    -

    Returns

    +

    Returns

    whether msg is a "prepare-window-handle" message

    -

    @@ -896,7 +894,7 @@

    GstVideoOverlay interface

    -

    Members

    +

    Members

    @@ -936,7 +934,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoPool +GstVideoPool: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -114,9 +114,9 @@

    Create a new bufferpool that can allocate video frames. This bufferpool supports all the video bufferpool options.

    -

    Returns

    -

    a new GstBufferPool to allocate video frames

    -

    +

    Returns

    +

    a new GstBufferPool to allocate video frames.

    +

    [transfer floating]


    @@ -131,7 +131,7 @@ in align

    -

    Parameters

    +

    Parameters

    @@ -153,10 +153,9 @@
    -

    Returns

    +

    Returns

    TRUE if config could be parsed correctly.

    -


    @@ -171,7 +170,7 @@ config

    -

    Parameters

    +

    Parameters

    @@ -238,7 +237,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,379 @@ + + + + +GstVideoResampler: GStreamer Base Plugins 1.0 Library Reference Manual + + + + + + + + + +
    + + + + + + +
    +
    +
    + + +
    +

    GstVideoResampler

    +

    GstVideoResampler — Utility structure for resampler information

    +
    +
    +

    Functions

    +
    ++++ + + + + + + + + + + +
    +void + +gst_video_resampler_clear () +
    +gboolean + +gst_video_resampler_init () +
    +
    + +
    +

    Includes

    +
    #include <gst/video/video-resampler.h>
    +
    +
    +
    +

    Description

    +

    GstVideoResampler is a structure which holds the information +required to perform various kinds of resampling filtering.

    +
    +
    +

    Functions

    +
    +

    gst_video_resampler_clear ()

    +
    void
    +gst_video_resampler_clear (GstVideoResampler *resampler);
    +

    Clear a previously initialized GstVideoResampler resampler +.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    resampler

    a GstVideoResampler

     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_resampler_init ()

    +
    gboolean
    +gst_video_resampler_init (GstVideoResampler *resampler,
    +                          GstVideoResamplerMethod method,
    +                          GstVideoResamplerFlags flags,
    +                          guint n_phases,
    +                          guint n_taps,
    +                          gdouble shift,
    +                          guint in_size,
    +                          guint out_size,
    +                          GstStructure *options);
    +
    +
    +
    +

    Types and Values

    +
    +

    struct GstVideoResampler

    +
    struct GstVideoResampler {
    +  gint in_size;
    +  gint out_size;
    +  guint max_taps;
    +  guint n_phases;
    +  guint32 *offset;
    +  guint32 *phase;
    +  guint32 *n_taps;
    +  gdouble *taps;
    +};
    +
    +

    A structure holding resampler information.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    gint in_size;

    the input size

     

    gint out_size;

    the output size

     

    guint max_taps;

    the maximum number of taps

     

    guint n_phases;

    the number of phases

     

    guint32 *offset;

    array with the source offset for each output element

     

    guint32 *phase;

    array with the phase to use for each output element

     

    guint32 *n_taps;

    array with new number of taps for each phase

     

    gdouble *taps;

    the taps for all phases

     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    enum GstVideoResamplerFlags

    +

    Different resampler flags.

    +
    +

    Members

    +
    +++++ + + + + + +

    GST_VIDEO_RESAMPLER_FLAG_NONE

    +

    no flags

    +
     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    enum GstVideoResamplerMethod

    +

    Different subsampling and upsampling methods

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_RESAMPLER_METHOD_NEAREST

    +

    Duplicates the samples when + upsampling and drops when downsampling

    +
     

    GST_VIDEO_RESAMPLER_METHOD_LINEAR

    +

    Uses linear interpolation to reconstruct + missing samples and averaging to downsample

    +
     

    GST_VIDEO_RESAMPLER_METHOD_CUBIC

    +

    Uses cubic interpolation

    +
     

    GST_VIDEO_RESAMPLER_METHOD_SINC

    +

    Uses sinc interpolation

    +
     

    GST_VIDEO_RESAMPLER_METHOD_LANCZOS

    +

    Uses lanczos interpolation

    +
     
    +
    +

    Since: 1.6

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_CUBIC_B

    +
    #define GST_VIDEO_RESAMPLER_OPT_CUBIC_B      "GstVideoResampler.cubic-b"
    +
    +

    G_TYPE_DOUBLE, B parameter of the cubic filter. The B +parameter controls the bluriness. Values between 0.0 and +2.0 are accepted. 1/3 is the default.

    +

    Below are some values of popular filters: + B C +Hermite 0.0 0.0 +Spline 1.0 0.0 +Catmull-Rom 0.0 1/2 +Mitchell 1/3 1/3 +Robidoux 0.3782 0.3109 +Robidoux + Sharp 0.2620 0.3690 +Robidoux + Soft 0.6796 0.1602

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_CUBIC_C

    +
    #define GST_VIDEO_RESAMPLER_OPT_CUBIC_C      "GstVideoResampler.cubic-c"
    +
    +

    G_TYPE_DOUBLE, C parameter of the cubic filter. The C +parameter controls the Keys alpha value. Values between 0.0 and +2.0 are accepted. 1/3 is the default.

    +

    See GST_VIDEO_RESAMPLER_OPT_CUBIC_B for some more common values

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_ENVELOPE

    +
    #define GST_VIDEO_RESAMPLER_OPT_ENVELOPE      "GstVideoResampler.envelope"
    +
    +

    G_TYPE_DOUBLE, specifies the size of filter envelope for +GST_VIDEO_RESAMPLER_METHOD_LANCZOS +. values are clamped between +1.0 and 5.0. 2.0 is the default.

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_MAX_TAPS

    +
    #define GST_VIDEO_RESAMPLER_OPT_MAX_TAPS     "GstVideoResampler.max-taps"
    +
    +

    G_TYPE_INT, limits the maximum number of taps to use. +16 is the default.

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_SHARPEN

    +
    #define GST_VIDEO_RESAMPLER_OPT_SHARPEN      "GstVideoResampler.sharpen"
    +
    +

    G_TYPE_DOUBLE, specifies sharpening of the filter for +GST_VIDEO_RESAMPLER_METHOD_LANCZOS +. values are clamped between +0.0 and 1.0. 0.0 is the default.

    +
    +
    +
    +

    GST_VIDEO_RESAMPLER_OPT_SHARPNESS

    +
    #define GST_VIDEO_RESAMPLER_OPT_SHARPNESS     "GstVideoResampler.sharpness"
    +
    +

    G_TYPE_DOUBLE, specifies sharpness of the filter for +GST_VIDEO_RESAMPLER_METHOD_LANCZOS +. values are clamped between +0.5 and 1.5. 1.0 is the default.

    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,598 @@ + + + + +GstVideoScaler: GStreamer Base Plugins 1.0 Library Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    GstVideoScaler

    +

    GstVideoScaler — Utility object for rescaling video frames

    +
    +
    +

    Functions

    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +void + +gst_video_scaler_2d () +
    +GstVideoScaler * + +gst_video_scaler_combine_packed_YUV () +
    +void + +gst_video_scaler_free () +
    const gdouble * + +gst_video_scaler_get_coeff () +
    +void + +gst_video_scaler_horizontal () +
    +GstVideoScaler * + +gst_video_scaler_new () +
    +void + +gst_video_scaler_vertical () +
    +
    +
    +

    Types and Values

    +
    ++++ + + + + + + + + + + +
     GstVideoScaler
    enumGstVideoScalerFlags
    +
    +
    +

    Includes

    +
    #include <gst/video/video-scaler.h>
    +
    +
    +
    +

    Description

    +

    GstVideoScaler is a utility object for rescaling and resampling +video frames using various interpolation / sampling methods.

    +
    +
    +

    Functions

    +
    +

    gst_video_scaler_2d ()

    +
    void
    +gst_video_scaler_2d (GstVideoScaler *hscale,
    +                     GstVideoScaler *vscale,
    +                     GstVideoFormat format,
    +                     gpointer src,
    +                     gint src_stride,
    +                     gpointer dest,
    +                     gint dest_stride,
    +                     guint x,
    +                     guint y,
    +                     guint width,
    +                     guint height);
    +

    Scale a rectangle of pixels in src + with src_stride + to dest + with +dest_stride + using the horizontal scaler hscaler + and the vertical +scaler vscale +.

    +

    One or both of hscale + and vscale + can be NULL to only perform scaling in +one dimension or do a copy without scaling.

    +

    x + and y + are the coordinates in the destination image to process.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    hscale

    a horzontal GstVideoScaler

     

    vscale

    a vertical GstVideoScaler

     

    format

    a GstVideoFormat for srcs +and dest +

     

    src

    source pixels

     

    src_stride

    source pixels stride

     

    dest

    destination pixels

     

    dest_stride

    destination pixels stride

     

    x

    the horizontal destination offset

     

    y

    the vertical destination offset

     

    width

    the number of output pixels to scale

     

    height

    the number of output lines to scale

     
    +
    +
    +
    +
    +

    gst_video_scaler_combine_packed_YUV ()

    +
    GstVideoScaler *
    +gst_video_scaler_combine_packed_YUV (GstVideoScaler *y_scale,
    +                                     GstVideoScaler *uv_scale,
    +                                     GstVideoFormat in_format,
    +                                     GstVideoFormat out_format);
    +

    Combine a scaler for Y and UV into one scaler for the packed format +.

    +

    [skip]

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + +

    y_scale

    a scaler for the Y component

     

    uv_scale

    a scaler for the U and V components

     

    in_format

    the input video format

     

    out_format

    the output video format

     
    +
    +
    +

    Returns

    +

    a new horizontal videoscaler for format +.

    +
    +

    Since: 1.6

    +
    +
    +
    +

    gst_video_scaler_free ()

    +
    void
    +gst_video_scaler_free (GstVideoScaler *scale);
    +

    Free a previously allocated GstVideoScaler scale +.

    +
    +

    Parameters

    +
    +++++ + + + + + +

    scale

    a GstVideoScaler

     
    +
    +
    +
    +
    +

    gst_video_scaler_get_coeff ()

    +
    const gdouble *
    +gst_video_scaler_get_coeff (GstVideoScaler *scale,
    +                            guint out_offset,
    +                            guint *in_offset,
    +                            guint *n_taps);
    +

    For a given pixel at out_offset +, get the first required input pixel at +in_offset + and the n_taps + filter coefficients.

    +

    Note that for interlaced content, in_offset + needs to be incremented with +2 to get the next input line.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + +

    scale

    a GstVideoScaler

     

    out_offset

    an output offset

     

    in_offset

    result input offset

     

    n_taps

    result n_taps

     
    +
    +
    +

    Returns

    +

    an array of n_tap +gdouble values with filter coefficients.

    +
    +
    +
    +
    +

    gst_video_scaler_horizontal ()

    +
    void
    +gst_video_scaler_horizontal (GstVideoScaler *scale,
    +                             GstVideoFormat format,
    +                             gpointer src,
    +                             gpointer dest,
    +                             guint dest_offset,
    +                             guint width);
    +

    Horizontally scale the pixels in src + to dest +, starting from dest_offset + +for width + samples.

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    scale

    a GstVideoScaler

     

    format

    a GstVideoFormat for src +and dest +

     

    src

    source pixels

     

    dest

    destination pixels

     

    dest_offset

    the horizontal destination offset

     

    width

    the number of pixels to scale

     
    +
    +
    +
    +
    +

    gst_video_scaler_new ()

    +
    GstVideoScaler *
    +gst_video_scaler_new (GstVideoResamplerMethod method,
    +                      GstVideoScalerFlags flags,
    +                      guint n_taps,
    +                      guint in_size,
    +                      guint out_size,
    +                      GstStructure *options);
    +

    Make a new method + video scaler. in_size + source lines/pixels will +be scaled to out_size + destination lines/pixels.

    +

    n_taps + specifies the amount of pixels to use from the source for one output +pixel. If n_taps is 0, this function chooses a good value automatically based +on the method + and in_size +/out_size +.

    +

    [skip]

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    method

    a GstVideoResamplerMethod

     

    flags

    GstVideoScalerFlags

     

    n_taps

    number of taps to use

     

    in_size

    number of source elements

     

    out_size

    number of destination elements

     

    options

    extra options.

    [allow-none]
    +
    +
    +

    Returns

    +

    a GstVideoResample

    +
    +
    +
    +
    +

    gst_video_scaler_vertical ()

    +
    void
    +gst_video_scaler_vertical (GstVideoScaler *scale,
    +                           GstVideoFormat format,
    +                           gpointer src_lines[],
    +                           gpointer dest,
    +                           guint dest_offset,
    +                           guint width);
    +

    Vertically combine width + pixels in the lines in src_lines + to dest +. +dest + is the location of the target line at dest_offset + and +srcs + are the input lines for dest_offset +, as obtained with +gst_video_scaler_get_info().

    +
    +

    Parameters

    +
    +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    scale

    a GstVideoScaler

     

    format

    a GstVideoFormat for srcs +and dest +

     

    src_lines

    source pixels lines

     

    dest

    destination pixels

     

    dest_offset

    the vertical destination offset

     

    width

    the number of pixels to scale

     
    +
    +
    +
    +
    +

    Types and Values

    +
    +

    GstVideoScaler

    +
    typedef struct _GstVideoScaler GstVideoScaler;
    +
    +
    +
    +

    enum GstVideoScalerFlags

    +

    Different scale flags.

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + +

    GST_VIDEO_SCALER_FLAG_NONE

    +

    no flags

    +
     

    GST_VIDEO_SCALER_FLAG_INTERLACED

    +

    Set up a scaler for interlaced content

    +
     
    +
    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideosink.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideosink.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideosink.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideosink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideosink +gstvideosink: GStreamer Base Plugins 1.0 Library Reference Manual - + - + @@ -21,7 +21,7 @@ Home Up -Prev +Prev Next
    @@ -126,7 +126,7 @@

    Description

    -

    +

    Provides useful functions and a base class for video sinks.

    @@ -151,7 +151,7 @@

    Get the sink GstPad of obj .

    -

    Parameters

    +

    Parameters

    @@ -190,7 +190,7 @@ one and scaling is set to FALSE.

    -

    Parameters

    +

    Parameters

    @@ -236,7 +236,7 @@ and width members.

    -

    Members

    +

    Members

    @@ -271,7 +271,7 @@ show_frame virtual function.

    -

    Members

    +

    Members

    @@ -308,7 +308,7 @@

    Helper structure representing a rectangular area.

    -

    Members

    +

    Members

    @@ -354,7 +354,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: gstvideoutils +gstvideoutils: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -215,7 +215,7 @@

    The entire set of flags for the frame

    -

    Parameters

    +

    Parameters

    @@ -238,7 +238,7 @@

    Checks whether the given flag is set

    -

    Parameters

    +

    Parameters

    @@ -267,7 +267,7 @@

    This macro sets the given bits

    -

    Parameters

    +

    Parameters

    @@ -296,7 +296,7 @@

    This macro usets the given bits.

    -

    Parameters

    +

    Parameters

    @@ -325,7 +325,7 @@

    Tests if the buffer should only be decoded but not sent downstream.

    -

    Parameters

    +

    Parameters

    @@ -348,7 +348,7 @@

    Tests if the frame must be encoded as a keyframe. Applies only to frames provided to encoders. Decoders can safely ignore this field.

    -

    Parameters

    +

    Parameters

    @@ -373,7 +373,7 @@

    Applies only to frames provided to encoders. Decoders can safely ignore this field.

    -

    Parameters

    +

    Parameters

    @@ -396,7 +396,7 @@

    Tests if the frame is a synchronization point (like a keyframe).

    Decoder implementations can use this to detect keyframes.

    -

    Parameters

    +

    Parameters

    @@ -421,7 +421,7 @@ are not meant to be displayed.

    Encoder implementation can safely ignore this field.

    -

    Parameters

    +

    Parameters

    @@ -458,7 +458,7 @@

    Decoder implementing parsing features should set this when they detect such a synchronization point.

    -

    Parameters

    +

    Parameters

    @@ -498,7 +498,7 @@ gst_video_codec_frame_ref (GstVideoCodecFrame *frame);

    Increases the refcount of the given frame by one.

    -

    Parameters

    +

    Parameters

    @@ -513,10 +513,9 @@
    -

    Returns

    +

    Returns

    buf

    -


    @@ -527,7 +526,7 @@

    Decreases the refcount of the frame. If the refcount reaches 0, the frame will be freed.

    -

    Parameters

    +

    Parameters

    @@ -558,7 +557,7 @@ before the user_data is replaced.

    -

    Parameters

    +

    Parameters

    @@ -593,7 +592,7 @@

    Gets private data set on the frame by the subclass via gst_video_codec_frame_set_user_data() previously.

    -

    Parameters

    +

    Parameters

    @@ -608,7 +607,7 @@
    -

    Returns

    +

    Returns

    The previously set user_data.

    [transfer none]

    @@ -620,7 +619,7 @@ gst_video_codec_state_ref (GstVideoCodecState *state);

    Increases the refcount of the given state by one.

    -

    Parameters

    +

    Parameters

    @@ -635,10 +634,9 @@
    -

    Returns

    +

    Returns

    buf

    -


    @@ -649,7 +647,7 @@

    Decreases the refcount of the state. If the refcount reaches 0, the state will be freed.

    -

    Parameters

    +

    Parameters

    @@ -689,7 +687,7 @@

    A GstVideoCodecFrame represents a video frame both in raw and encoded form.

    -

    Members

    +

    Members

    @@ -738,7 +736,8 @@ +by the frame and references to the frame instead of the buffer should +be kept.

    @@ -767,7 +766,7 @@

    enum GstVideoCodecFrameFlags

    Flags for GstVideoCodecFrame

    -

    Members

    +

    Members

    GstBuffer *input_buffer;

    the input GstBuffer that created this frame. The buffer is owned -by the frame and references to the frame instead of the buffer should

     
    @@ -829,7 +828,7 @@ gst_video_encoder_set_output_state() methods.

    -

    Members

    +

    Members

    @@ -860,7 +859,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-allocators.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-allocators.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-allocators.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-allocators.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Allocators Library +Allocators Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -22,9 +22,14 @@

    Allocators Library

    -
    +
    +
    dmabuf — Memory wrapper for Linux dmabuf memory -
    +
    +
    +fdmemory — Memory wrapper for fd backed memory +
    +

    This library should be linked to by getting cflags and libs from gstreamer-plugins-base-1.0.pc and adding @@ -32,7 +37,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-app.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-app.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-app.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-app.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: App Library +App Library: GStreamer Base Plugins 1.0 Library Reference Manual - + - + @@ -16,7 +16,7 @@ - +
    Home UpPrevPrev Next
    @@ -42,7 +42,6 @@

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-audio.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-audio.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-audio.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-audio.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Audio Library +Audio Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -76,7 +76,6 @@

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-base-utils.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-base-utils.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-base-utils.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-base-utils.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Base Utils Library +Base Utils Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -57,7 +57,6 @@

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-ffft.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-ffft.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-ffft.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-ffft.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: FFT Library +FFT Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -51,7 +51,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-libs-hierarchy.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-libs-hierarchy.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-libs-hierarchy.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-libs-hierarchy.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Part II. Object Hierarchy +Part II. Object Hierarchy: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -65,7 +65,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-mikey.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-mikey.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-mikey.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-mikey.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: MIKEY Library +MIKEY Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -32,7 +32,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-plugins-base.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-plugins-base.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-plugins-base.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-plugins-base.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Part I. GStreamer Base Plugins Libraries +Part I. GStreamer Base Plugins Libraries: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -31,9 +31,14 @@
    Allocators Library
    -
    +
    +
    dmabuf — Memory wrapper for Linux dmabuf memory -
    + +
    +fdmemory — Memory wrapper for fd backed memory +
    +
    App Library
    @@ -136,7 +141,7 @@ gstrtppayloads — Helper methods for dealing with RTP payloads
    -gstrtphdrext +gstrtphdrext — Helper methods for dealing with RTP header extensions
    RTSP Library
    @@ -253,13 +258,25 @@ gstvideofilter — Base class for video filters
    +GstVideoDither — Utility object for dithering and quantizing lines of video +
    +
    +GstVideoChroma — Functions and utility object for operating on chroma video planes +
    +
    +GstVideoResampler — Utility structure for resampler information +
    +
    +GstVideoScaler — Utility object for rescaling video frames +
    +
    gstvideosink — Base class for video sinks
    gstcolorbalance — Interface for adjusting color balance settings
    -gstcolorbalancechannelObject representing a channel from the GstColorBalance +gstcolorbalancechannel — Object representing a channel from the GstColorBalance interface.
    @@ -296,7 +313,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-riff.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-riff.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-riff.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-riff.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Riff Media Library +Riff Media Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -32,7 +32,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-rtp.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-rtp.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-rtp.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-rtp.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: RTP Library +RTP Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -42,7 +42,7 @@ gstrtppayloads — Helper methods for dealing with RTP payloads
    -gstrtphdrext +gstrtphdrext — Helper methods for dealing with RTP header extensions

    @@ -52,7 +52,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-rtsp.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-rtsp.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-rtsp.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-rtsp.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: RTSP Library +RTSP Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -52,7 +52,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-sdp.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-sdp.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-sdp.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-sdp.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: SDP Library +SDP Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -32,7 +32,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-tag.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-tag.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-tag.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-tag.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Tag Support Library +Tag Support Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -67,7 +67,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-video.html gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-video.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/gstreamer-video.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/gstreamer-video.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Library Reference Manual: Video Library +Video Library: GStreamer Base Plugins 1.0 Library Reference Manual - + @@ -36,13 +36,25 @@ gstvideofilter — Base class for video filters
    +GstVideoDither — Utility object for dithering and quantizing lines of video +
    +
    +GstVideoChroma — Functions and utility object for operating on chroma video planes +
    +
    +GstVideoResampler — Utility structure for resampler information +
    +
    +GstVideoScaler — Utility object for rescaling video frames +
    +
    gstvideosink — Base class for video sinks
    gstcolorbalance — Interface for adjusting color balance settings
    -gstcolorbalancechannelObject representing a channel from the GstColorBalance +gstcolorbalancechannel — Object representing a channel from the GstColorBalance interface.
    @@ -78,7 +90,6 @@

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/index.html gst-plugins-base1.0-1.6.1/docs/libs/html/index.html --- gst-plugins-base1.0-1.4.3/docs/libs/html/index.html 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/index.html 2015-10-30 14:21:43.000000000 +0000 @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@

    - for GStreamer Base Library 1.0 (1.4.3) + for GStreamer Base Library 1.0 (1.6.1) http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/.

    @@ -30,9 +30,14 @@
    Allocators Library
    -
    +
    +
    dmabuf — Memory wrapper for Linux dmabuf memory -
    + +
    +fdmemory — Memory wrapper for fd backed memory +
    +
    App Library
    @@ -135,7 +140,7 @@ gstrtppayloads — Helper methods for dealing with RTP payloads
    -gstrtphdrext +gstrtphdrext — Helper methods for dealing with RTP header extensions
    RTSP Library
    @@ -252,13 +257,25 @@ gstvideofilter — Base class for video filters
    +GstVideoDither — Utility object for dithering and quantizing lines of video +
    +
    +GstVideoChroma — Functions and utility object for operating on chroma video planes +
    +
    +GstVideoResampler — Utility structure for resampler information +
    +
    +GstVideoScaler — Utility object for rescaling video frames +
    +
    gstvideosink — Base class for video sinks
    gstcolorbalance — Interface for adjusting color balance settings
    -gstcolorbalancechannelObject representing a channel from the GstColorBalance +gstcolorbalancechannel — Object representing a channel from the GstColorBalance interface.
    @@ -295,7 +312,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/index.sgml gst-plugins-base1.0-1.6.1/docs/libs/html/index.sgml --- gst-plugins-base1.0-1.4.3/docs/libs/html/index.sgml 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/index.sgml 2015-10-30 14:21:43.000000000 +0000 @@ -5,11 +5,29 @@ + + + + + + + + + + + + + + + + + + @@ -31,9 +49,13 @@ + + + + @@ -117,12 +139,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -158,6 +236,8 @@ + + @@ -218,6 +298,7 @@ + @@ -325,6 +406,7 @@ + @@ -338,10 +420,23 @@ + + + + + + + + + + + + + @@ -372,6 +467,10 @@ + + + + @@ -396,6 +495,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -442,7 +572,23 @@ + + + + + + + + + + + + + + + + @@ -470,6 +616,9 @@ + + + @@ -482,6 +631,11 @@ + + + + + @@ -660,6 +814,7 @@ + @@ -676,6 +831,7 @@ + @@ -700,6 +856,8 @@ + + @@ -759,9 +917,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -776,6 +965,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -788,6 +1003,7 @@ + @@ -826,6 +1042,10 @@ + + + + @@ -834,6 +1054,7 @@ + @@ -860,14 +1081,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -901,6 +1301,10 @@ + + + + @@ -909,6 +1313,12 @@ + + + + + + @@ -924,10 +1334,20 @@ + + + + + + + + + + @@ -943,9 +1363,23 @@ + + + + + + + + + + + + + + @@ -980,6 +1414,7 @@ + @@ -1045,6 +1480,7 @@ + @@ -1088,6 +1524,8 @@ + + @@ -1113,6 +1551,9 @@ + + + @@ -1129,7 +1570,17 @@ + + + + + + + + + + @@ -1146,22 +1597,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1173,6 +1674,7 @@ + @@ -1207,7 +1709,28 @@ + + + + + + + + + + + + + + + + + + + + + @@ -1280,6 +1803,9 @@ + + + @@ -1319,6 +1845,20 @@ + + + + + + + + + + + + + + @@ -1410,8 +1950,22 @@ + + + + + + + + + + + + + + @@ -1440,6 +1994,8 @@ + + @@ -1480,6 +2036,18 @@ + + + + + + + + + + + + @@ -1519,12 +2087,14 @@ + + @@ -1571,6 +2141,7 @@ + @@ -1582,8 +2153,6 @@ - - @@ -1622,10 +2191,14 @@ + + + + + - @@ -1659,7 +2232,14 @@ + + + + + + + @@ -1702,6 +2282,22 @@ + + + + + + + + + + + + + + + + @@ -1709,28 +2305,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1802,6 +2559,9 @@ + + + @@ -1813,6 +2573,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1850,6 +2703,8 @@ + + @@ -1943,6 +2798,7 @@ + @@ -2028,6 +2884,10 @@ + + + + @@ -2048,9 +2908,11 @@ + - + + @@ -2064,9 +2926,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2080,7 +2972,11 @@ + + + + diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/html/style.css gst-plugins-base1.0-1.6.1/docs/libs/html/style.css --- gst-plugins-base1.0-1.4.3/docs/libs/html/style.css 2014-09-24 08:19:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/html/style.css 2015-10-30 14:21:43.000000000 +0000 @@ -60,7 +60,7 @@ div.informaltable table { border-collapse: separate; - border-spacing: 1em 0.5em; + border-spacing: 1em 0.3em; border: none; } @@ -148,6 +148,8 @@ h4 { color: #555753; + margin-top: 1em; + margin-bottom: 1em; } hr @@ -166,17 +168,16 @@ padding-bottom: 0.25em; } -dl.toc > dd > dl > dt +dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; + font-weight: bold; } -dl.toc > dt +dl.toc > dl { - padding-top: 1em; padding-bottom: 0.5em; - font-weight: bold; } .parameter @@ -346,7 +347,9 @@ } @media screen { - sup a.footnote + /* these have a as a first child, but since there are no parent selectors + * we can't use that. */ + a.footnote { position: relative; top: 0em ! important; diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/Makefile.am gst-plugins-base1.0-1.6.1/docs/libs/Makefile.am --- gst-plugins-base1.0-1.4.3/docs/libs/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -70,9 +70,6 @@ $(top_builddir)/gst-libs/gst/riff/libgstriff-@GST_API_VERSION@.la \ $(GST_BASE_LIBS) -GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC) - # If you need to override some of the declarations, place them in this file DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt diff -Nru gst-plugins-base1.0-1.4.3/docs/libs/Makefile.in gst-plugins-base1.0-1.6.1/docs/libs/Makefile.in --- gst-plugins-base1.0-1.4.3/docs/libs/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/libs/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -33,7 +33,17 @@ ########################################################################### # thomas: except of course that we did VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -97,9 +107,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/upload-doc.mak \ - $(top_srcdir)/common/gtk-doc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am subdir = docs/libs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -121,7 +128,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -138,6 +144,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -162,6 +169,9 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gtk-doc.mak \ + $(top_srcdir)/common/upload-doc.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -222,6 +232,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -251,6 +263,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -278,7 +292,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -293,6 +306,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -382,13 +396,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -441,6 +454,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -528,13 +542,16 @@ $(top_builddir)/gst-libs/gst/riff/libgstriff-@GST_API_VERSION@.la \ $(GST_BASE_LIBS) -GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) # If you need to override some of the declarations, place them in this file DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute -# thomas: copied from glib-2 # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then @@ -590,7 +607,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/libs/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -599,7 +615,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc.mak: +$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -771,6 +787,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local +.PRECIOUS: Makefile + html: html-build.stamp upload: $(FORMATS) @@ -853,15 +871,22 @@ @ENABLE_GTK_DOC_TRUE@ --ignore-headers="$(IGNORE_HFILES)" @ENABLE_GTK_DOC_TRUE@ @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then \ @ENABLE_GTK_DOC_TRUE@ echo " DOC Introspecting gobjects"; \ +@ENABLE_GTK_DOC_TRUE@ scanobj_options=""; \ +@ENABLE_GTK_DOC_TRUE@ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ +@ENABLE_GTK_DOC_TRUE@ if test "$$?" = "0"; then \ +@ENABLE_GTK_DOC_TRUE@ if test "x$(V)" = "x1"; then \ +@ENABLE_GTK_DOC_TRUE@ scanobj_options="--verbose"; \ +@ENABLE_GTK_DOC_TRUE@ fi; \ +@ENABLE_GTK_DOC_TRUE@ fi; \ @ENABLE_GTK_DOC_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0=`cd $(top_builddir) && pwd` \ @ENABLE_GTK_DOC_TRUE@ GST_PLUGIN_PATH_1_0= \ @ENABLE_GTK_DOC_TRUE@ GST_REGISTRY_1_0=doc-registry.xml \ @ENABLE_GTK_DOC_TRUE@ $(GTKDOC_EXTRA_ENVIRONMENT) \ -@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ +@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ @ENABLE_GTK_DOC_TRUE@ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)" \ -@ENABLE_GTK_DOC_TRUE@ --module=$(DOC_MODULE) ; \ +@ENABLE_GTK_DOC_TRUE@ $$scanobj_options --module=$(DOC_MODULE) ; \ @ENABLE_GTK_DOC_TRUE@ else \ @ENABLE_GTK_DOC_TRUE@ for i in $(SCANOBJ_FILES) ; do \ @ENABLE_GTK_DOC_TRUE@ test -f $$i || touch $$i ; \ diff -Nru gst-plugins-base1.0-1.4.3/docs/Makefile.in gst-plugins-base1.0-1.6.1/docs/Makefile.in --- gst-plugins-base1.0-1.4.3/docs/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,8 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = docs -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/version.entities.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -101,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -118,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.entities @@ -176,6 +184,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/version.entities.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -261,6 +270,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -290,6 +301,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -317,7 +330,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -332,6 +344,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -421,13 +434,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -480,6 +492,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -515,7 +528,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -812,6 +824,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + upload: @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.args gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.args --- gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.args 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.args 2015-10-22 08:01:34.000000000 +0000 @@ -45,7 +45,7 @@ rw method method. -Bilinear +Bilinear (2-tap) @@ -69,6 +69,16 @@ +GstVideoScale::gamma-decode +gboolean + +rwx +Gamma Decode +Decode gamma before scaling. +FALSE + + + GstURIDecodeBin::buffer-duration gint64 >= G_MAXULONG @@ -679,6 +689,26 @@ +GstPlayBin::video-multiview-flags +GstVideoMultiviewFlags + +rw +Multiview Flags Override +Override details of the multiview frame layout. + + + + +GstPlayBin::video-multiview-mode +GstVideoMultiviewFramePacking + +rw +Multiview Mode Override +Re-interpret a video stream as one of several frame-packed stereoscopic modes. +GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE + + + GstDecodeBin::caps GstCaps* @@ -850,12 +880,92 @@ GstVideoConvert::dither -GstVideoConvertDitherMethod +GstVideoDitherMethod rw Dither Apply dithering while converting. -No dithering (default) +GST_VIDEO_DITHER_BAYER + + + +GstVideoConvert::alpha-mode +GstVideoAlphaMode + +rw +Alpha Mode +Alpha Mode to use. +GST_VIDEO_ALPHA_MODE_COPY + + + +GstVideoConvert::alpha-value +gdouble +[0,1] +rw +Alpha Value +Alpha Value to use. +1 + + + +GstVideoConvert::chroma-mode +GstVideoChromaMode + +rw +Chroma Mode +Chroma Resampling Mode. +GST_VIDEO_CHROMA_MODE_FULL + + + +GstVideoConvert::chroma-resampler +GstVideoResamplerMethod + +rw +Chroma resampler +Chroma resampler method. +GST_VIDEO_RESAMPLER_METHOD_LINEAR + + + +GstVideoConvert::dither-quantization +guint + +rw +Dither Quantize +Quantizer to use. +1 + + + +GstVideoConvert::gamma-mode +GstVideoGammaMode + +rw +Gamma Mode +Gamma Conversion Mode. +GST_VIDEO_GAMMA_MODE_NONE + + + +GstVideoConvert::matrix-mode +GstVideoMatrixMode + +rw +Matrix Mode +Matrix Conversion Mode. +GST_VIDEO_MATRIX_MODE_FULL + + + +GstVideoConvert::primaries-mode +GstVideoPrimariesMode + +rw +Primaries Mode +Primaries Conversion Mode. +GST_VIDEO_PRIMARIES_MODE_NONE @@ -1411,7 +1521,7 @@ GstVideoTestSrc::timestamp-offset gint64 - +>= 0 rw Timestamp offset An offset added to timestamps set on buffers (in ns). @@ -2408,3 +2518,33 @@ FALSE + +GstSocketSrc::socket +GSocket* + +rw +Socket +The socket to receive packets from. + + + + +GstSocketSrc::caps +GstCaps* + +rw +Caps +The caps of the source pad. + + + + +GstTimeOverlay::time-mode +GstTimeOverlayTimeLine + +rw +Time Mode +What time to show. +buffer-time + + diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins-docs.sgml gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins-docs.sgml --- gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins-docs.sgml 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins-docs.sgml 2015-10-22 08:01:34.000000000 +0000 @@ -18,10 +18,10 @@ gst-plugins-base Elements - - + + @@ -30,23 +30,30 @@ - + + + + + + + + - - + + @@ -54,6 +61,7 @@ + @@ -77,8 +85,8 @@ - + @@ -87,6 +95,7 @@ + diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.hierarchy gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.hierarchy --- gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.hierarchy 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.hierarchy 2015-10-30 14:21:38.000000000 +0000 @@ -15,7 +15,6 @@ GstElement GstAdder GstAudioDecoder - GstIVorbisDec GstVorbisDec GstAudioEncoder GstVorbisEnc @@ -58,6 +57,7 @@ GstAlsaSrc GstAudioCdSrc GstCdParanoiaSrc + GstSocketSrc GstTCPClientSrc GstTCPServerSrc GstVideoTestSrc @@ -117,8 +117,6 @@ GInputStream GOutputStream GSocket - GTypeModule - PangoModule GstColorBalanceChannel GstEncodingProfile PangoContext diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins-sections.txt gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins-sections.txt --- gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins-sections.txt 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins-sections.txt 2015-10-30 14:21:43.000000000 +0000 @@ -3,12 +3,13 @@ adder GstAdder +GstAdderClass GST_ADDER GST_IS_ADDER -GST_TYPE_ADDER GST_ADDER_CLASS GST_IS_ADDER_CLASS -GST_ADDER_GET_CLASS +GST_TYPE_ADDER + gst_adder_get_type GstAdderClass GstAdderFormat @@ -17,36 +18,41 @@
    -element-appsrc -appsrc -GstAppSrc +element-alsasink +alsasink +GstAlsaSink -gst_app_src_set_caps -gst_app_src_get_caps -gst_app_src_set_size -gst_app_src_get_size -gst_app_src_set_stream_type -gst_app_src_get_stream_type -gst_app_src_set_max_bytes -gst_app_src_get_max_bytes -gst_app_src_set_latency -gst_app_src_get_latency -gst_app_src_set_emit_signals -gst_app_src_get_emit_signals -gst_app_src_push_buffer -gst_app_src_end_of_stream -GstAppSrcCallbacks -gst_app_src_set_callbacks +GstAlsaSinkClass +GST_ALSA_SINK +GST_ALSA_SINK_CAST +GST_IS_ALSA_SINK +GST_ALSA_SINK_CLASS +GST_IS_ALSA_SINK_CLASS +GST_TYPE_ALSA_SINK +GST_ALSA_SINK_GET_LOCK +GST_ALSA_SINK_LOCK +GST_ALSA_SINK_UNLOCK + +gst_alsa_sink_get_type +
    -GstAppSrcClass -GstAppSrcPrivate -GstAppStreamType -GST_APP_SRC -GST_IS_APP_SRC -GST_TYPE_APP_SRC -gst_app_src_get_type -GST_APP_SRC_CLASS -GST_IS_APP_SRC_CLASS +
    +element-alsasrc +alsasrc +GstAlsaSrc + +GstAlsaSrcClass +GST_ALSA_SRC +GST_ALSA_SRC_CAST +GST_IS_ALSA_SRC +GST_ALSA_SRC_CLASS +GST_IS_ALSA_SRC_CLASS +GST_TYPE_ALSA_SRC +GST_ALSA_SRC_GET_LOCK +GST_ALSA_SRC_LOCK +GST_ALSA_SRC_UNLOCK + +gst_alsa_src_get_type
    @@ -71,60 +77,44 @@ GstAppSinkCallbacks GST_APP_SINK GST_IS_APP_SINK -GST_TYPE_APP_SINK -gst_app_sink_get_type GST_APP_SINK_CLASS GST_IS_APP_SINK_CLASS +GST_TYPE_APP_SINK + +gst_app_sink_get_type
    -element-alsamixer -alsamixer -GstAlsaMixerElement - -GstAlsaMixerElementClass -GST_ALSA_MIXER_ELEMENT -GST_IS_ALSA_MIXER_ELEMENT -GST_TYPE_ALSA_MIXER_ELEMENT -gst_alsa_mixer_element_get_type -GST_ALSA_MIXER_ELEMENT_CLASS -GST_IS_ALSA_MIXER_ELEMENT_CLASS -
    - -
    -element-alsasink -alsasink -GstAlsaSink - -GstAlsaSinkClass -GST_ALSA_SINK -GST_ALSA_SINK_CAST -GST_IS_ALSA_SINK -GST_TYPE_ALSA_SINK -GST_ALSA_SINK_CLASS -GST_IS_ALSA_SINK_CLASS -GST_ALSA_SINK_GET_LOCK -GST_ALSA_SINK_LOCK -GST_ALSA_SINK_UNLOCK -gst_alsasink_get_type -
    - -
    -element-alsasrc -alsasrc -GstAlsaSrc +element-appsrc +appsrc +GstAppSrc -GstAlsaSrcClass -GST_ALSA_SRC -GST_IS_ALSA_SRC -GST_TYPE_ALSA_SRC -GST_ALSA_SRC_CLASS -GST_IS_ALSA_SRC_CLASS -GST_ALSA_SRC_CAST -GST_ALSA_SRC_GET_LOCK -GST_ALSA_SRC_LOCK -GST_ALSA_SRC_UNLOCK -gst_alsasrc_get_type +gst_app_src_set_caps +gst_app_src_get_caps +gst_app_src_set_size +gst_app_src_get_size +gst_app_src_set_stream_type +gst_app_src_get_stream_type +gst_app_src_set_max_bytes +gst_app_src_get_max_bytes +gst_app_src_set_latency +gst_app_src_get_latency +gst_app_src_set_emit_signals +gst_app_src_get_emit_signals +gst_app_src_push_buffer +gst_app_src_end_of_stream +GstAppSrcCallbacks +gst_app_src_set_callbacks +GstAppSrcClass +GstAppSrcPrivate +GstAppStreamType +GST_APP_SRC +GST_IS_APP_SRC +GST_APP_SRC_CLASS +GST_IS_APP_SRC_CLASS +GST_TYPE_APP_SRC + +gst_app_src_get_type
    @@ -134,12 +124,12 @@ GstAudioConvertDithering GstAudioConvertNoiseShaping +GstAudioConvertClass GST_AUDIO_CONVERT -GST_AUDIO_CONVERT_CLASS GST_IS_AUDIO_CONVERT +GST_AUDIO_CONVERT_CLASS GST_IS_AUDIO_CONVERT_CLASS GST_TYPE_AUDIO_CONVERT -GstAudioConvertClass AudioConvertCtx AudioConvertFmt AudioConvertMix @@ -151,6 +141,8 @@ audio_convert_convert audio_convert_get_sizes audio_convert_prepare_context + +gst_audio_convert_get_type
    @@ -158,13 +150,14 @@ audiorate GstAudioRate +GstAudioRateClass GST_AUDIO_RATE GST_IS_AUDIO_RATE -GST_TYPE_AUDIO_RATE -gst_audio_rate_get_type GST_AUDIO_RATE_CLASS GST_IS_AUDIO_RATE_CLASS -GstAudioRateClass +GST_TYPE_AUDIO_RATE + +gst_audio_rate_get_type
    @@ -172,13 +165,14 @@ audioresample GstAudioResample +GstAudioResampleClass GST_AUDIO_RESAMPLE GST_IS_AUDIO_RESAMPLE -GST_TYPE_AUDIO_RESAMPLE -gst_audio_resample_get_type GST_AUDIO_RESAMPLE_CLASS GST_IS_AUDIO_RESAMPLE_CLASS -GstAudioResampleClass +GST_TYPE_AUDIO_RESAMPLE + +gst_audio_resample_get_type
    @@ -187,19 +181,14 @@ GstAudioTestSrc GstAudioTestSrcWave +GstAudioTestSrcClass GST_AUDIO_TEST_SRC -GST_AUDIO_TEST_SRC_CLASS GST_IS_AUDIO_TEST_SRC +GST_AUDIO_TEST_SRC_CLASS GST_IS_AUDIO_TEST_SRC_CLASS GST_TYPE_AUDIO_TEST_SRC -GstAudioTestSrcClass -GstAudioTestSrcFormat + gst_audio_test_src_get_type -GstPinkNoise -PINK_MAX_RANDOM_ROWS -PINK_RANDOM_BITS -PINK_RANDOM_SHIFT -ProcessFunc
    @@ -209,14 +198,12 @@ GstCdParanoiaSrcClass GST_CD_PARANOIA_SRC -GST_CD_PARANOIA_SRC_CLASS -GST_CD_PARANOIA_SRC_GET_CLASS GST_IS_CD_PARANOIA_SRC +GST_CD_PARANOIA_SRC_CLASS GST_IS_CD_PARANOIA_SRC_CLASS GST_TYPE_CD_PARANOIA_SRC + gst_cd_paranoia_src_get_type -size16 -size32
    @@ -224,12 +211,13 @@ clockoverlay GstClockOverlay +GstClockOverlayClass GST_CLOCK_OVERLAY -GST_CLOCK_OVERLAY_CLASS GST_IS_CLOCK_OVERLAY +GST_CLOCK_OVERLAY_CLASS GST_IS_CLOCK_OVERLAY_CLASS GST_TYPE_CLOCK_OVERLAY -GstClockOverlayClass + gst_clock_overlay_get_type
    @@ -238,42 +226,33 @@ decodebin GstDecodeBin - - -
    -element-decodebin -decodebin -GstDecodeBin - +GstDecodeBinClass +GST_DECODE_BIN +GST_DECODE_BIN_CAST +GST_IS_DECODE_BIN +GST_DECODE_BIN_CLASS +GST_IS_DECODE_BIN_CLASS +GST_TYPE_DECODE_BIN + +gst_decode_bin_get_type
    element-encodebin encodebin GstEncodeBin +GstEncodeBinFlags +GstEncodeBinClass GST_ENCODE_BIN -GST_ENCODE_BIN_CLASS GST_IS_ENCODE_BIN +GST_ENCODE_BIN_CLASS GST_IS_ENCODE_BIN_CLASS GST_TYPE_ENCODE_BIN -GstEncodeBinClass + gst_encode_bin_get_type
    - - -
    -element-videoconvert -videoconvert -GstVideoConvert - -GST_VIDEO_CONVERT -GST_VIDEO_CONVERT_CLASS -GST_IS_VIDEO_CONVERT_CLASS -GstVideoConvertClass -
    -
    element-giosink giosink @@ -281,10 +260,11 @@ GstGioSinkClass GST_GIO_SINK -GST_GIO_SINK_CLASS GST_IS_GIO_SINK +GST_GIO_SINK_CLASS GST_IS_GIO_SINK_CLASS GST_TYPE_GIO_SINK + gst_gio_sink_get_type
    @@ -295,10 +275,11 @@ GstGioSrcClass GST_GIO_SRC -GST_GIO_SRC_CLASS GST_IS_GIO_SRC +GST_GIO_SRC_CLASS GST_IS_GIO_SRC_CLASS GST_TYPE_GIO_SRC + gst_gio_src_get_type @@ -309,10 +290,11 @@ GstGioStreamSinkClass GST_GIO_STREAM_SINK -GST_GIO_STREAM_SINK_CLASS GST_IS_GIO_STREAM_SINK +GST_GIO_STREAM_SINK_CLASS GST_IS_GIO_STREAM_SINK_CLASS GST_TYPE_GIO_STREAM_SINK + gst_gio_stream_sink_get_type @@ -323,10 +305,11 @@ GstGioStreamSrcClass GST_GIO_STREAM_SRC -GST_GIO_STREAM_SRC_CLASS GST_IS_GIO_STREAM_SRC +GST_GIO_STREAM_SRC_CLASS GST_IS_GIO_STREAM_SRC_CLASS GST_TYPE_GIO_STREAM_SRC + gst_gio_stream_src_get_type @@ -340,28 +323,15 @@ GstTCPProtocol GstTCPUnitType -CLIENTS_LOCK -CLIENTS_LOCK_FREE -CLIENTS_LOCK_INIT -CLIENTS_UNLOCK -GST_TYPE_MULTI_FD_SINK -GST_IS_MULTI_FD_SINK -GST_IS_MULTI_FD_SINK_CLASS +GstMultiFdSinkClass GST_MULTI_FD_SINK +GST_IS_MULTI_FD_SINK GST_MULTI_FD_SINK_CLASS -GST_MULTI_FD_SINK_GET_CLASS +GST_IS_MULTI_FD_SINK_CLASS +GST_TYPE_MULTI_FD_SINK GstTCPClient -GstMultiFdSinkFlags -GstMultiFdSinkClass -gst_multi_fd_sink_add -gst_multi_fd_sink_add_full -gst_multi_fd_sink_clear -gst_multi_fd_sink_get_stats + gst_multi_fd_sink_get_type -gst_multi_fd_sink_remove -gst_multi_fd_sink_remove_flush -GST_TYPE_TCP_PROTOCOL -gst_tcp_protocol_get_type
    @@ -374,42 +344,44 @@ GstTCPProtocol GstTCPUnitType -CLIENTS_LOCK -CLIENTS_LOCK_FREE -CLIENTS_LOCK_INIT -CLIENTS_UNLOCK -GST_TYPE_MULTI_SOCKET_SINK -GST_IS_MULTI_SOCKET_SINK -GST_IS_MULTI_SOCKET_SINK_CLASS +GstMultiSocketSinkClass GST_MULTI_SOCKET_SINK +GST_IS_MULTI_SOCKET_SINK GST_MULTI_SOCKET_SINK_CLASS -GST_MULTI_SOCKET_SINK_GET_CLASS +GST_IS_MULTI_SOCKET_SINK_CLASS +GST_TYPE_MULTI_SOCKET_SINK GstTCPClient -GstMultiSocketSinkFlags -GstMultiSocketSinkClass -gst_multi_socket_sink_add -gst_multi_socket_sink_add_full -gst_multi_socket_sink_clear -gst_multi_socket_sink_get_stats + gst_multi_socket_sink_get_type -gst_multi_socket_sink_remove -gst_multi_socket_sink_remove_flush -GST_TYPE_TCP_PROTOCOL -gst_tcp_protocol_get_type
    +
    +element-oggaviparse +oggaviparse +GstOggAviParse + +GstOggAviParseClass +GST_OGG_AVI_PARSE +GST_OGG_AVI_PARSE_CAST +GST_IS_OGG_AVI_PARSE +GST_OGG_AVI_PARSE_CLASS +GST_IS_OGG_AVI_PARSE_CLASS +GST_TYPE_OGG_AVI_PARSE + +gst_ogg_avi_parse_get_type +
    element-oggdemux oggdemux GstOggDemux +GstOggDemuxClass GST_OGG_DEMUX -GST_OGG_DEMUX_CLASS GST_IS_OGG_DEMUX +GST_OGG_DEMUX_CLASS GST_IS_OGG_DEMUX_CLASS GST_TYPE_OGG_DEMUX -GstOggDemuxClass GST_IS_OGG_PAD GST_IS_OGG_PAD_CLASS GST_OGG_PAD @@ -420,6 +392,8 @@ GstOggPadClass GstOggPadMode GstOggPadState + +gst_ogg_demux_get_type
    @@ -427,13 +401,78 @@ oggmux GstOggMux -gst_ogg_mux_get_type +GstOggMuxClass GST_OGG_MUX -GST_OGG_MUX_CLASS GST_IS_OGG_MUX +GST_OGG_MUX_CLASS GST_IS_OGG_MUX_CLASS GST_TYPE_OGG_MUX -GstOggMuxClass + +gst_ogg_mux_get_type +
    + +
    +element-oggparse +oggparse +GstOggParse + +GstOggParseClass +GST_OGG_PARSE +GST_OGG_PARSE_CAST +GST_IS_OGG_PARSE +GST_OGG_PARSE_CLASS +GST_IS_OGG_PARSE_CLASS +GST_TYPE_OGG_PARSE + +gst_ogg_parse_get_type +
    + +
    +element-ogmaudioparse +ogmaudioparse +GstOgmAudioParse + +GstOgmAudioParseClass +GST_OGM_AUDIO_PARSE +GST_OGM_AUDIO_PARSE_CAST +GST_IS_OGM_AUDIO_PARSE +GST_OGM_AUDIO_PARSE_CLASS +GST_IS_OGM_AUDIO_PARSE_CLASS +GST_TYPE_OGM_AUDIO_PARSE + +gst_ogm_audio_parse_get_type +
    + +
    +element-ogmtextparse +ogmtextparse +GstOgmTextParse + +GstOgmTextParseClass +GST_OGM_TEXT_PARSE +GST_OGM_TEXT_PARSE_CAST +GST_IS_OGM_TEXT_PARSE +GST_OGM_TEXT_PARSE_CLASS +GST_IS_OGM_TEXT_PARSE_CLASS +GST_TYPE_OGM_TEXT_PARSE + +gst_ogm_text_parse_get_type +
    + +
    +element-ogmvideoparse +ogmvideoparse +GstOgmVideoParse + +GstOgmVideoParseClass +GST_OGM_VIDEO_PARSE +GST_OGM_VIDEO_PARSE_CAST +GST_IS_OGM_VIDEO_PARSE +GST_OGM_VIDEO_PARSE_CLASS +GST_IS_OGM_VIDEO_PARSE_CLASS +GST_TYPE_OGM_VIDEO_PARSE + +gst_ogm_video_parse_get_type
    @@ -442,22 +481,31 @@ GstPlayBin GstPlayFlags +GstPlayBinClass +GST_PLAY_BIN +GST_PLAY_BIN_CAST +GST_IS_PLAY_BIN +GST_PLAY_BIN_CLASS +GST_IS_PLAY_BIN_CLASS +GST_TYPE_PLAY_BIN gst_play_flags_get_type GST_TYPE_PLAY_FLAGS + +gst_play_bin_get_type
    element-playsink playsink GstPlaySink +GstPlaySinkSendEventMode -GST_TYPE_PLAY_SINK +GstPlaySinkClass GST_PLAY_SINK -GST_PLAY_SINK_CLASS GST_IS_PLAY_SINK +GST_PLAY_SINK_CLASS GST_IS_PLAY_SINK_CLASS GstPlaySinkType -gst_play_sink_get_type gst_play_sink_request_pad gst_play_sink_release_pad gst_play_sink_refresh_pad @@ -483,6 +531,40 @@ gst_play_sink_convert_sample gst_play_sink_reconfigure gst_play_sink_plugin_init +GST_TYPE_PLAY_SINK + +gst_play_sink_get_type +
    + +
    +element-socketsrc +socketsrc +GstSocketSrc + +GstSocketSrcClass +GST_SOCKET_SRC +GST_IS_SOCKET_SRC +GST_SOCKET_SRC_CLASS +GST_IS_SOCKET_SRC_CLASS +GST_TYPE_SOCKET_SRC + +gst_socket_src_get_type +
    + +
    +element-ssaparse +ssaparse +GstSsaParse + +GstSsaParseClass +GST_SSA_PARSE +GST_SSA_PARSE_CAST +GST_IS_SSA_PARSE +GST_SSA_PARSE_CLASS +GST_IS_SSA_PARSE_CLASS +GST_TYPE_SSA_PARSE + +gst_ssa_parse_get_type
    @@ -490,14 +572,30 @@ streamsynchronizer GstStreamSynchronizer -GST_TYPE_STREAM_SYNCHRONIZER +GstStreamSynchronizerClass GST_STREAM_SYNCHRONIZER -GST_STREAM_SYNCHRONIZER_CLASS GST_IS_STREAM_SYNCHRONIZER +GST_STREAM_SYNCHRONIZER_CLASS GST_IS_STREAM_SYNCHRONIZER_CLASS -GstStreamSynchronizerClass +GST_TYPE_STREAM_SYNCHRONIZER + gst_stream_synchronizer_get_type -gst_stream_synchronizer_plugin_init +
    + +
    +element-subparse +subparse +GstSubParse + +GstSubParseClass +GST_SUB_PARSE +GST_SUB_PARSE_CAST +GST_IS_SUB_PARSE +GST_SUB_PARSE_CLASS +GST_IS_SUB_PARSE_CLASS +GST_TYPE_SUB_PARSE + +gst_sub_parse_get_type
    @@ -506,62 +604,48 @@ GstSubtitleOverlay GstSubtitleOverlayClass - -GST_IS_SUBTITLE_OVERLAY -GST_IS_SUBTITLE_OVERLAY_CLASS GST_SUBTITLE_OVERLAY GST_SUBTITLE_OVERLAY_CAST +GST_IS_SUBTITLE_OVERLAY GST_SUBTITLE_OVERLAY_CLASS +GST_IS_SUBTITLE_OVERLAY_CLASS GST_SUBTITLE_OVERLAY_LOCK GST_SUBTITLE_OVERLAY_UNLOCK GST_TYPE_SUBTITLE_OVERLAY + gst_subtitle_overlay_plugin_init gst_subtitle_overlay_get_type
    -element-tcpclientsrc -tcpclientsrc -GstTCPClientSrc - -GstTCPClientSrcClass -GST_TCP_CLIENT_SRC -GST_TCP_CLIENT_SINK_CLASS -GstTCPClientSrcFlags -GST_TYPE_TCP_CLIENT_SRC -gst_tcp_client_src_get_type -GST_IS_TCP_CLIENT_SRC_CLASS -GST_IS_TCP_CLIENT_SRC -
    - -
    element-tcpclientsink tcpclientsink GstTCPClientSink GstTCPClientSinkClass -GST_TCP_CLIENT_SINK -GST_TCP_CLIENT_SRC_CLASS GstTCPClientSinkFlags +GST_TCP_CLIENT_SINK +GST_IS_TCP_CLIENT_SINK +GST_TCP_CLIENT_SINK_CLASS +GST_IS_TCP_CLIENT_SINK_CLASS GST_TYPE_TCP_CLIENT_SINK + gst_tcp_client_sink_get_type -GST_IS_TCP_CLIENT_SINK_CLASS -GST_IS_TCP_CLIENT_SINK
    -element-tcpserversrc -tcpserversrc -GstTCPServerSrc +element-tcpclientsrc +tcpclientsrc +GstTCPClientSrc -GstTCPServerSrcClass -GST_TCP_SERVER_SRC -GST_TCP_SERVER_SRC_CLASS -GstTCPServerSrcFlags -GST_TYPE_TCP_SERVER_SRC -gst_tcp_server_src_get_type -GST_IS_TCP_SERVER_SRC_CLASS -GST_IS_TCP_SERVER_SRC +GstTCPClientSrcClass +GstTCPClientSrcFlags +GST_TCP_CLIENT_SRC +GST_IS_TCP_CLIENT_SRC +GST_TCP_CLIENT_SRC_CLASS +GST_IS_TCP_CLIENT_SRC_CLASS +GST_TYPE_TCP_CLIENT_SRC +gst_tcp_client_src_get_type
    @@ -570,20 +654,30 @@ GstTCPServerSink GstTCPServerSinkClass +GstTCPServerSinkFlags GST_TCP_SERVER_SINK +GST_IS_TCP_SERVER_SINK GST_TCP_SERVER_SINK_CLASS -GstTCPServerSinkFlags +GST_IS_TCP_SERVER_SINK_CLASS GST_TYPE_TCP_SERVER_SINK + gst_tcp_server_sink_get_type -GST_IS_TCP_SERVER_SINK_CLASS -GST_IS_TCP_SERVER_SINK -TCP_DEFAULT_HOST -TCP_DEFAULT_PORT -TCP_HIGHEST_PORT -gst_tcp_host_to_ip -gst_tcp_read_buffer -gst_tcp_socket_close -gst_tcp_socket_write +
    + +
    +element-tcpserversrc +tcpserversrc +GstTCPServerSrc + +GstTCPServerSrcClass +GstTCPServerSrcFlags +GST_TCP_SERVER_SRC +GST_IS_TCP_SERVER_SRC +GST_TCP_SERVER_SRC_CLASS +GST_IS_TCP_SERVER_SRC_CLASS +GST_TYPE_TCP_SERVER_SRC + +gst_tcp_server_src_get_type
    @@ -594,15 +688,16 @@ GstTextOverlayHAlign GstTextOverlayWrapMode +GstTextOverlayClass +GstTextOverlayLineAlign GST_TEXT_OVERLAY -GST_TEXT_OVERLAY_CLASS -GST_TEXT_OVERLAY_GET_CLASS GST_IS_TEXT_OVERLAY +GST_TEXT_OVERLAY_CLASS GST_IS_TEXT_OVERLAY_CLASS +GST_TEXT_OVERLAY_GET_CLASS GST_TYPE_TEXT_OVERLAY -GstTextOverlayClass + gst_text_overlay_get_type -GstTextOverlayLineAlign
    @@ -610,13 +705,14 @@ textrender GstTextRender +GstTextRenderClass GST_TEXT_RENDER -GST_TEXT_RENDER_CLASS -GST_TEXT_RENDER_GET_CLASS GST_IS_TEXT_RENDER +GST_TEXT_RENDER_CLASS GST_IS_TEXT_RENDER_CLASS +GST_TEXT_RENDER_GET_CLASS GST_TYPE_TEXT_RENDER -GstTextRenderClass + gst_text_render_get_type
    @@ -625,26 +721,30 @@ theoradec GstTheoraDec +GstTheoraDecClass GST_THEORA_DEC GST_IS_THEORA_DEC -GST_TYPE_THEORA_DEC GST_THEORA_DEC_CLASS GST_IS_THEORA_DEC_CLASS -GstTheoraDecClass +GST_TYPE_THEORA_DEC + +gst_theora_dec_get_type
    element-theoraenc theoraenc GstTheoraEnc -GstTheoraEncBorderMode +GstTheoraEncMultipassMode +GstTheoraEncClass GST_THEORA_ENC -GST_THEORA_ENC_CLASS GST_IS_THEORA_ENC +GST_THEORA_ENC_CLASS GST_IS_THEORA_ENC_CLASS GST_TYPE_THEORA_ENC -GstTheoraEncClass + +gst_theora_enc_get_type
    @@ -655,23 +755,26 @@ GstTheoraParseClass GST_THEORA_PARSE GST_IS_THEORA_PARSE -GST_TYPE_THEORA_PARSE -gst_theora_parse_get_type GST_THEORA_PARSE_CLASS GST_IS_THEORA_PARSE_CLASS +GST_TYPE_THEORA_PARSE + +gst_theora_parse_get_type
    element-timeoverlay timeoverlay GstTimeOverlay +GstTimeOverlayTimeLine +GstTimeOverlayClass GST_TIME_OVERLAY -GST_TIME_OVERLAY_CLASS GST_IS_TIME_OVERLAY +GST_TIME_OVERLAY_CLASS GST_IS_TIME_OVERLAY_CLASS GST_TYPE_TIME_OVERLAY -GstTimeOverlayClass + gst_time_overlay_get_type
    @@ -681,11 +784,35 @@ GstURIDecodeBin GstAutoplugSelectResult +GstURIDecodeBinClass +GST_URI_DECODE_BIN +GST_URI_DECODE_BIN_CAST +GST_IS_URI_DECODE_BIN +GST_URI_DECODE_BIN_CLASS +GST_IS_URI_DECODE_BIN_CLASS +GST_TYPE_URI_DECODE_BIN GST_TYPE_AUTOPLUG_SELECT_RESULT + +gst_uri_decode_bin_get_type gst_autoplug_select_result_get_type
    +element-videoconvert +videoconvert +GstVideoConvert + +GstVideoConvertClass +GST_VIDEO_CONVERT +GST_IS_VIDEO_CONVERT +GST_VIDEO_CONVERT_CLASS +GST_IS_VIDEO_CONVERT_CLASS +GST_TYPE_VIDEO_CONVERT + +gst_video_convert_get_type +
    + +
    element-videorate videorate GstVideoRate @@ -693,9 +820,11 @@ GstVideoRateClass GST_VIDEO_RATE GST_IS_VIDEO_RATE -GST_TYPE_VIDEO_RATE GST_VIDEO_RATE_CLASS GST_IS_VIDEO_RATE_CLASS +GST_TYPE_VIDEO_RATE + +gst_video_rate_get_type
    @@ -705,13 +834,13 @@ GstVideoScaleMethod GstVideoScaleClass -GST_CAT_DEFAULT GST_VIDEO_SCALE GST_IS_VIDEO_SCALE -GST_TYPE_VIDEO_SCALE -gst_video_scale_get_type GST_VIDEO_SCALE_CLASS GST_IS_VIDEO_SCALE_CLASS +GST_TYPE_VIDEO_SCALE + +gst_video_scale_get_type
    @@ -721,12 +850,13 @@ GstVideoTestSrcPattern GstVideoTestSrcColorSpec +GstVideoTestSrcClass GST_VIDEO_TEST_SRC -GST_VIDEO_TEST_SRC_CLASS GST_IS_VIDEO_TEST_SRC +GST_VIDEO_TEST_SRC_CLASS GST_IS_VIDEO_TEST_SRC_CLASS GST_TYPE_VIDEO_TEST_SRC -GstVideoTestSrcClass + gst_video_test_src_get_type
    @@ -735,12 +865,13 @@ volume GstVolume +GstVolumeClass GST_VOLUME -GST_VOLUME_CLASS GST_IS_VOLUME +GST_VOLUME_CLASS GST_IS_VOLUME_CLASS GST_TYPE_VOLUME -GstVolumeClass + gst_volume_get_type @@ -752,10 +883,11 @@ GstVorbisDecClass GST_VORBIS_DEC GST_IS_VORBIS_DEC -GST_TYPE_VORBIS_DEC -gst_vorbis_dec_get_type GST_VORBIS_DEC_CLASS GST_IS_VORBIS_DEC_CLASS +GST_TYPE_VORBIS_DEC + +gst_vorbis_dec_get_type
    @@ -764,11 +896,12 @@ GstVorbisEnc GstVorbisEncClass -GST_IS_VORBISENC -GST_VORBISENC_CLASS -GST_VORBISENC -GST_TYPE_VORBISENC -GST_IS_VORBISENC_CLASS +GST_VORBIS_ENC +GST_IS_VORBIS_ENC +GST_VORBIS_ENC_CLASS +GST_IS_VORBIS_ENC_CLASS +GST_TYPE_VORBIS_ENC + gst_vorbis_enc_get_type
    @@ -780,10 +913,11 @@ GstVorbisParseClass GST_VORBIS_PARSE GST_IS_VORBIS_PARSE -GST_TYPE_VORBIS_PARSE -gst_vorbis_parse_get_type GST_VORBIS_PARSE_CLASS GST_IS_VORBIS_PARSE_CLASS +GST_TYPE_VORBIS_PARSE + +gst_vorbis_parse_get_type
    @@ -794,10 +928,11 @@ GstVorbisTagClass GST_VORBIS_TAG GST_IS_VORBIS_TAG -GST_TYPE_VORBIS_TAG -gst_vorbis_tag_get_type GST_VORBIS_TAG_CLASS GST_IS_VORBIS_TAG_CLASS +GST_TYPE_VORBIS_TAG + +gst_vorbis_tag_get_type
    @@ -805,17 +940,18 @@ ximagesink GstXImageSink -GST_XIMAGESINK -GST_XIMAGESINK_CLASS -GST_IS_XIMAGESINK -GST_IS_XIMAGESINK_CLASS -GST_TYPE_XIMAGESINK -gst_ximagesink_get_type +GstXImageSinkClass +GST_X_IMAGE_SINK +GST_IS_X_IMAGE_SINK +GST_X_IMAGE_SINK_CLASS +GST_IS_X_IMAGE_SINK_CLASS +GST_TYPE_X_IMAGE_SINK GstXImageBuffer GstXImageBufferClass -GstXImageSinkClass GstXContext GstXWindow + +gst_x_image_sink_get_type
    @@ -823,14 +959,15 @@ xvimagesink GstXvImageSink -GST_XVIMAGESINK -GST_XVIMAGESINK_CLASS -GST_IS_XVIMAGESINK -GST_IS_XVIMAGESINK_CLASS -GST_TYPE_XVIMAGESINK -gst_xvimagesink_get_type +GstXvImageSinkClass +GST_XV_IMAGE_SINK +GST_IS_XV_IMAGE_SINK +GST_XV_IMAGE_SINK_CLASS +GST_IS_XV_IMAGE_SINK_CLASS +GST_TYPE_XV_IMAGE_SINK GstXvImageBuffer GstXvImageBufferClass GstXvImageFormat -GstXvImageSinkClass + +gst_xv_image_sink_get_type
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.signals gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.signals --- gst-plugins-base1.0-1.4.3/docs/plugins/gst-plugins-base-plugins.signals 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/gst-plugins-base-plugins.signals 2015-10-22 08:01:34.000000000 +0000 @@ -320,6 +320,14 @@ +GstAppSrc::push-sample +GstFlowReturn +la +GstAppSrc *gstappsrc +GstSample *arg1 + + + GstAppSink::eos void l @@ -510,3 +518,10 @@ gint arg1 + +GstSocketSrc::connection-closed-by-peer +void +f +GstSocketSrc *gstsocketsrc + + diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/ch01.html gst-plugins-base1.0-1.6.1/docs/plugins/html/ch01.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/ch01.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/ch01.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: gst-plugins-base Elements +gst-plugins-base Elements: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -24,150 +24,173 @@ gst-plugins-base Elements
    -adder — Add N audio channels together +adder
    -appsrc — Allow the application to feed buffers to a pipeline +alsasink
    -appsink — Allow the application to get access to raw buffer +alsasrc
    -alsasink — Output to a sound card via ALSA +appsink
    -alsasrc — Read from a sound card via ALSA +appsrc
    -audioconvert — Convert audio to different formats +audioconvert
    -audiorate — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream +audiorate
    -audioresample — Resamples audio +audioresample
    -audiotestsrc — Creates audio test signals of given frequency and volume +audiotestsrc
    -cdparanoiasrc — Read audio from CD in paranoid mode +cdparanoiasrc
    -clockoverlay — Overlays the current clock time on a video stream +clockoverlay
    -decodebin — Autoplug and decode to raw media +decodebin
    -encodebin — Convenience encoding/muxing element +encodebin
    -videoconvert — Converts video from one colorspace to another +giosink
    -giosink — Write to any GIO-supported location +giosrc
    -giosrc — Read from any GIO-supported location +giostreamsink
    -giostreamsink — Write to any GIO stream +giostreamsrc
    -giostreamsrc — Read from any GIO stream +multifdsink
    -multifdsink — Send data to multiple filedescriptors +multisocketsink
    -multisocketsink — Send data to multiple sockets +oggaviparse
    -oggdemux — demux ogg streams (info about ogg: http://xiph.org) +oggdemux
    -oggmux — mux ogg streams (info about ogg: http://xiph.org) +oggmux
    -playbin — Autoplug and play media from an uri +oggparse
    -playsink — Convenience sink for multiple streams +ogmaudioparse
    -streamsynchronizer — Synchronizes a group of streams to have equal durations and starting points +ogmtextparse
    -subtitleoverlay — Overlays a video stream with subtitles +ogmvideoparse
    -tcpclientsrc — Receive data as a client over the network via TCP +playbin
    -tcpclientsink — Send data as a client over the network via TCP +playsink
    -tcpserversrc — Receive data as a server over the network via TCP +socketsrc
    -tcpserversink — Send data as a server over the network via TCP +ssaparse
    -textoverlay — Adds text strings on top of a video buffer +streamsynchronizer
    -textrender — Renders a text string to an image bitmap +subparse
    -theoradec — decode raw theora streams to raw YUV video +subtitleoverlay
    -theoraenc — encode raw YUV video to a theora stream +tcpclientsink
    -theoraparse — parse raw theora streams +tcpclientsrc
    -timeoverlay — Overlays buffer time stamps on a video stream +tcpserversink
    -uridecodebin — Autoplug and decode an URI to raw media +tcpserversrc
    -videorate — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream +textoverlay
    -videoscale — Resizes video +textrender
    -videotestsrc — Creates a test video stream +theoradec
    -volume — Set volume on audio/raw streams +theoraenc
    -vorbisdec — decode raw vorbis streams to float audio +theoraparse
    -vorbisenc — Encodes audio in Vorbis format +timeoverlay
    -vorbisparse — parse raw vorbis streams +uridecodebin
    -vorbistag — Retags vorbis streams +videoconvert
    -ximagesink — A standard X based videosink +videorate
    -xvimagesink — A Xv based videosink +videoscale +
    +
    +videotestsrc +
    +
    +volume +
    +
    +vorbisdec +
    +
    +vorbisenc +
    +
    +vorbisparse +
    +
    +vorbistag +
    +
    +ximagesink +
    +
    +xvimagesink
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/ch02.html gst-plugins-base1.0-1.6.1/docs/plugins/html/ch02.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/ch02.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/ch02.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: gst-plugins-base Plugins +gst-plugins-base Plugins: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -24,87 +24,89 @@ gst-plugins-base Plugins
    -adderAdds multiple streams +adder — Adds multiple streams
    -alsaALSA plugin library +alsa — ALSA plugin library
    -appElements used to communicate with applications +app — Elements used to communicate with applications
    -audioconvertConvert audio to different formats +audioconvert — Convert audio to different formats
    -audiorateAdjusts audio frames +audiorate — Adjusts audio frames
    -audioresampleResamples audio +audioresample — Resamples audio
    -audiotestsrcCreates audio test signals of given frequency and volume +audiotestsrc — Creates audio test signals of given frequency and volume
    -cdparanoiaRead audio from CD in paranoid mode +cdparanoia — Read audio from CD in paranoid mode
    -encodingvarious encoding-related elements +encoding — various encoding-related elements
    -videoconvertColorspace conversion +gio — GIO elements
    -gioGIO elements +ivorbisdec — Vorbis Tremor decoder
    -libvisuallibvisual visualization plugins +libvisual — libvisual visualization plugins
    -oggogg stream manipulation (info about ogg: http://xiph.org) +ogg — ogg stream manipulation (info about ogg: http://xiph.org)
    -pangoPango-based text rendering and overlay +pango — Pango-based text rendering and overlay
    -playbackvarious playback elements +playback — various playback elements
    -subparseSubtitle parsing +subparse — Subtitle parsing
    -tcptransfer data over the network via TCP +tcp — transfer data over the network via TCP
    -theoraTheora plugin library +theora — Theora plugin library
    -typefindfunctionsdefault typefind functions +typefindfunctions — default typefind functions
    -videorateAdjusts video frames +videoconvert — Colorspace conversion
    -videoscaleResizes video +videorate — Adjusts video frames
    -videotestsrcCreates a test video stream +videoscale — Resizes video
    -volumeplugin for controlling audio volume +videotestsrc — Creates a test video stream
    -vorbisVorbis plugin library +volume — plugin for controlling audio volume
    -ximagesinkX11 video output element based on standard Xlib calls +vorbis — Vorbis plugin library
    -xvimagesinkXFree86 video output plugin using Xv extension +ximagesink — X11 video output element based on standard Xlib calls +
    +
    +xvimagesink — XFree86 video output plugin using Xv extension
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2 gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2 --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2 2015-10-30 14:21:43.000000000 +0000 @@ -1,13 +1,12 @@ - - - + + @@ -16,23 +15,30 @@ - + + + + + + + + - - + + @@ -40,6 +46,7 @@ + @@ -61,8 +68,8 @@ - + @@ -71,6 +78,7 @@ + @@ -81,13 +89,27 @@ - - - - - + + + + + + + + + + + + + + + + + + + @@ -106,42 +128,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - @@ -150,16 +142,10 @@ - - - - - - @@ -170,8 +156,6 @@ - - @@ -180,12 +164,8 @@ - - - - @@ -206,9 +186,6 @@ - - - @@ -219,35 +196,16 @@ - - - - - - - - - - - - - - - - - - - @@ -261,8 +219,6 @@ - - @@ -275,26 +231,12 @@ - - - - - - - - - - - - - - @@ -329,6 +271,8 @@ + + @@ -344,8 +288,6 @@ - - @@ -364,47 +306,34 @@ - - + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - + + + - - + + + + - - @@ -412,12 +341,9 @@ - - - - + @@ -431,14 +357,10 @@ - - - - - - + + @@ -460,9 +382,16 @@ - - - + + + + + + + + + + @@ -474,9 +403,6 @@ - - - @@ -485,9 +411,7 @@ - - - + @@ -508,17 +432,10 @@ - - - - - - - @@ -526,14 +443,8 @@ - - - - - - @@ -543,8 +454,6 @@ - - @@ -564,5 +473,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-adder.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-adder.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-adder.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-adder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: adder +adder: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -23,14 +23,14 @@ Home Up Prev -Next +Next

    adder

    -

    adder — Add N audio channels together

    +

    adder

    @@ -84,14 +84,17 @@ Mixed data is clamped to the min/max values of the data format.

    The adder currently mixes all data received on the sinkpads as soon as possible without trying to synchronize the streams.

    +

    Check out the audiomixer element in gst-plugins-bad for a better-behaving +audio mixing element: It will sync input streams correctly and also handle +live inputs properly.

    -

    Example launch line

    +

    Example launch line

    - +
    1
    gst-launch audiotestsrc freq=100 ! adder name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
    gst-launch-1.0 audiotestsrc freq=100 ! adder name=mix ! audioconvert ! autoaudiosink audiotestsrc freq=500 ! mix.
    @@ -101,7 +104,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -127,7 +130,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -178,11 +181,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -203,7 +205,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-alsasink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-alsasink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-alsasink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-alsasink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: alsasink +alsasink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -21,7 +21,7 @@ Home Up -Prev +Prev Next
    @@ -29,7 +29,7 @@

    alsasink

    -

    alsasink — Output to a sound card via ALSA

    +

    alsasink

    @@ -93,7 +93,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -119,7 +119,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -162,19 +162,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstAlsaSink

    struct GstAlsaSink;
    -

    -

    @@ -205,7 +202,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: alsasrc +alsasrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -22,14 +22,14 @@ Home Up Prev -Next +Next

    alsasrc

    -

    alsasrc — Read from a sound card via ALSA

    +

    alsasrc

    @@ -94,7 +94,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -120,7 +120,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -147,19 +147,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstAlsaSrc

    struct GstAlsaSrc;
    -

    -

    @@ -190,7 +187,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-appsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-appsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-appsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-appsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: appsink +appsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -23,15 +23,15 @@ Home Up -Prev -Next +Prev +Next

    appsink

    -

    appsink — Allow the application to get access to raw buffer

    +

    appsink

    @@ -85,29 +85,29 @@ void eos -Run Last +Run Last GstFlowReturn new-preroll -Run Last +Run Last GstFlowReturn new-sample -Run Last +Run Last GstSample* pull-preroll -Action +Action GstSample* pull-sample -Action +Action
    @@ -152,7 +152,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -178,7 +178,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -205,19 +205,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstAppSink

    struct GstAppSink;
    -

    -

    @@ -268,31 +265,7 @@
    void
     user_function (GstAppSink *gstappsink,
                    gpointer    user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -300,35 +273,7 @@
    GstFlowReturn
     user_function (GstAppSink *gstappsink,
                    gpointer    user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -336,35 +281,7 @@
    GstFlowReturn
     user_function (GstAppSink *gstappsink,
                    gpointer    user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -372,35 +289,7 @@
    GstSample*
     user_function (GstAppSink *gstappsink,
                    gpointer    user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Action

    +

    Flags: Action


    @@ -408,40 +297,11 @@
    GstSample*
     user_function (GstAppSink *gstappsink,
                    gpointer    user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Action

    +

    Flags: Action

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-appsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-appsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-appsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-appsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: appsrc +appsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -23,15 +23,15 @@ Home Up -Prev -Next +Prev +Next

    appsrc

    -

    appsrc — Allow the application to feed buffers to a pipeline

    +

    appsrc

    @@ -120,27 +120,32 @@ GstFlowReturn end-of-stream -Action +Action void enough-data -Run Last +Run Last void need-data -Run Last +Run Last GstFlowReturn push-buffer -Action +Action gboolean seek-data -Run Last +Run Last + + +GstFlowReturn +push-sample +Action
    @@ -185,7 +190,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -211,7 +216,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -238,19 +243,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstAppSrc

    struct GstAppSrc;
    -

    -

    @@ -361,35 +363,7 @@
    GstFlowReturn
     user_function (GstAppSrc *gstappsrc,
                    gpointer   user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Action

    +

    Flags: Action


    @@ -397,31 +371,7 @@
    void
     user_function (GstAppSrc *gstappsrc,
                    gpointer   user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -430,31 +380,7 @@ user_function (GstAppSrc *gstappsrc, guint arg1, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -463,35 +389,7 @@ user_function (GstAppSrc *gstappsrc, GstBuffer *arg1, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Action

    +

    Flags: Action


    @@ -500,40 +398,20 @@ user_function (GstAppSrc *gstappsrc, guint64 arg1, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstappsrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    +

    Flags: Run Last

    -

    Flags: Run Last

    +
    +
    +

    The “push-sample” signal

    +
    GstFlowReturn
    +user_function (GstAppSrc *gstappsrc,
    +               GstSample *arg1,
    +               gpointer   user_data)
    +

    Flags: Action

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audioconvert +audioconvert: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -21,7 +21,7 @@ Home Up -Prev +Prev Next
    @@ -29,7 +29,7 @@

    audioconvert

    -

    audioconvert — Convert audio to different formats

    +

    audioconvert

    @@ -92,7 +92,8 @@

    Description

    Audioconvert converts raw audio buffers between various possible formats. It supports integer to float conversion, width/depth conversion, -signedness and endianness conversion and channel transformations.

    +signedness and endianness conversion and channel transformations +(ie. upmixing and downmixing), as well as dithering and noise-shaping.

    Example launch line

    @@ -100,7 +101,7 @@
    1
    -
    gst-launch -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
    +
    gst-launch-1.0 -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
    @@ -112,13 +113,15 @@
    1
    -
    gst-launch -v -m audiotestsrc ! audioconvert ! vorbisenc ! fakesink silent=TRUE
    +
    gst-launch-1.0 -v -m uridecodebin uri=file:///path/to/audio.flac ! audioconvert ! vorbisenc ! oggmux ! filesink location=audio.ogg
    The vorbis encoder takes float audio data instead of the integer data -generated by audiotestsrc. +output by most other audio elements. This pipeline decodes a FLAC audio file +(or any other audio file for which decoders are installed) and re-encodes +it into an Ogg/Vorbis audio file.

    Synopsis

    @@ -200,11 +203,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -331,7 +333,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audiorate.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audiorate.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audiorate.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audiorate.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audiorate +audiorate: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    audiorate

    -

    audiorate — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream

    +

    audiorate

    @@ -133,13 +133,27 @@
    1
    -
    gst-launch -v alsasrc ! audiorate ! wavenc ! filesink location=alsa.wav
    +
    gst-launch-1.0 -v autoaudiosrc ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav
    - Capture audio from an ALSA device, and turn it into a perfect stream + Capture audio from the sound card and turn it into a perfect stream for saving in a raw audio file. +
    + + + + + + + +
    1
    gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav
    +
    + Decodes an audio file and transforms it into a perfect stream for saving +in a raw audio WAV file. Without the audio rate, the timing might not be +preserved correctly in the WAV file in case the decoded stream is jittery +or there are samples missing.

    Synopsis

    @@ -221,11 +235,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -300,7 +313,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audioresample.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audioresample.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audioresample.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audioresample.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audioresample +audioresample: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    audioresample

    -

    audioresample — Resamples audio

    +

    audioresample

    @@ -101,13 +101,14 @@
    1
    -
    gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! alsasink
    +
    gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! autoaudiosink
    - Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa. + Decode an audio file and downsample it to 8Khz and play sound. To create the Ogg/Vorbis file refer to the documentation of vorbisenc. +This assumes there is an audio sink that will accept/handle 8kHz audio.

    Synopsis

    @@ -189,11 +190,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -232,7 +232,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audiotestsrc +audiotestsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    audiotestsrc

    -

    audiotestsrc — Creates audio test signals of given frequency and volume

    +

    audiotestsrc

    @@ -125,7 +125,7 @@
    1
    -
    gst-launch audiotestsrc ! audioconvert ! alsasink
    +
    gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink
    @@ -137,7 +137,7 @@
    1
    -
    gst-launch audiotestsrc wave=2 freq=200 ! audioconvert ! tee name=t ! queue ! alsasink t. ! queue ! libvisual_lv_scope ! videoconvert ! xvimagesink
    +
    gst-launch-1.0 audiotestsrc wave=2 freq=200 ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! audioconvert ! libvisual_lv_scope ! videoconvert ! autovideosink
    @@ -202,11 +202,10 @@ -

    -

    Functions

    +

    Types and Values

    @@ -395,7 +394,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: cdparanoiasrc +cdparanoiasrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -31,7 +31,7 @@

    cdparanoiasrc

    -

    cdparanoiasrc — Read audio from CD in paranoid mode

    +

    cdparanoiasrc

    @@ -85,12 +85,12 @@ void transport-error -Run Last +Run Last void uncorrected-error -Run Last +Run Last @@ -184,19 +184,16 @@ -

    -

    Functions

    +

    Types and Values

    struct GstCdParanoiaSrc

    struct GstCdParanoiaSrc;
    -

    -

    @@ -252,31 +249,7 @@ user_function (GstCdParanoiaSrc *gstcdparanoiasrc, gint arg1, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstcdparanoiasrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -285,36 +258,11 @@ user_function (GstCdParanoiaSrc *gstcdparanoiasrc, gint arg1, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstcdparanoiasrc

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -

    Flags: Run Last

    +

    Flags: Run Last

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: clockoverlay +clockoverlay: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    clockoverlay

    -

    clockoverlay — Overlays the current clock time on a video stream

    +

    clockoverlay

    @@ -128,7 +128,7 @@

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] @@ -156,25 +156,22 @@

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] -

    -

    Functions

    +

    Types and Values

    struct GstClockOverlay

    struct GstClockOverlay;
    -

    -

    @@ -189,7 +186,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-decodebin.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-decodebin.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-decodebin.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-decodebin.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: decodebin +decodebin: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -31,7 +31,7 @@

    decodebin

    -

    decodebin — Autoplug and decode to raw media

    +

    decodebin

    @@ -122,39 +122,39 @@ gboolean autoplug-continue -Run Last +Run Last GValueArray* autoplug-factories -Run Last +Run Last gboolean autoplug-query -Run Last +Run Last GstAutoplugSelectResult autoplug-select -Run Last +Run Last GValueArray* autoplug-sort -Run Last +Run Last void drained -Run Last +Run Last void unknown-type -Run Last +Run Last @@ -198,7 +198,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -224,7 +224,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -275,11 +275,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -443,9 +442,8 @@ . If FALSE, those caps will be considered as final and the pad will be exposed as such (see 'pad-added' signal of GstElement).

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -466,7 +464,7 @@ having an unhandled type media type.

    Only the signal handler that is connected first will ever by invoked. - Don't connect signal handlers with the G_CONNECT_AFTER flag to this + Don't connect signal handlers with the G_CONNECT_AFTER flag to this signal, they will never be invoked!
    @@ -506,9 +504,8 @@

    a GValueArray* with a list of factories to try. The factories are by default tried in the returned order or based on the index returned by "autoplug-select".

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -517,7 +514,7 @@ user_function (GstDecodeBin *bin, GstPad *child, GstElement *pad, - GstQuery *query, + GstQuery *element, gpointer user_data)

    This signal is emitted whenever an autoplugged element that is not linked downstream yet and not exposed does a query. It can @@ -548,6 +545,11 @@   +

    element

    +

    The GstElement.

    +  + +

    query

    The GstQuery.

      @@ -563,9 +565,8 @@

    Returns

    TRUE if the query was handled, FALSE otherwise.

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -640,9 +641,8 @@

    a GST_TYPE_AUTOPLUG_SELECT_RESULT that indicates the required operation. the default handler will always return GST_AUTOPLUG_SELECT_TRY.

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -666,7 +666,7 @@ Invocation of signal handlers stops after one signal handler has returned something else than NULL. Signal handlers are invoked in the order they were connected in. - Don't connect signal handlers with the G_CONNECT_AFTER flag to this + Don't connect signal handlers with the G_CONNECT_AFTER flag to this signal, they will never be invoked!
    @@ -709,9 +709,8 @@

    Returns

    A new sorted array of GstElementFactory objects.

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -742,7 +741,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -787,12 +786,11 @@
    -

    Flags: Run Last

    +

    Flags: Run Last

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-encodebin.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-encodebin.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-encodebin.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-encodebin.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: encodebin +encodebin: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -24,14 +24,14 @@ Home Up Prev -Next +Next

    encodebin

    -

    encodebin — Convenience encoding/muxing element

    +

    encodebin

    @@ -96,13 +96,13 @@ GstPad* request-pad -Action +Action GstPad* request-profile-pad -Action +Action
    @@ -334,19 +334,16 @@ -

    -

    Functions

    +

    Types and Values

    GstEncodeBin

    typedef struct _GstEncodeBin GstEncodeBin;
    -

    -

    @@ -378,7 +375,7 @@

    The “profile” property

      “profile”                  GstEncodingProfile *

    The GstEncodingProfile to use. This property must be set before going -to GST_STATE_PAUSED or higher.

    +to GST_STATE_PAUSED or higher.

    Flags: Read / Write


    @@ -449,9 +446,8 @@

    Returns

    A compatible GstPad, or NULL if no compatible GstPad could be created or is available.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -495,14 +491,12 @@

    Returns

    A compatible GstPad, or NULL if no compatible GstPad could be created or is available.

    -

    -

    Flags: Action

    +

    Flags: Action

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giosink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giosink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giosink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giosink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: giosink +giosink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -22,7 +22,7 @@ Home Up -Prev +Prev Next
    @@ -30,7 +30,7 @@

    giosink

    -

    giosink — Write to any GIO-supported location

    +

    giosink

    @@ -95,7 +95,7 @@ the GIO library or it's VFS backends. Common protocols are 'file', 'ftp', or 'smb'.

    If the URI or GFile already exists giosink will post a message of -type GST_MESSAGE_ELEMENT with name "file-exists" on the bus. The message +type GST_MESSAGE_ELEMENT with name "file-exists" on the bus. The message also contains the GFile and the corresponding URI. Applications can use the "file-exists" message to notify the user about the problem and to set a different target location or to remove the @@ -110,13 +110,13 @@ mounted. This message can be used by application to mount the location and retry after the location was mounted successfully.

    -

    Example pipelines

    +

    Example pipelines

    - +
    1
    gst-launch -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz
    gst-launch-1.0 -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz
    @@ -128,19 +128,19 @@
    1
    -
    gst-launch -v filesrc location=foo.mp3 ! mad ! flacenc ! giosink location=smb://othercomputer/foo.flac
    +
    gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audioconvert ! flacenc ! giosink location=smb://othercomputer/foo.flac
    - The above pipeline will re-encode an mp3 file into FLAC format and store + The above pipeline will re-encode an audio file into FLAC format and store it on a remote host using the Samba protocol.
    - +
    1
    gst-launch -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg
    gst-launch-1.0 -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg
    @@ -151,7 +151,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -177,7 +177,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -204,11 +204,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -237,11 +236,10 @@

    See Also

    -

    GstFileSink, GstGnomeVFSSink, GstGioSrc

    +

    GstFileSink, GstGnomeVFSSink, GstGioSrc

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giosrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giosrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giosrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giosrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: giosrc +giosrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    giosrc

    -

    giosrc — Read from any GIO-supported location

    +

    giosrc

    @@ -95,7 +95,7 @@ the GIO library or it's VFS backends. Common protocols are 'file', 'http', 'ftp', or 'smb'.

    If an URI or GFile is not mounted giosrc will post a message of type -GST_MESSAGE_ELEMENT with name "not-mounted" on the bus. The message +GST_MESSAGE_ELEMENT with name "not-mounted" on the bus. The message also contains the GFile and the corresponding URI. Applications can use the "not-mounted" message to mount the GFile by calling g_file_mount_enclosing_volume() and then restart the @@ -106,13 +106,13 @@ message was received and gst_bus_set_flushing(bus, FALSE) after the mounting was successful.

    -

    Example launch lines

    +

    Example launch lines

    - +
    1
    gst-launch -v giosrc location=file:///home/joe/foo.xyz ! fakesink
    gst-launch-1.0 -v giosrc location=file:///home/joe/foo.xyz ! fakesink
    @@ -125,7 +125,7 @@
    1
    -
    gst-launch -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz
    +
    gst-launch-1.0 -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz
    @@ -137,18 +137,18 @@
    1
    -
    gst-launch -v giosrc location=http://music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioresample ! alsasink
    +
    gst-launch-1.0 -v giosrc location=smb://othercomputer/demo.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
    The above pipeline will read and decode and play an mp3 file from a -web server using the http protocol. +SAMBA server.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -174,7 +174,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -201,11 +201,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -234,11 +233,10 @@

    See Also

    -

    GstFileSrc, GstGnomeVFSSrc, GstGioSink

    +

    GstFileSrc, GstGnomeVFSSrc, GstGioSink

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: giostreamsink +giostreamsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    giostreamsink

    -

    giostreamsink — Write to any GIO stream

    +

    giostreamsink

    @@ -79,7 +79,7 @@

    It can, for example, be used to write a stream to memory with a GMemoryOuputStream or to write to a file with a GFileOuputStream.

    -

    Example code

    +

    Example code

    The following example writes the received data to a GMemoryOutputStream.

    @@ -144,7 +144,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -170,7 +170,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -197,11 +197,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -222,7 +221,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: giostreamsrc +giostreamsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    giostreamsrc

    -

    giostreamsrc — Read from any GIO stream

    +

    giostreamsrc

    @@ -80,7 +80,7 @@ GMemoryInputStream or to read from a file with a GFileInputStream.

    -

    Example code

    +

    Example code

    The following example reads data from a GMemoryInputStream.

    @@ -143,7 +143,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -169,7 +169,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -196,11 +196,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -221,7 +220,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: multifdsink +multifdsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    multifdsink

    -

    multifdsink — Send data to multiple filedescriptors

    +

    multifdsink

    @@ -61,43 +61,43 @@ void add -Action +Action void add-full -Action +Action void client-added -Run Last +Run Last void client-fd-removed -Run Last +Run Last void client-removed -Run Last +Run Last GstStructure* get-stats -Action +Action void remove -Action +Action void remove-flush -Action +Action @@ -154,7 +154,7 @@ each descriptor removed, the “client-removed” signal will be called. The “client-removed” signal can also be fired when multifdsink decides that a client is not active anymore or, depending on the value of the -“recover-policy” property, if the client is reading too slowly. +“recover-policy” property, if the client is reading too slowly. In all cases, multifdsink will never close a file descriptor itself. The user of multifdsink is responsible for closing all file descriptors. This can for example be done in response to the “client-fd-removed” signal. @@ -167,7 +167,7 @@ separate thread to send the buffers to the clients. This ensures that no client write can block the pipeline and that clients can read with different speeds.

    -

    When adding a client to multifdsink, the “sync-method” property will define +

    When adding a client to multifdsink, the “sync-method” property will define which buffer in the queued buffers will be sent first to the client. Clients can be sent the most recent buffer (which might not be decodable by the client if it is not a keyframe), the next keyframe received in @@ -175,7 +175,7 @@ last received keyframe (which will cause a simple burst-on-connect). Multifdsink will always keep at least one keyframe in its internal buffers when the sync-mode is set to latest-keyframe.

    -

    There are additional values for the “sync-method” +

    There are additional values for the “sync-method” property to allow finer control over burst-on-connect behaviour. By selecting the 'burst' method a minimum burst size can be chosen, 'burst-keyframe' additionally requires that the burst begin with a keyframe, and @@ -183,7 +183,7 @@ prefer a minimum burst size even if it requires not starting with a keyframe.

    Multifdsink can be instructed to keep at least a minimum amount of data expressed in time or byte units in its internal queues with the -“time-min” and “bytes-min” properties respectively. +“time-min” and “bytes-min” properties respectively. These properties are useful if the application adds clients with the “add-full” signal to make sure that a burst connect can actually be honored.

    @@ -192,11 +192,11 @@ fast, no data will be send to the client until multifdsink receives more data. If the client, however, reads too slowly, data for that client will be queued up in multifdsink. Two properties control the amount of data -(buffers) that is queued in multifdsink: “buffers-max” and -“buffers-soft-max”. A client that falls behind by -“buffers-max” is removed from multifdsink forcibly.

    -

    A client with a lag of at least “buffers-soft-max” enters the recovery -procedure which is controlled with the “recover-policy” property. +(buffers) that is queued in multifdsink: “buffers-max” and +“buffers-soft-max”. A client that falls behind by +“buffers-max” is removed from multifdsink forcibly.

    +

    A client with a lag of at least “buffers-soft-max” enters the recovery +procedure which is controlled with the “recover-policy” property. A recover policy of NONE will do nothing, RESYNC_LATEST will send the most recently received buffer as the next buffer for the client, RESYNC_SOFT_LIMIT positions the client to the soft limit in the buffer queue and @@ -209,7 +209,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -235,7 +235,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -262,11 +262,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -281,7 +280,7 @@

    Possible values for the recovery procedure to use when a client consumes data too slow and has a backlag of more that soft-limit buffers.

    -

    Members

    +

    Members

    @@ -327,7 +326,7 @@

    This enum defines the selection of the first buffer that is sent to a new client.

    -

    Members

    +

    Members

    @@ -390,7 +389,7 @@

    This specifies the reason why a client was removed from multisocketsink and is received in the "client-removed" signal.

    -

    Members

    +

    Members

    @@ -472,7 +471,7 @@ gpointer user_data)

    Hand the given open file descriptor to multifdsink to write to.

    -

    Parameters

    +

    Parameters

    @@ -498,7 +497,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -515,7 +514,7 @@

    Hand the given open file descriptor to multifdsink to write to and specify the burst parameters for the new connection.

    -

    Parameters

    +

    Parameters

    @@ -572,7 +571,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -585,7 +584,7 @@ be emitted from the streaming thread so application should be prepared for that.

    -

    Parameters

    +

    Parameters

    @@ -611,7 +610,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -631,7 +630,7 @@ . It is however safe to close() and reuse fd in the callback.

    -

    Parameters

    +

    Parameters

    @@ -657,7 +656,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -677,7 +676,7 @@ not safe to close() and reuse fd in this callback.

    -

    Parameters

    +

    Parameters

    @@ -708,7 +707,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -721,7 +720,7 @@ . This function returns a GValueArray to ease automatic wrapping for bindings.

    -

    Parameters

    +

    Parameters

    @@ -748,7 +747,7 @@
    -

    Returns

    +

    Returns

    a GValueArray with the statistics. The array contains guint64 values that represent respectively: total number of bytes sent, time when the client was added, time when the client was @@ -756,9 +755,8 @@ time (in epoch seconds), number of buffers dropped. All times are expressed in nanoseconds (GstClockTime). The array can be 0-length if the client was not found.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -769,7 +767,7 @@ gpointer user_data)

    Remove the given open file descriptor from multifdsink.

    -

    Parameters

    +

    Parameters

    @@ -795,7 +793,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -807,7 +805,7 @@

    Remove the given open file descriptor from multifdsink after flushing all the pending data to the fd.

    -

    Parameters

    +

    Parameters

    @@ -833,7 +831,7 @@
    -

    Flags: Action

    +

    Flags: Action

    @@ -842,7 +840,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: multisocketsink +multisocketsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -22,14 +22,14 @@ Home Up Prev -Next +Next

    multisocketsink

    -

    multisocketsink — Send data to multiple sockets

    +

    multisocketsink

    @@ -45,43 +45,43 @@ void add -Action +Action void add-full -Action +Action void client-added -Run Last +Run Last void client-removed -Run Last +Run Last void client-socket-removed -Run Last +Run Last GstStructure* get-stats -Action +Action void remove -Action +Action void remove-flush -Action +Action
    @@ -192,7 +192,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -218,7 +218,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -245,11 +245,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -264,7 +263,7 @@

    Possible values for the recovery procedure to use when a client consumes data too slow and has a backlag of more that soft-limit buffers.

    -

    Members

    +

    Members

    @@ -274,22 +273,30 @@ - + - + - + - + @@ -302,7 +309,7 @@

    This enum defines the selection of the first buffer that is sent to a new client.

    -

    Members

    +

    Members

    GST_RECOVER_POLICY_NONE

      +

    no recovering is done

    +
     

    GST_RECOVER_POLICY_RESYNC_LATEST

      +

    client is moved to last buffer

    +
     

    GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT

      +

    client is moved to the soft limit

    +
     

    GST_RECOVER_POLICY_RESYNC_KEYFRAME

      +

    client is moved to latest keyframe

    +
     
    @@ -312,32 +319,47 @@ - + - + - + - + - + - + @@ -350,7 +372,7 @@

    This specifies the reason why a client was removed from multisocketsink and is received in the "client-removed" signal.

    -

    Members

    +

    Members

    GST_SYNC_METHOD_LATEST

      +

    client receives most recent buffer

    +
     

    GST_SYNC_METHOD_NEXT_KEYFRAME

      +

    client receives next keyframe

    +
     

    GST_SYNC_METHOD_LATEST_KEYFRAME

      +

    client receives latest keyframe (burst)

    +
     

    GST_SYNC_METHOD_BURST

      +

    client receives specific amount of data

    +
     

    GST_SYNC_METHOD_BURST_KEYFRAME

      +

    client receives specific amount of data + starting from latest keyframe

    +
     

    GST_SYNC_METHOD_BURST_WITH_KEYFRAME

      +

    client receives specific amount of data from + a keyframe, or if there is not enough data after + the keyframe, starting before the keyframe

    +
     
    @@ -360,37 +382,51 @@ - + - + - + - + - + - + - + @@ -408,7 +444,7 @@ gpointer user_data)

    Hand the given open socket to multisocketsink to write to.

    -

    Parameters

    +

    Parameters

    GST_CLIENT_STATUS_OK

      +

    client is ok

    +
     

    GST_CLIENT_STATUS_CLOSED

      +

    client closed the socket

    +
     

    GST_CLIENT_STATUS_REMOVED

      +

    client is removed

    +
     

    GST_CLIENT_STATUS_SLOW

      +

    client is too slow

    +
     

    GST_CLIENT_STATUS_ERROR

      +

    client is in error

    +
     

    GST_CLIENT_STATUS_DUPLICATE

      +

    same client added twice

    +
     

    GST_CLIENT_STATUS_FLUSHING

      +

    client is flushing out the remaining buffers.

    +
     
    @@ -434,7 +470,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -451,7 +487,7 @@

    Hand the given open socket to multisocketsink to write to and specify the burst parameters for the new connection.

    -

    Parameters

    +

    Parameters

    @@ -508,7 +544,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -521,7 +557,7 @@ be emitted from the streaming thread so application should be prepared for that.

    -

    Parameters

    +

    Parameters

    @@ -547,7 +583,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -567,7 +603,7 @@ not safe to close() and reuse socket in this callback.

    -

    Parameters

    +

    Parameters

    @@ -598,7 +634,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -618,7 +654,7 @@ . It is however safe to close() and reuse fd in the callback.

    -

    Parameters

    +

    Parameters

    @@ -644,7 +680,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -656,7 +692,7 @@

    Get statistics about socket . This function returns a GstStructure.

    -

    Parameters

    +

    Parameters

    @@ -683,16 +719,15 @@
    -

    Returns

    +

    Returns

    a GstStructure with the statistics. The structure contains values that represent: total number of bytes sent, time when the client was added, time when the client was disconnected/removed, time the client is/was active, last activity time (in epoch seconds), number of buffers dropped. All times are expressed in nanoseconds (GstClockTime).

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -703,7 +738,7 @@ gpointer user_data)

    Remove the given open socket from multisocketsink.

    -

    Parameters

    +

    Parameters

    @@ -729,7 +764,7 @@
    -

    Flags: Action

    +

    Flags: Action


    @@ -741,7 +776,7 @@

    Remove the given open socket from multisocketsink after flushing all the pending data to the socket.

    -

    Parameters

    +

    Parameters

    @@ -767,7 +802,7 @@
    -

    Flags: Action

    +

    Flags: Action

    @@ -776,7 +811,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,128 @@ + + + + +oggaviparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    oggaviparse

    +

    oggaviparse

    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + ogg +

    author

    Wim Taymans <wim@fluendo.com>

    class

    Codec/Parser
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-ogg-avi
    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    always

    details

    audio/x-vorbis
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: oggdemux +oggdemux: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -20,7 +20,7 @@ Home Up -Prev +Prev Next
    @@ -28,7 +28,7 @@

    oggdemux

    -

    oggdemux — demux ogg streams (info about ogg: http://xiph.org)

    +

    oggdemux

    @@ -148,24 +148,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstOggDemux

    struct GstOggDemux;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggmux.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggmux.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggmux.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggmux.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: oggmux +oggmux: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -23,14 +23,14 @@ Home Up Prev -Next +Next

    oggmux

    -

    oggmux — mux ogg streams (info about ogg: http://xiph.org)

    +

    oggmux

    @@ -280,19 +280,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstOggMux

    struct GstOggMux;
    -

    -

    @@ -331,7 +328,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-oggparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-oggparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,128 @@ + + + + +oggparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    oggparse

    +

    oggparse

    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + ogg +

    author

    Michael Smith <msmith@fluendo.com>

    class

    Codec/Parser
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/ogg
    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    always

    details

    application/ogg
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,232 @@ + + + + +ogmaudioparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    ogmaudioparse

    +

    ogmaudioparse

    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + ogg +

    author

    GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    Codec/Decoder/Audio
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-ogm-audio
    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    sometimes

    details

    audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]

    audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]

    audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]

    audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]

    audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]

    audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]

    audio/x-dts

    audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]

    audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]

    audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]

    audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]

    audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]

    audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]

    audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]

    audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]

    audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]

    audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]

    audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]

    audio/AMR, rate=(int)8000, channels=(int)1

    audio/AMR-WB, rate=(int)16000, channels=(int)1

    audio/x-siren

    application/x-ogg-avi
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,128 @@ + + + + +ogmtextparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    ogmtextparse

    +

    ogmtextparse

    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + ogg +

    author

    GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    Codec/Decoder/Subtitle
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-ogm-text
    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    sometimes

    details

    text/x-raw, format=(string)utf8
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,448 @@ + + + + +ogmvideoparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    ogmvideoparse

    +

    ogmvideoparse

    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + ogg +

    author

    GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    Codec/Decoder/Video
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-ogm-video
    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    sometimes

    details

    video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string){ RGB8P, BGR, BGRx }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-wmv, wmvversion=(int)3, format=(string)WMV3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)v210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]

    video/x-raw, format=(string)r210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-playbin.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-playbin.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-playbin.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-playbin.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: playbin +playbin: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -23,7 +23,7 @@ Home Up -Prev +Prev Next
    @@ -31,7 +31,7 @@

    playbin

    -

    playbin — Autoplug and play media from an uri

    +

    playbin

    @@ -221,6 +221,16 @@ video-filter Read / Write + +GstVideoMultiviewFlags +video-multiview-flags +Read / Write + + +GstVideoMultiviewFramePacking +video-multiview-mode +Read / Write +
    @@ -236,84 +246,84 @@ void about-to-finish -Run Last +Run Last void audio-changed -Run Last +Run Last void audio-tags-changed -Run Last +Run Last GstSample* convert-sample -Action +Action GstPad* get-audio-pad -Action +Action GstTagList* get-audio-tags -Action +Action GstPad* get-text-pad -Action +Action GstTagList* get-text-tags -Action +Action GstPad* get-video-pad -Action +Action GstTagList* get-video-tags -Action +Action void source-setup -Run Last +Run Last void text-changed -Run Last +Run Last void text-tags-changed -Run Last +Run Last void video-changed -Run Last +Run Last void video-tags-changed -Run Last +Run Last @@ -388,7 +398,7 @@
    -

    Usage

    +

    Usage

    A playbin element can be created just like any other element using gst_element_factory_make(). The file/URI to play should be set via the “uri” @@ -429,7 +439,7 @@


    -

    Advanced Usage: specifying the audio and video sink

    +

    Advanced Usage: specifying the audio and video sink

    By default, if no audio sink or video sink has been specified via the “audio-sink” or “video-sink” property, playbin will use the autoaudiosink @@ -464,7 +474,7 @@


    -

    Retrieving Tags and Other Meta Data

    +

    Retrieving Tags and Other Meta Data

    Most of the common meta data (artist, title, etc.) can be retrieved by watching for TAG messages on the pipeline's bus (see above). @@ -476,7 +486,7 @@


    -

    Buffering

    +

    Buffering

    Playbin handles buffering automatically for the most part, but applications need to handle parts of the buffering process as well. Whenever playbin is buffering, it will post BUFFERING messages on the bus with a percentage @@ -501,7 +511,7 @@ case GST_MESSAGE_BUFFERING: { gint percent = 0; gst_message_parse_buffering (msg, &percent); - g_print ("Buffering (%%u percent done)", percent); + g_print ("Buffering (%u percent done)", percent); break; } ... @@ -518,7 +528,7 @@

    -

    Embedding the video window in your application

    +

    Embedding the video window in your application

    By default, playbin (or rather the video sinks used) will create their own window. Applications will usually want to force output to a window of their own, however. This can be done using the GstVideoOverlay interface, which most @@ -526,7 +536,7 @@

    -

    Specifying which CD/DVD device to use

    +

    Specifying which CD/DVD device to use

    The device to use for CDs/DVDs needs to be set on the source element playbin creates before it is opened. The most generic way of doing this is to connect to playbin's "source-setup" (or "notify::source") signal, @@ -540,7 +550,7 @@

    -

    Handling redirects

    +

    Handling redirects

    Some elements may post 'redirect' messages on the bus to tell the application to open another location. These are element messages containing @@ -551,28 +561,28 @@


    -

    Examples

    +

    Examples

    - +
    1
    gst-launch -v playbin uri=file:///path/to/somefile.avi
    gst-launch-1.0 -v playbin uri=file:///path/to/somefile.mp4
    This will play back the given AVI video file, given that the video and audio decoders required to decode the content are installed. Since no -special audio sink or video sink is supplied (not possible via gst-launch), -playbin will try to find a suitable audio and video sink automatically -using the autoaudiosink and autovideosink elements. +special audio sink or video sink is supplied (via playbin's audio-sink or +video-sink properties) playbin will try to find a suitable audio and +video sink automatically using the autoaudiosink and autovideosink elements.
    - +
    1
    gst-launch -v playbin uri=cdda://4
    gst-launch-1.0 -v playbin uri=cdda://4
    @@ -584,7 +594,7 @@
    1
    -
    gst-launch -v playbin uri=dvd://
    +
    gst-launch-1.0 -v playbin uri=dvd://
    @@ -595,7 +605,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -621,14 +631,13 @@
    -

    Element Pads

    +

    Element Pads

    -

    -

    Functions

    +

    Types and Values

    @@ -642,7 +651,7 @@

    enum GstPlayFlags

    Extra flags to configure the behaviour of the sinks.

    -

    Members

    +

    Members

    @@ -726,7 +735,9 @@ - + @@ -1012,6 +1023,21 @@

    the video filter(s) to apply, if possible.

    Flags: Read / Write

    +
    +
    +

    The “video-multiview-flags” property

    +
      “video-multiview-flags”    GstVideoMultiviewFlags
    +

    Override details of the multiview frame layout.

    +

    Flags: Read / Write

    +
    +
    +
    +

    The “video-multiview-mode” property

    +
      “video-multiview-mode”     GstVideoMultiviewFramePacking
    +

    Re-interpret a video stream as one of several frame-packed stereoscopic modes.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE

    +

    Signal Details

    @@ -1024,7 +1050,7 @@ set the uri and suburi to make sure that playback continues.

    This signal is emitted from the context of a GStreamer streaming thread.

    -

    Parameters

    +

    Parameters

    GST_PLAY_FLAG_SOFT_COLORBALANCE

      +

    Use a software filter for colour balance

    +
     
    @@ -1045,7 +1071,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1060,7 +1086,7 @@ You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1081,7 +1107,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1096,7 +1122,7 @@ You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1122,7 +1148,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1138,7 +1164,7 @@ is NULL, no conversion will be performed and this function is equivalent to the “frame” property.

    -

    Parameters

    +

    Parameters

    @@ -1165,14 +1191,13 @@
    -

    Returns

    +

    Returns

    a GstSample of the current video frame converted to caps. The caps on the sample will describe the final layout of the buffer data. NULL is returned when no current buffer can be retrieved or when the conversion failed.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1186,7 +1211,7 @@ This pad can be used for notifications of caps changes, stream-specific queries, etc.

    -

    Parameters

    +

    Parameters

    @@ -1213,11 +1238,10 @@
    -

    Returns

    +

    Returns

    a GstPad, or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1229,7 +1253,7 @@

    Action signal to retrieve the tags of a specific audio stream number. This information can be used to select a stream.

    -

    Parameters

    +

    Parameters

    @@ -1256,12 +1280,11 @@
    -

    Returns

    +

    Returns

    a GstTagList with tags or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1275,7 +1298,7 @@ This pad can be used for notifications of caps changes, stream-specific queries, etc.

    -

    Parameters

    +

    Parameters

    @@ -1302,11 +1325,10 @@
    -

    Returns

    +

    Returns

    a GstPad, or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1318,7 +1340,7 @@

    Action signal to retrieve the tags of a specific text stream number. This information can be used to select a stream.

    -

    Parameters

    +

    Parameters

    @@ -1345,12 +1367,11 @@
    -

    Returns

    +

    Returns

    a GstTagList with tags or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1364,7 +1385,7 @@ This pad can be used for notifications of caps changes, stream-specific queries, etc.

    -

    Parameters

    +

    Parameters

    @@ -1391,11 +1412,10 @@
    -

    Returns

    +

    Returns

    a GstPad, or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1407,7 +1427,7 @@

    Action signal to retrieve the tags of a specific video stream number. This information can be used to select a stream.

    -

    Parameters

    +

    Parameters

    @@ -1434,12 +1454,11 @@
    -

    Returns

    +

    Returns

    a GstTagList with tags or NULL when the stream number does not exist.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -1456,7 +1475,7 @@

    This signal is usually emitted from the context of a GStreamer streaming thread.

    -

    Parameters

    +

    Parameters

    @@ -1482,7 +1501,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1497,7 +1516,7 @@ You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1518,7 +1537,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1533,7 +1552,7 @@ You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1559,7 +1578,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1574,7 +1593,7 @@ thread. You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1595,7 +1614,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -1610,7 +1629,7 @@ You can use gst_message_new_application() and gst_element_post_message() to notify your application's main thread.

    -

    Parameters

    +

    Parameters

    @@ -1636,12 +1655,11 @@
    -

    Flags: Run Last

    +

    Flags: Run Last

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-playsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-playsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-playsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-playsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: playsink +playsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -24,14 +24,14 @@ Home Up Prev -Next +Next

    playsink

    -

    playsink — Convenience sink for multiple streams

    +

    playsink

    @@ -144,12 +144,12 @@ GstSample* convert-sample -Action +Action gboolean reconfigure -Action +Action
    @@ -188,7 +188,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -214,7 +214,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -337,19 +337,16 @@
    -

    -

    Functions

    +

    Types and Values

    GstPlaySink

    typedef struct _GstPlaySink GstPlaySink;
    -

    -

    @@ -358,7 +355,7 @@

    The “audio-sink” property

      “audio-sink”               GstElement *

    Set the used audio sink element. NULL will use the default sink. playsink -must be in GST_STATE_NULL

    +must be in GST_STATE_NULL

    Flags: Read / Write


    @@ -432,7 +429,7 @@

    The “text-sink” property

      “text-sink”                GstElement *

    Set the used text sink element. NULL will use the default sink. playsink -must be in GST_STATE_NULL

    +must be in GST_STATE_NULL

    Flags: Read / Write


    @@ -440,7 +437,7 @@

    The “video-sink” property

      “video-sink”               GstElement *

    Set the used video sink element. NULL will use the default sink. playsink -must be in GST_STATE_NULL

    +must be in GST_STATE_NULL

    Flags: Read / Write


    @@ -466,7 +463,7 @@
      “audio-filter”             GstElement *

    Set the audio filter element/bin to use. Will apply on a best-effort basis unless GST_PLAY_FLAG_FORCE_FILTERS is set. playsink must be in -GST_STATE_NULL

    +GST_STATE_NULL

    Flags: Read / Write


    @@ -475,7 +472,7 @@
      “video-filter”             GstElement *

    Set the video filter element/bin to use. Will apply on a best-effort basis unless GST_PLAY_FLAG_FORCE_FILTERS is set. playsink must be in -GST_STATE_NULL

    +GST_STATE_NULL

    Flags: Read / Write

    @@ -494,7 +491,7 @@ is NULL, no conversion will be performed and this function is equivalent to the “sample” property.

    -

    Parameters

    +

    Parameters

    @@ -521,14 +518,13 @@
    -

    Returns

    +

    Returns

    a GstSample of the current video sample converted to caps. The caps in the sample will describe the final layout of the buffer data. NULL is returned when no current sample can be retrieved or when the conversion failed.

    -

    -

    Flags: Action

    +

    Flags: Action


    @@ -536,40 +532,11 @@
    gboolean
     user_function (GstPlaySink *gstplaysink,
                    gpointer     user_data)
    -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gstplaysink

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Action

    +

    Flags: Action

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: adder +adder: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: alsa +alsa: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -80,7 +80,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: app +app: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -80,7 +80,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audioconvert +audioconvert: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audiorate +audiorate: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audioresample +audioresample: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: audiotestsrc +audiotestsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: cdparanoia +cdparanoia: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: encoding +encoding: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -17,7 +17,7 @@ Home Up Prev -Next +Next
    @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -74,7 +74,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: gio +gio: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -16,8 +16,8 @@ Home Up -Prev -Next +Prev +Next
    @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -88,7 +88,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,79 @@ + + + + +ivorbisdec: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + +
    + + + + + + +
    +
    +
    + + +
    +

    ivorbisdec

    +

    ivorbisdec — Vorbis Tremor decoder

    +
    +
    +

    Plugin Information

    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + +

    filename

    libgstivorbisdec.so

    version

    1.4.0

    run-time license

    LGPL

    package

    GStreamer Base Plug-ins source release

    origin

    Unknown package origin
    +
    +
    +

    Elements

    +
    ++++ + + + + +

    ivorbisdec

    decode raw vorbis streams to integer audio
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: libvisual +libvisual: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -16,7 +16,7 @@ Home Up -Prev +Prev Next
    @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -104,7 +104,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: ogg +ogg: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -68,7 +68,7 @@ -

    oggaviparse

    +

    oggaviparse

    parse an ogg avi stream into pages (info about ogg: http://xiph.org) @@ -80,19 +80,19 @@ mux ogg streams (info about ogg: http://xiph.org) -

    oggparse

    +

    oggparse

    parse ogg streams into pages (info about ogg: http://xiph.org) -

    ogmaudioparse

    +

    ogmaudioparse

    parse an OGM audio header and stream -

    ogmtextparse

    +

    ogmtextparse

    parse an OGM text header and stream -

    ogmvideoparse

    +

    ogmvideoparse

    parse an OGM video header and stream @@ -100,7 +100,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: pango +pango: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -88,7 +88,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: playback +playback: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -96,7 +96,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: subparse +subparse: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -68,11 +68,11 @@ -

    ssaparse

    +

    ssaparse

    Parses SSA subtitle streams -

    subparse

    +

    subparse

    Parses subtitle (.sub) files into text streams @@ -80,7 +80,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: tcp +tcp: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -76,6 +76,10 @@ Send data to multiple sockets +

    socketsrc

    +Receive data from a socket + +

    tcpclientsink

    Send data as a client over the network via TCP @@ -96,7 +100,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: theora +theora: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -84,7 +84,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: typefindfunctions +typefindfunctions: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -17,7 +17,7 @@ Home Up Prev -Next +Next
    @@ -42,7 +42,7 @@

    version

    -1.4.3 +1.6.1

    run-time license

    @@ -71,7 +71,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videoconvert +videoconvert: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -16,8 +16,8 @@ Home Up -Prev -Next +Prev +Next
    @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videorate +videorate: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -16,7 +16,7 @@ - +
    Home UpPrevPrev Next
    @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videoscale +videoscale: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videotestsrc +videotestsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: volume +volume: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbis +vorbis: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -88,7 +88,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: ximagesink +ximagesink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -74,7 +74,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,12 +2,12 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: xvimagesink +xvimagesink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -28,7 +28,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -41,7 +41,7 @@ - + @@ -59,7 +59,7 @@

    version

    1.4.31.6.1

    run-time license

    -

    Elements

    +

    Elements

    @@ -73,7 +73,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,214 @@ + + + + +socketsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + +
    + + + + + + +
    +
    +
    + + +
    +

    socketsrc

    +

    socketsrc

    +
    +
    +

    Properties

    +
    +++++ + + + + + + + + + + + + +
    +GSocket *socketRead / Write
    +GstCaps *capsRead / Write
    +
    +
    +

    Signals

    +
    +++++ + + + + + +
    voidconnection-closed-by-peerRun First
    +
    +
    +

    Types and Values

    +
    ++++ + + + + +
    structGstSocketSrc
    +
    +
    +

    Object Hierarchy

    +
        GObject
    +    ╰── GInitiallyUnowned
    +        ╰── GstObject
    +            ╰── GstElement
    +                ╰── GstBaseSrc
    +                    ╰── GstPushSrc
    +                        ╰── GstSocketSrc
    +
    +
    +
    +

    Description

    +

    Receive data from a socket.

    +

    As compared to other elements:

    +

    socketsrc can be considered a source counterpart to the multisocketsink +sink.

    +

    socketsrc can also be considered a generalization of tcpclientsrc and +tcpserversrc: it contains all the logic required to communicate over the +socket but none of the logic for creating the sockets/establishing the +connection in the first place, allowing the user to accomplish this +externally in whatever manner they wish making it applicable to other types +of sockets besides TCP.

    +

    As compared to fdsrc socketsrc is socket specific and deals with GSocket +objects rather than sockets via integer file-descriptors.

    +

    see_also +: multisocketsink

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + tcp +

    author

    Thomas Vander Stichele <thomas at apestaart dot org>, William Manley <will@williammanley.net>

    class

    Source/Network
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    always

    details

    ANY
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +

    struct GstSocketSrc

    +
    struct GstSocketSrc;
    +
    +
    +
    +

    Property Details

    +
    +

    The “socket” property

    +
      “socket”                   GSocket *
    +

    The socket to receive packets from.

    +

    Flags: Read / Write

    +
    +
    +
    +

    The “caps” property

    +
      “caps”                     GstCaps *
    +

    The caps of the source pad.

    +

    Flags: Read / Write

    +
    +
    +
    +

    Signal Details

    +
    +

    The “connection-closed-by-peer” signal

    +
    void
    +user_function (GstSocketSrc *gstsocketsrc,
    +               gpointer      user_data)
    +

    Flags: Run First

    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,159 @@ + + + + +ssaparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    ssaparse

    +

    ssaparse

    +
    +
    +

    Types and Values

    +
    ++++ + + + + +
    structGstSsaParse
    +
    +
    +

    Object Hierarchy

    +
        GObject
    +    ╰── GInitiallyUnowned
    +        ╰── GstObject
    +            ╰── GstElement
    +                ╰── GstSsaParse
    +
    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + subparse +

    author

    Tim-Philipp Müller <tim centricular net>

    class

    Codec/Parser/Subtitle
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-ssa

    application/x-ass
    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    always

    details

    text/x-raw, format=(string)pango-markup
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +

    struct GstSsaParse

    +
    struct GstSsaParse;
    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: streamsynchronizer +streamsynchronizer: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -20,15 +20,15 @@ Home Up -Prev -Next +Prev +Next

    streamsynchronizer

    -

    streamsynchronizer — Synchronizes a group of streams to have equal durations and starting points

    +

    streamsynchronizer

    @@ -59,7 +59,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -85,7 +85,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -136,24 +136,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstStreamSynchronizer

    struct GstStreamSynchronizer;
    -

    -

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-subparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-subparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-subparse.html 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-subparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -0,0 +1,220 @@ + + + + +subparse: GStreamer Base Plugins 1.0 Plugins Reference Manual + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +

    subparse

    +

    subparse

    +
    +
    +

    Properties

    +
    +++++ + + + + + + + + + + + + +
    +gchar *subtitle-encodingRead / Write
    GstFractionvideo-fpsRead / Write
    +
    +
    +

    Types and Values

    +
    ++++ + + + + +
    structGstSubParse
    +
    +
    +

    Object Hierarchy

    +
        GObject
    +    ╰── GInitiallyUnowned
    +        ╰── GstObject
    +            ╰── GstElement
    +                ╰── GstSubParse
    +
    +
    +
    +

    Description

    +
    +

    Synopsis

    +
    +

    Element Information

    +
    ++++ + + + + + + + + + + + + + + +

    plugin

    + subparse +

    author

    Gustavo J. A. M. Carneiro <gjc@inescporto.pt>, GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    Codec/Parser/Subtitle
    +
    +
    +
    +

    Element Pads

    +
    ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    name

    sink

    direction

    sink

    presence

    always

    details

    application/x-subtitle

    application/x-subtitle-sami

    application/x-subtitle-tmplayer

    application/x-subtitle-mpl2

    application/x-subtitle-dks

    application/x-subtitle-qttext

    application/x-subtitle-lrc
    +
    ++++ + + + + + + + + + + + + + + + + + + +

    name

    src

    direction

    source

    presence

    always

    details

    text/x-raw, format=(string){ pango-markup, utf8 }
    +
    +
    +
    +
    +

    Functions

    +

    +
    +
    +

    Types and Values

    +
    +

    struct GstSubParse

    +
    struct GstSubParse;
    +
    +
    +
    +

    Property Details

    +
    +

    The “subtitle-encoding” property

    +
      “subtitle-encoding”        gchar *
    +

    Encoding to assume if input subtitles are not in UTF-8 or any other Unicode encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.

    +

    Flags: Read / Write

    +

    Default value: NULL

    +
    +
    +
    +

    The “video-fps” property

    +
      “video-fps”                GstFraction
    +

    Framerate of the video stream. This is needed by some subtitle formats to synchronize subtitles and video properly. If not set and the subtitle format requires it subtitles may be out of sync.

    +

    Flags: Read / Write

    +
    +
    +
    + + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: subtitleoverlay +subtitleoverlay: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -22,15 +22,15 @@ Home Up -Prev -Next +Prev +Next

    subtitleoverlay

    -

    subtitleoverlay — Overlays a video stream with subtitles

    +

    subtitleoverlay

    @@ -99,23 +99,23 @@

    It supports raw, timestamped text, different textual subtitle formats and DVD subpicture subtitles.

    -

    Examples

    +

    Examples

    - +
    1
    gst-launch -v filesrc location=test.mkv ! matroskademux name=demux ! "video/x-h264" ! queue2 ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! "subpicture/x-dvd" ! queue2 ! overlay.
    gst-launch-1.0 -v filesrc location=test.mkv ! matroskademux name=demux ! video/x-h264 ! queue ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! subpicture/x-dvd ! queue ! overlay.
    - This will play back the given Matroska file with h264 video and subpicture subtitles. + This will play back the given Matroska file with h264 video and dvd subpicture style subtitles.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -141,7 +141,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -216,19 +216,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstSubtitleOverlay

    struct GstSubtitleOverlay;
    -

    -

    @@ -259,7 +256,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpclientsink +tcpclientsink: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -21,15 +21,15 @@ Home Up -Prev -Next +Prev +Next

    tcpclientsink

    -

    tcpclientsink — Send data as a client over the network via TCP

    +

    tcpclientsink

    @@ -82,7 +82,7 @@

    Description

    -

    Example launch line

    +

    Example launch line

    @@ -94,17 +94,18 @@ +gst-launch-1.0 fdsink fd=1! tcpclientsink port=3000
    # server:
     nc -l -p 3000
     # client:
    -gst-launch fdsink fd=1 ! tcpclientsink port=3000
    - everything you type in the client is shown on the server + everything you type in the client is shown on the server (fd=1 means +standard input which is the command line input file descriptor)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -130,7 +131,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -157,19 +158,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTCPClientSink

    struct GstTCPClientSink;
    -

    -

    @@ -197,7 +195,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpclientsrc +tcpclientsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -21,15 +21,15 @@ Home Up -Prev -Next +Prev +Next

    tcpclientsrc

    -

    tcpclientsrc — Receive data as a client over the network via TCP

    +

    tcpclientsrc

    @@ -83,7 +83,7 @@

    Description

    -

    Example launch line

    +

    Example launch line

    @@ -95,7 +95,7 @@ +gst-launch-1.0 tcpclientsrc port=3000! fdsink fd=2
    # server:
     nc -l -p 3000
     # client:
    -gst-launch tcpclientsrc port=3000 ! fdsink fd=2
    @@ -105,7 +105,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -131,7 +131,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -158,19 +158,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTCPClientSrc

    struct GstTCPClientSrc;
    -

    -

    @@ -198,7 +195,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpserversink +tcpserversink: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -21,15 +21,15 @@ Home Up -Prev -Next +Prev +Next

    tcpserversink

    -

    tcpserversink — Send data as a server over the network via TCP

    +

    tcpserversink

    @@ -89,7 +89,7 @@

    Description

    -

    Example launch line

    +

    Example launch line

    @@ -99,9 +99,9 @@ 3 4 +gst-launch-1.0 tcpclientsrc port=3000! fdsink fd=2
    # server:
    -gst-launch fdsrc fd=1 ! tcpserversink port=3000
    +gst-launch-1.0 fdsrc fd=1 ! tcpserversink port=3000
     # client:
    -gst-launch tcpclientsrc port=3000 ! fdsink fd=2
    @@ -111,7 +111,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -137,7 +137,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -164,11 +164,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -189,7 +188,7 @@

    Flags: Read

    Allowed values: [0,65535]

    Default value: 0

    -

    Since 1.0.2

    +

    Since: 1.0.2


    @@ -215,7 +214,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpserversrc +tcpserversrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -21,15 +21,15 @@ Home Up -Prev -Next +Prev +Next

    tcpserversrc

    -

    tcpserversrc — Receive data as a server over the network via TCP

    +

    tcpserversrc

    @@ -88,7 +88,7 @@

    Description

    -

    Example launch line

    +

    Example launch line

    @@ -98,9 +98,9 @@ 3 4 +gst-launch-1.0 fdsrc fd=1! tcpclientsink port=3000
    # server:
    -gst-launch tcpserversrc port=3000 ! fdsink fd=2
    +gst-launch-1.0 tcpserversrc port=3000 ! fdsink fd=2
     # client:
    -gst-launch fdsrc fd=1 ! tcpclientsink port=3000
    @@ -110,7 +110,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -136,7 +136,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -163,19 +163,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTCPServerSrc

    struct GstTCPServerSrc;
    -

    -

    @@ -189,7 +186,7 @@

    Flags: Read

    Allowed values: [0,65535]

    Default value: 0

    -

    Since 1.0.2

    +

    Since: 1.0.2


    @@ -215,7 +212,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: textoverlay +textoverlay: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -20,7 +20,7 @@ Home Up -Prev +Prev Next
    @@ -28,7 +28,7 @@

    textoverlay

    -

    textoverlay — Adds text strings on top of a video buffer

    +

    textoverlay

    @@ -60,7 +60,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -86,7 +86,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -135,7 +135,7 @@ - +

    video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -163,30 +163,26 @@

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    -

    -

    Functions

    +

    Types and Values

    struct GstTextOverlay

    struct GstTextOverlay;
    -

    -

    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-textrender.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-textrender.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-textrender.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-textrender.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: textrender +textrender: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    textrender

    -

    textrender — Renders a text string to an image bitmap

    +

    textrender

    @@ -103,7 +103,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -118,7 +118,7 @@ - + @@ -129,7 +129,7 @@
    -

    Element Pads

    +

    Element Pads

    author

    David Schleef <ds@schleef.org>, GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>David Schleef <ds@schleef.org>, GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    @@ -180,19 +180,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTextRender

    struct GstTextRender;
    -

    -

    @@ -249,7 +246,6 @@
    +
    Generated by GTK-Doc V1.24
    \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoradec.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoradec.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoradec.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoradec.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: theoradec +theoradec: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -28,7 +28,7 @@

    theoradec

    -

    theoradec — decode raw theora streams to raw YUV video

    +

    theoradec

    @@ -60,7 +60,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -86,7 +86,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -137,24 +137,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTheoraDec

    struct GstTheoraDec;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: theoraenc +theoraenc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    theoraenc

    -

    theoraenc — encode raw YUV video to a theora stream

    +

    theoraenc

    @@ -85,7 +85,7 @@ Read / Write -GstTheoraEncMultipassMode +GstTheoraEncMultipassMode multipass-mode Read / Write @@ -119,10 +119,16 @@ - + + struct GstTheoraEnc - + + +enum +GstTheoraEncMultipassMode + +
    @@ -146,7 +152,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -172,7 +178,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -223,19 +229,47 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTheoraEnc

    struct GstTheoraEnc;
    -

    -

    +
    +
    +
    +

    enum GstTheoraEncMultipassMode

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + +

    MULTIPASS_MODE_SINGLE_PASS

      

    MULTIPASS_MODE_FIRST_PASS

      

    MULTIPASS_MODE_SECOND_PASS

      
    +
    @@ -309,7 +343,7 @@

    The “multipass-mode” property

    -
      “multipass-mode”           GstTheoraEncMultipassMode
    +
      “multipass-mode”           GstTheoraEncMultipassMode

    Single pass or first/second pass.

    Flags: Read / Write

    Default value: Single pass

    @@ -352,7 +386,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: theoraparse +theoraparse: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -28,7 +28,7 @@

    theoraparse

    -

    theoraparse — parse raw theora streams

    +

    theoraparse

    @@ -59,7 +59,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -85,7 +85,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -136,24 +136,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstTheoraParse

    struct GstTheoraParse;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: timeoverlay +timeoverlay: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -16,7 +16,8 @@ Top  |  Description  |  - Object Hierarchy + Object Hierarchy  |  + Properties Home Up @@ -28,10 +29,25 @@

    timeoverlay

    -

    timeoverlay — Overlays buffer time stamps on a video stream

    +

    timeoverlay

    +
    +

    Properties

    +
    +++++ + + + + + +
    GstTimeOverlayTimeLinetime-modeRead / Write
    +

    Types and Values

    @@ -39,10 +55,16 @@ - + + - + + + + + +
    struct GstTimeOverlay
    enumGstTimeOverlayTimeLine
    @@ -60,7 +82,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -86,7 +108,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -111,7 +133,7 @@ - +

    video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -139,30 +161,67 @@

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    -

    -

    Functions

    +

    Types and Values

    struct GstTimeOverlay

    struct GstTimeOverlay;
    -

    -

    +
    +
    +
    +

    enum GstTimeOverlayTimeLine

    +
    +

    Members

    +
    +++++ + + + + + + + + + + + + + + + + + +

    GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME

      

    GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME

      

    GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME

      
    +
    +
    +
    +
    +

    Property Details

    +
    +

    The “time-mode” property

    +
      “time-mode”                GstTimeOverlayTimeLine
    +

    What time to show.

    +

    Flags: Read / Write

    +

    Default value: buffer-time

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: uridecodebin +uridecodebin: GStreamer Base Plugins 1.0 Plugins Reference Manual - - + + @@ -24,14 +24,14 @@ Home Up Prev -Next +Next

    uridecodebin

    -

    uridecodebin — Autoplug and decode an URI to raw media

    +

    uridecodebin

    @@ -118,44 +118,44 @@ gboolean autoplug-continue -Run Last +Run Last GValueArray* autoplug-factories -Run Last +Run Last gboolean autoplug-query -Run Last +Run Last GstAutoplugSelectResult autoplug-select -Run Last +Run Last GValueArray* autoplug-sort -Run Last +Run Last void drained -Run Last +Run Last void source-setup -Run Last +Run Last void unknown-type -Run Last +Run Last
    @@ -202,7 +202,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -228,7 +228,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -255,11 +255,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -273,7 +272,7 @@

    enum GstAutoplugSelectResult

    return values for the autoplug-select signal.

    -

    Members

    +

    Members

    @@ -416,7 +415,7 @@ connected in.
    -

    Parameters

    +

    Parameters

    @@ -448,15 +447,14 @@
    -

    Returns

    +

    Returns

    TRUE if you wish uridecodebin to look for elements that can handle the given caps . If FALSE, those caps will be considered as final and the pad will be exposed as such (see 'pad-added' signal of GstElement).

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -477,11 +475,11 @@ having an unhandled type media type.

    Only the signal handler that is connected first will ever by invoked. - Don't connect signal handlers with the G_CONNECT_AFTER flag to this + Don't connect signal handlers with the G_CONNECT_AFTER flag to this signal, they will never be invoked!
    -

    Parameters

    +

    Parameters

    @@ -513,13 +511,12 @@
    -

    Returns

    +

    Returns

    a GValueArray* with a list of factories to try. The factories are by default tried in the returned order or based on the index returned by "autoplug-select".

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -530,35 +527,7 @@ GstElement *arg2, GstQuery *arg3, gpointer user_data) -

    -

    -
    -

    Parameters

    -
    ----- - - - - - - - - - - - - -

    gsturidecodebin

    the object which received the signal.

     

    user_data

    user data set when the signal handler was connected.

     
    -
    -
    -

    Returns

    -

    -
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -592,7 +561,7 @@ registered next (again, if any) can override that decision.
    -

    Parameters

    +

    Parameters

    @@ -629,13 +598,12 @@
    -

    Returns

    +

    Returns

    a GST_TYPE_AUTOPLUG_SELECT_RESULT that indicates the required operation. The default handler will always return GST_AUTOPLUG_SELECT_TRY.

    -

    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -659,11 +627,11 @@ Invocation of signal handlers stops after one signal handler has returned something else than NULL. Signal handlers are invoked in the order they were connected in. - Don't connect signal handlers with the G_CONNECT_AFTER flag to this + Don't connect signal handlers with the G_CONNECT_AFTER flag to this signal, they will never be invoked!
    -

    Parameters

    +

    Parameters

    @@ -700,12 +668,11 @@
    -

    Returns

    +

    Returns

    A new sorted array of GstElementFactory objects.

    -

    -

    Flags: Run Last

    -

    Since 0.10.33

    +

    Flags: Run Last

    +

    Since: 0.10.33


    @@ -715,7 +682,7 @@ gpointer user_data)

    This signal is emitted when the data for the current uri is played.

    -

    Parameters

    +

    Parameters

    @@ -729,7 +696,7 @@
    -

    Flags: Run Last

    +

    Flags: Run Last


    @@ -744,7 +711,7 @@ an audio cd source). This is functionally equivalent to connecting to the notify::source signal, but more convenient.

    -

    Parameters

    +

    Parameters

    @@ -770,8 +737,8 @@
    -

    Flags: Run Last

    -

    Since 0.10.33

    +

    Flags: Run Last

    +

    Since: 0.10.33


    @@ -784,7 +751,7 @@

    This signal is emitted when a pad for which there is no further possible decoding is added to the uridecodebin.

    -

    Parameters

    +

    Parameters

    @@ -816,12 +783,11 @@
    -

    Flags: Run Last

    +

    Flags: Run Last

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videoconvert +videoconvert: GStreamer Base Plugins 1.0 Plugins Reference Manual - - - + + + @@ -21,15 +21,15 @@ Home Up -Prev -Next +Prev +Next

    videoconvert

    -

    videoconvert — Converts video from one colorspace to another

    +

    videoconvert

    @@ -41,11 +41,53 @@ - -GstVideoConvertDitherMethod + + +GstVideoDitherMethod dither Read / Write - + + +GstVideoAlphaMode +alpha-mode +Read / Write + + +gdouble +alpha-value +Read / Write + + +GstVideoChromaMode +chroma-mode +Read / Write + + +GstVideoResamplerMethod +chroma-resampler +Read / Write + + +guint +dither-quantization +Read / Write + + +GstVideoGammaMode +gamma-mode +Read / Write + + +GstVideoMatrixMode +matrix-mode +Read / Write + + +GstVideoPrimariesMode +primaries-mode +Read / Write + +
    @@ -76,23 +118,25 @@

    Description

    Convert video frames between a great variety of video formats.

    -

    Example launch line

    +

    Example launch line

    - +
    1
    gst-launch -v videotestsrc ! video/x-raw,format=\(string\)YUY2 ! videoconvert ! ximagesink
    gst-launch-1.0 -v videotestsrc ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink
    - + This will output a test video (generated in YUY2 format) in a video +window. If the video sink selected does not support YUY2 videoconvert will +automatically convert the video to a format understood by the video sink.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -107,7 +151,7 @@ - + @@ -118,7 +162,7 @@
    -

    Element Pads

    +

    Element Pads

    author

    GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>

    class

    @@ -139,11 +183,11 @@ - + - +

    details

    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

    video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -167,21 +211,20 @@

    details

    -video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] +video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    -

    -

    Functions

    +

    Types and Values

    @@ -195,15 +238,79 @@

    Property Details

    The “dither” property

    -
      “dither”                   GstVideoConvertDitherMethod
    +
      “dither”                   GstVideoDitherMethod

    Apply dithering while converting.

    Flags: Read / Write

    -

    Default value: No dithering (default)

    +

    Default value: GST_VIDEO_DITHER_BAYER

    +
    +
    +

    The “alpha-mode” property

    +
      “alpha-mode”               GstVideoAlphaMode
    +

    Alpha Mode to use.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_ALPHA_MODE_COPY

    +
    +
    +

    The “alpha-value” property

    +
      “alpha-value”              gdouble
    +

    Alpha Value to use.

    +

    Flags: Read / Write

    +

    Allowed values: [0,1]

    +

    Default value: 1

    +
    +
    +
    +

    The “chroma-mode” property

    +
      “chroma-mode”              GstVideoChromaMode
    +

    Chroma Resampling Mode.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_CHROMA_MODE_FULL

    +
    +
    +
    +

    The “chroma-resampler” property

    +
      “chroma-resampler”         GstVideoResamplerMethod
    +

    Chroma resampler method.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_RESAMPLER_METHOD_LINEAR

    - +
    +

    The “dither-quantization” property

    +
      “dither-quantization”      guint
    +

    Quantizer to use.

    +

    Flags: Read / Write

    +

    Default value: 1

    +
    +
    +
    +

    The “gamma-mode” property

    +
      “gamma-mode”               GstVideoGammaMode
    +

    Gamma Conversion Mode.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_GAMMA_MODE_NONE

    +
    +
    +
    +

    The “matrix-mode” property

    +
      “matrix-mode”              GstVideoMatrixMode
    +

    Matrix Conversion Mode.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_MATRIX_MODE_FULL

    +
    +
    +
    +

    The “primaries-mode” property

    +
      “primaries-mode”           GstVideoPrimariesMode
    +

    Primaries Conversion Mode.

    +

    Flags: Read / Write

    +

    Default value: GST_VIDEO_PRIMARIES_MODE_NONE

    +
    +
    + + \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videorate.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videorate.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videorate.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videorate.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videorate +videorate: GStreamer Base Plugins 1.0 Plugins Reference Manual - + - + @@ -21,7 +21,7 @@ Home Up -Prev +Prev Next
    @@ -29,7 +29,7 @@

    videorate

    -

    videorate — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream

    +

    videorate

    @@ -145,36 +145,47 @@ Note that property notification will happen from the streaming thread, so applications should be prepared for this.

    -

    Example pipelines

    +

    Example pipelines

    - +
    1
    gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videorate ! video/x-raw,framerate=15/1 ! xvimagesink
    gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! autovideosink
    - Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing. -To create the test Ogg/Theora file refer to the documentation of theoraenc. + Decode a video file and adjust the framerate to 15 fps before playing. +To create a test Ogg/Theora file refer to the documentation of theoraenc.
    - +
    1
    gst-launch -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
    gst-launch-1.0 -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
    Capture video from a V4L device, and adjust the stream to 12.5 fps before encoding to Ogg/Theora. +
    + + + + + + + +
    1
    gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=1/5 ! jpegenc ! multifilesink location=snapshot-%05d.jpg
    +
    + Decode a video file and save a snapshot every 5 seconds as consecutively numbered jpeg file.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -200,7 +211,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -221,15 +232,19 @@ - + + + + + - + - +

    details

    video/x-rawvideo/x-raw(ANY)

    video/x-bayer(ANY)

    image/jpeg image/jpeg(ANY)

    image/png image/png(ANY)
    @@ -253,25 +268,28 @@

    details

    -video/x-raw +video/x-raw(ANY)

    - image/jpeg + video/x-bayer(ANY)

    - image/png + image/jpeg(ANY) + + +

    + image/png(ANY)
    -

    -

    Functions

    +

    Types and Values

    @@ -370,7 +388,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videoscale.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videoscale.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videoscale.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videoscale.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videoscale +videoscale: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    videoscale

    -

    videoscale — Resizes video

    +

    videoscale

    @@ -72,6 +72,11 @@ sharpness Read / Write / Construct + +gboolean +gamma-decode +Read / Write / Construct + @@ -115,38 +120,37 @@ RGB formats and is therefore generally able to operate anywhere in a pipeline.

    -

    Example pipelines

    +

    Example pipelines

    - +
    1
    gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! ximagesink
    gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! autovideosink
    - Decode an Ogg/Theora and display the video using ximagesink. Since -ximagesink cannot perform scaling, the video scaling will be performed by -videoscale when you resize the video window. + Decode an Ogg/Theora and display the video. If the video sink chosen +cannot perform scaling, the video scaling will be performed by videoscale +when you resize the video window. To create the test Ogg/Theora file refer to the documentation of theoraenc.
    - +
    1
    gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw, width=50 ! xvimagesink
    gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! video/x-raw,width=100 ! autovideosink
    - Decode an Ogg/Theora and display the video using xvimagesink with a width -of 50. + Decode an Ogg/Theora and display the video with a width of 100.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -161,7 +165,7 @@ - + @@ -172,7 +176,7 @@
    -

    Element Pads

    +

    Element Pads

    author

    Wim Taymans <wim.taymans@chello.be>Wim Taymans <wim.taymans@gmail.com>

    class

    @@ -193,11 +197,11 @@ - + - +

    details

    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

    video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ] video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -221,21 +225,20 @@

    details

    -video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ] +video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

    - video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ] + video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    -

    -

    Functions

    +

    Types and Values

    @@ -249,7 +252,7 @@

    enum GstVideoScaleMethod

    The videoscale method to use.

    -

    Members

    +

    Members

    @@ -267,14 +270,14 @@ @@ -285,6 +288,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    GST_VIDEO_SCALE_BILINEAR

    -

    use bilinear scaling (slower but prettier).

    +

    use 2-tap bilinear scaling (slower but prettier).

     

    GST_VIDEO_SCALE_4TAP

    -

    use a 4-tap filter for scaling (slow).

    +

    use a 4-tap sinc filter for scaling (slow).

     
     

    GST_VIDEO_SCALE_BILINEAR2

    +

    use a multitap bilinear filter

    +
     

    GST_VIDEO_SCALE_SINC

    +

    use a multitap sinc filter

    +
     

    GST_VIDEO_SCALE_HERMITE

    +

    use a multitap bicubic Hermite filter

    +
     

    GST_VIDEO_SCALE_SPLINE

    +

    use a multitap bicubic spline filter

    +
     

    GST_VIDEO_SCALE_CATROM

    +

    use a multitap bicubic Catmull-Rom filter

    +
     

    GST_VIDEO_SCALE_MITCHELL

    +

    use a multitap bicubic Mitchell filter

    +
     
    @@ -322,7 +367,7 @@
      “method”                   GstVideoScaleMethod

    method.

    Flags: Read / Write

    -

    Default value: Bilinear

    +

    Default value: Bilinear (2-tap)


    @@ -342,6 +387,14 @@

    Allowed values: [0.5,1.5]

    Default value: 1

    +
    +
    +

    The “gamma-decode” property

    +
      “gamma-decode”             gboolean
    +

    Decode gamma before scaling.

    +

    Flags: Read / Write / Construct

    +

    Default value: FALSE

    +

    See Also

    @@ -349,7 +402,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: videotestsrc +videotestsrc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    videotestsrc

    -

    videotestsrc — Creates a test video stream

    +

    videotestsrc

    @@ -171,23 +171,23 @@ of formats. The video test data produced can be controlled with the "pattern" property.

    -

    Example launch line

    +

    Example launch line

    - +
    1
    gst-launch -v videotestsrc pattern=snow ! ximagesink
    gst-launch-1.0 -v videotestsrc pattern=snow ! video/x-raw,width=1280,height=720 ! autovideosink
    - Shows random noise in an X window. + Shows random noise in a video window.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -213,7 +213,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -234,7 +234,7 @@ - + @@ -244,11 +244,10 @@

    details

    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]

    -

    -

    Functions

    +

    Types and Values

    @@ -277,7 +276,7 @@ pattern=zone-plate kx2=20 ky2=20 kt=1' to produce something interesting.

    -

    Members

    +

    Members

    @@ -406,7 +405,10 @@ - + @@ -444,6 +446,20 @@ + + + + + + + + + +

    GST_VIDEO_TEST_SRC_SOLID

      +

    A solid color, defined by the +“foreground-color” property

    +
     
     

    GST_VIDEO_TEST_SRC_GRADIENT

    +

    Gradient

    +
     

    GST_VIDEO_TEST_SRC_COLORS

    +

    All colors

    +
     
    @@ -578,6 +594,7 @@
      “timestamp-offset”         gint64

    An offset added to timestamps set on buffers (in ns).

    Flags: Read / Write

    +

    Allowed values: >= 0

    Default value: 0


    @@ -599,7 +616,6 @@ +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-volume.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-volume.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-volume.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-volume.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: volume +volume: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    volume

    -

    volume — Set volume on audio/raw streams

    +

    volume

    @@ -90,13 +90,13 @@

    Description

    The volume element changes the volume of the audio data.

    -

    Example launch line

    +

    Example launch line

    - +
    1
    gst-launch -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
    gst-launch-1.0 -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
    @@ -108,7 +108,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -134,7 +134,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -185,11 +185,10 @@
    -

    -

    Functions

    +

    Types and Values

    @@ -220,7 +219,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisdec +vorbisdec: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -28,7 +28,7 @@

    vorbisdec

    -

    vorbisdec — decode raw vorbis streams to float audio

    +

    vorbisdec

    @@ -60,7 +60,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -86,7 +86,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -137,24 +137,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstVorbisDec

    struct GstVorbisDec;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisenc +vorbisenc: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    vorbisenc

    -

    vorbisenc — Encodes audio in Vorbis format

    +

    vorbisenc

    @@ -111,7 +111,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -137,7 +137,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -158,7 +158,39 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    details

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 255 ]audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)1

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)2, channel-mask=(bitmask)0x0000000000000003

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)3, channel-mask=(bitmask)0x0000000000000007

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)4, channel-mask=(bitmask)0x0000000000000033

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)5, channel-mask=(bitmask)0x0000000000000037

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)6, channel-mask=(bitmask)0x000000000000003f

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)7, channel-mask=(bitmask)0x0000000000000d0f

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f

    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 9, 255 ], channel-mask=(bitmask)0x0000000000000000
    @@ -188,19 +220,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstVorbisEnc

    struct GstVorbisEnc;
    -

    -

    @@ -259,7 +288,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisparse +vorbisparse: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -28,7 +28,7 @@

    vorbisparse

    -

    vorbisparse — parse raw vorbis streams

    +

    vorbisparse

    @@ -60,7 +60,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -86,7 +86,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -137,24 +137,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstVorbisParse

    struct GstVorbisParse;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbistag +vorbistag: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -29,7 +29,7 @@

    vorbistag

    -

    vorbistag — Retags vorbis streams

    +

    vorbistag

    @@ -67,7 +67,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -93,7 +93,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -144,24 +144,20 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstVorbisTag

    struct GstVorbisTag;
    -

    -

    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: ximagesink +ximagesink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    ximagesink

    -

    ximagesink — A standard X based videosink

    +

    ximagesink

    @@ -123,7 +123,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -149,7 +149,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -176,19 +176,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstXImageSink

    struct GstXImageSink;
    -

    -

    @@ -259,7 +256,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html 2015-10-30 14:21:43.000000000 +0000 @@ -2,13 +2,13 @@ -GStreamer Base Plugins 1.0 Plugins Reference Manual: xvimagesink +xvimagesink: GStreamer Base Plugins 1.0 Plugins Reference Manual - + @@ -30,7 +30,7 @@

    xvimagesink

    -

    xvimagesink — A Xv based videosink

    +

    xvimagesink

    @@ -175,7 +175,7 @@

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -201,7 +201,7 @@
    -

    Element Pads

    +

    Element Pads

    @@ -228,19 +228,16 @@
    -

    -

    Functions

    +

    Types and Values

    struct GstXvImageSink

    struct GstXvImageSink;
    -

    -

    @@ -395,7 +392,6 @@
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/index.html gst-plugins-base1.0-1.6.1/docs/plugins/html/index.html --- gst-plugins-base1.0-1.4.3/docs/plugins/html/index.html 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/index.html 2015-10-30 14:21:43.000000000 +0000 @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@

    - for GStreamer Base Plugins 1.0 (1.4.3) + for GStreamer Base Plugins 1.0 (1.6.1) The latest version of this documentation can be found on-line at http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/.

    @@ -26,232 +26,258 @@
    gst-plugins-base Elements
    -adder — Add N audio channels together +adder
    -appsrc — Allow the application to feed buffers to a pipeline +alsasink
    -appsink — Allow the application to get access to raw buffer +alsasrc
    -alsasink — Output to a sound card via ALSA +appsink
    -alsasrc — Read from a sound card via ALSA +appsrc
    -audioconvert — Convert audio to different formats +audioconvert
    -audiorate — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream +audiorate
    -audioresample — Resamples audio +audioresample
    -audiotestsrc — Creates audio test signals of given frequency and volume +audiotestsrc
    -cdparanoiasrc — Read audio from CD in paranoid mode +cdparanoiasrc
    -clockoverlay — Overlays the current clock time on a video stream +clockoverlay
    -decodebin — Autoplug and decode to raw media +decodebin
    -encodebin — Convenience encoding/muxing element +encodebin
    -videoconvert — Converts video from one colorspace to another +giosink
    -giosink — Write to any GIO-supported location +giosrc
    -giosrc — Read from any GIO-supported location +giostreamsink
    -giostreamsink — Write to any GIO stream +giostreamsrc
    -giostreamsrc — Read from any GIO stream +multifdsink
    -multifdsink — Send data to multiple filedescriptors +multisocketsink
    -multisocketsink — Send data to multiple sockets +oggaviparse
    -oggdemux — demux ogg streams (info about ogg: http://xiph.org) +oggdemux
    -oggmux — mux ogg streams (info about ogg: http://xiph.org) +oggmux
    -playbin — Autoplug and play media from an uri +oggparse
    -playsink — Convenience sink for multiple streams +ogmaudioparse
    -streamsynchronizer — Synchronizes a group of streams to have equal durations and starting points +ogmtextparse
    -subtitleoverlay — Overlays a video stream with subtitles +ogmvideoparse
    -tcpclientsrc — Receive data as a client over the network via TCP +playbin
    -tcpclientsink — Send data as a client over the network via TCP +playsink
    -tcpserversrc — Receive data as a server over the network via TCP +socketsrc
    -tcpserversink — Send data as a server over the network via TCP +ssaparse
    -textoverlay — Adds text strings on top of a video buffer +streamsynchronizer
    -textrender — Renders a text string to an image bitmap +subparse
    -theoradec — decode raw theora streams to raw YUV video +subtitleoverlay
    -theoraenc — encode raw YUV video to a theora stream +tcpclientsink
    -theoraparse — parse raw theora streams +tcpclientsrc
    -timeoverlay — Overlays buffer time stamps on a video stream +tcpserversink
    -uridecodebin — Autoplug and decode an URI to raw media +tcpserversrc
    -videorate — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream +textoverlay
    -videoscale — Resizes video +textrender
    -videotestsrc — Creates a test video stream +theoradec
    -volume — Set volume on audio/raw streams +theoraenc
    -vorbisdec — decode raw vorbis streams to float audio +theoraparse
    -vorbisenc — Encodes audio in Vorbis format +timeoverlay
    -vorbisparse — parse raw vorbis streams +uridecodebin
    -vorbistag — Retags vorbis streams +videoconvert
    -ximagesink — A standard X based videosink +videorate
    -xvimagesink — A Xv based videosink +videoscale +
    +
    +videotestsrc +
    +
    +volume +
    +
    +vorbisdec +
    +
    +vorbisenc +
    +
    +vorbisparse +
    +
    +vorbistag +
    +
    +ximagesink +
    +
    +xvimagesink
    gst-plugins-base Plugins
    -adderAdds multiple streams +adder — Adds multiple streams +
    +
    +alsa — ALSA plugin library
    -alsaALSA plugin library +app — Elements used to communicate with applications
    -appElements used to communicate with applications +audioconvert — Convert audio to different formats
    -audioconvertConvert audio to different formats +audiorate — Adjusts audio frames
    -audiorateAdjusts audio frames +audioresample — Resamples audio
    -audioresampleResamples audio +audiotestsrc — Creates audio test signals of given frequency and volume
    -audiotestsrcCreates audio test signals of given frequency and volume +cdparanoia — Read audio from CD in paranoid mode
    -cdparanoiaRead audio from CD in paranoid mode +encoding — various encoding-related elements
    -encodingvarious encoding-related elements +gio — GIO elements
    -videoconvertColorspace conversion +ivorbisdec — Vorbis Tremor decoder
    -gioGIO elements +libvisual — libvisual visualization plugins
    -libvisuallibvisual visualization plugins +ogg — ogg stream manipulation (info about ogg: http://xiph.org)
    -oggogg stream manipulation (info about ogg: http://xiph.org) +pango — Pango-based text rendering and overlay
    -pangoPango-based text rendering and overlay +playback — various playback elements
    -playbackvarious playback elements +subparse — Subtitle parsing
    -subparseSubtitle parsing +tcp — transfer data over the network via TCP
    -tcptransfer data over the network via TCP +theora — Theora plugin library
    -theoraTheora plugin library +typefindfunctions — default typefind functions
    -typefindfunctionsdefault typefind functions +videoconvert — Colorspace conversion
    -videorateAdjusts video frames +videorate — Adjusts video frames
    -videoscaleResizes video +videoscale — Resizes video
    -videotestsrcCreates a test video stream +videotestsrc — Creates a test video stream
    -volumeplugin for controlling audio volume +volume — plugin for controlling audio volume
    -vorbisVorbis plugin library +vorbis — Vorbis plugin library
    -ximagesinkX11 video output element based on standard Xlib calls +ximagesink — X11 video output element based on standard Xlib calls
    -xvimagesinkXFree86 video output plugin using Xv extension +xvimagesink — XFree86 video output plugin using Xv extension
    +
    Generated by GTK-Doc V1.24 \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/index.sgml gst-plugins-base1.0-1.6.1/docs/plugins/html/index.sgml --- gst-plugins-base1.0-1.4.3/docs/plugins/html/index.sgml 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/index.sgml 2015-10-30 14:21:43.000000000 +0000 @@ -11,6 +11,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -41,55 +90,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -100,7 +101,16 @@ + + + + + + + + + @@ -145,6 +155,19 @@ + + + + + + + + + + + + + @@ -239,17 +262,6 @@ - - - - - - - - - - - @@ -311,8 +323,25 @@ + + + + + + + + + + + + + + + + + @@ -335,8 +364,25 @@ + + + + + + + + + + + + + + + + + @@ -347,6 +393,10 @@ + + + + @@ -370,6 +420,22 @@ + + + + + + + + + + + + + + + + @@ -382,6 +448,18 @@ + + + + + + + + + + + + @@ -415,6 +493,8 @@ + + @@ -461,6 +541,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -469,6 +572,18 @@ + + + + + + + + + + + + @@ -483,19 +598,6 @@ - - - - - - - - - - - - - @@ -509,20 +611,19 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -537,6 +638,20 @@ + + + + + + + + + + + + + + @@ -579,6 +694,10 @@ + + + + @@ -602,6 +721,7 @@ + @@ -609,6 +729,12 @@ + + + + + + @@ -621,6 +747,9 @@ + + + @@ -642,6 +771,25 @@ + + + + + + + + + + + + + + + + + + + @@ -672,6 +820,16 @@ + + + + + + + + + + @@ -679,6 +837,7 @@ + @@ -690,6 +849,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -830,10 +1014,10 @@ - - + + @@ -850,6 +1034,8 @@ + + diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/html/style.css gst-plugins-base1.0-1.6.1/docs/plugins/html/style.css --- gst-plugins-base1.0-1.4.3/docs/plugins/html/style.css 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/html/style.css 2015-10-30 14:21:43.000000000 +0000 @@ -60,7 +60,7 @@ div.informaltable table { border-collapse: separate; - border-spacing: 1em 0.5em; + border-spacing: 1em 0.3em; border: none; } @@ -148,6 +148,8 @@ h4 { color: #555753; + margin-top: 1em; + margin-bottom: 1em; } hr @@ -166,17 +168,16 @@ padding-bottom: 0.25em; } -dl.toc > dd > dl > dt +dl.toc > dt { padding-top: 0.25em; padding-bottom: 0.25em; + font-weight: bold; } -dl.toc > dt +dl.toc > dl { - padding-top: 1em; padding-bottom: 0.5em; - font-weight: bold; } .parameter @@ -346,7 +347,9 @@ } @media screen { - sup a.footnote + /* these have a as a first child, but since there are no parent selectors + * we can't use that. */ + a.footnote { position: relative; top: 0em ! important; diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-adder.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-adder.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-adder.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-adder.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Adds multiple streams ../../gst/adder/.libs/libgstadder.so libgstadder.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-alsa.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-alsa.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-alsa.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-alsa.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ ALSA plugin library ../../ext/alsa/.libs/libgstalsa.so libgstalsa.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-app.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-app.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-app.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-app.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Elements used to communicate with applications ../../gst/app/.libs/libgstapp.so libgstapp.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audioconvert.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioconvert.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audioconvert.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioconvert.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Convert audio to different formats ../../gst/audioconvert/.libs/libgstaudioconvert.so libgstaudioconvert.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audiorate.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiorate.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audiorate.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiorate.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Adjusts audio frames ../../gst/audiorate/.libs/libgstaudiorate.so libgstaudiorate.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audioresample.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioresample.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audioresample.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audioresample.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Resamples audio ../../gst/audioresample/.libs/libgstaudioresample.so libgstaudioresample.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audiotestsrc.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiotestsrc.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-audiotestsrc.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-audiotestsrc.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Creates audio test signals of given frequency and volume ../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so libgstaudiotestsrc.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-cdparanoia.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-cdparanoia.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-cdparanoia.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-cdparanoia.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Read audio from CD in paranoid mode ../../ext/cdparanoia/.libs/libgstcdparanoia.so libgstcdparanoia.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-encoding.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-encoding.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-encoding.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-encoding.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ various encoding-related elements ../../gst/encoding/.libs/libgstencodebin.so libgstencodebin.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-gio.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-gio.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-gio.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-gio.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ GIO elements ../../gst/gio/.libs/libgstgio.so libgstgio.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ivorbisdec.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ivorbisdec.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ivorbisdec.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ivorbisdec.xml 2015-10-22 08:01:34.000000000 +0000 @@ -3,7 +3,7 @@ Vorbis Tremor decoder ../../ext/vorbis/.libs/libgstivorbisdec.so libgstivorbisdec.so - 1.4.3 + 1.4.0 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-libvisual.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-libvisual.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-libvisual.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-libvisual.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ libvisual visualization plugins ../../ext/libvisual/.libs/libgstlibvisual.so libgstlibvisual.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ogg.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ogg.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ogg.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ogg.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ ogg stream manipulation (info about ogg: http://xiph.org) ../../ext/ogg/.libs/libgstogg.so libgstogg.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -110,7 +110,7 @@ OGM audio stream parser Codec/Decoder/Audio parse an OGM audio header and stream - GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink @@ -131,7 +131,7 @@ OGM text stream parser Codec/Decoder/Subtitle parse an OGM text header and stream - GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink @@ -152,7 +152,7 @@ OGM video stream parser Codec/Decoder/Video parse an OGM video header and stream - GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-pango.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-pango.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-pango.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-pango.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Pango-based text rendering and overlay ../../ext/pango/.libs/libgstpango.so libgstpango.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -20,13 +20,13 @@ video_sink sink always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    src source always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -47,13 +47,13 @@ video_sink sink always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    src source always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    @@ -62,7 +62,7 @@ Text renderer Filter/Editor/Video Renders a text string to an image bitmap - David Schleef <ds@schleef.org>, GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + David Schleef <ds@schleef.org>, GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink @@ -89,13 +89,13 @@ video_sink sink always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    src source always -
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-playback.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-playback.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-playback.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-playback.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ various playback elements ../../gst/playback/.libs/libgstplayback.so libgstplayback.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-subparse.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-subparse.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-subparse.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-subparse.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Subtitle parsing ../../gst/subparse/.libs/libgstsubparse.so libgstsubparse.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -35,7 +35,7 @@ Subtitle parser Codec/Parser/Subtitle Parses subtitle (.sub) files into text streams - Gustavo J. A. M. Carneiro <gjc@inescporto.pt>, GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + Gustavo J. A. M. Carneiro <gjc@inescporto.pt>, GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-tcp.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-tcp.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-tcp.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-tcp.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ transfer data over the network via TCP ../../gst/tcp/.libs/libgsttcp.so libgsttcp.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -37,6 +37,21 @@ always
    ANY
    +
    +
    + + socketsrc + socket source + Source/Network + Receive data from a socket + Thomas Vander Stichele <thomas at apestaart dot org>, William Manley <will@williammanley.net> + + + src + source + always +
    ANY
    +
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-theora.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-theora.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-theora.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-theora.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Theora plugin library ../../ext/theora/.libs/libgsttheora.so libgsttheora.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-typefindfunctions.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-typefindfunctions.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-typefindfunctions.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-typefindfunctions.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ default typefind functions ../../gst/typefind/.libs/libgsttypefindfunctions.so libgsttypefindfunctions.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videoconvert.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoconvert.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videoconvert.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoconvert.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Colorspace conversion ../../gst/videoconvert/.libs/libgstvideoconvert.so libgstvideoconvert.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -14,19 +14,19 @@ Colorspace converter Filter/Converter/Video Converts video from one colorspace to another - GStreamer maintainers <gstreamer-devel@lists.sourceforge.net> + GStreamer maintainers <gstreamer-devel@lists.freedesktop.org> sink sink always -
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    src source always -
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videorate.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videorate.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videorate.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videorate.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Adjusts video frames ../../gst/videorate/.libs/libgstvideorate.so libgstvideorate.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -20,13 +20,13 @@ sink sink always -
    video/x-raw; image/jpeg; image/png
    +
    video/x-raw(ANY); video/x-bayer(ANY); image/jpeg(ANY); image/png(ANY)
    src source always -
    video/x-raw; image/jpeg; image/png
    +
    video/x-raw(ANY); video/x-bayer(ANY); image/jpeg(ANY); image/png(ANY)
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videoscale.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoscale.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videoscale.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videoscale.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Resizes video ../../gst/videoscale/.libs/libgstvideoscale.so libgstvideoscale.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -14,19 +14,19 @@ Video scaler Filter/Converter/Video/Scaler Resizes video - Wim Taymans <wim.taymans@chello.be> + Wim Taymans <wim.taymans@gmail.com> sink sink always -
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    src source always -
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videotestsrc.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videotestsrc.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-videotestsrc.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-videotestsrc.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Creates a test video stream ../../gst/videotestsrc/.libs/libgstvideotestsrc.so libgstvideotestsrc.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -20,7 +20,7 @@ src source always -
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-bayer, format=(string){ bggr, rggb, grbg, gbrg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    +
    video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-bayer, format=(string){ bggr, rggb, grbg, gbrg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
    diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-volume.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-volume.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-volume.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-volume.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ plugin for controlling audio volume ../../gst/volume/.libs/libgstvolume.so libgstvolume.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-vorbis.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-vorbis.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-vorbis.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-vorbis.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ Vorbis plugin library ../../ext/vorbis/.libs/libgstvorbis.so libgstvorbis.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release @@ -41,7 +41,7 @@ sink sink always -
    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 255 ]
    +
    audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)1; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)2, channel-mask=(bitmask)0x0000000000000003; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)3, channel-mask=(bitmask)0x0000000000000007; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)4, channel-mask=(bitmask)0x0000000000000033; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)5, channel-mask=(bitmask)0x0000000000000037; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)6, channel-mask=(bitmask)0x000000000000003f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)7, channel-mask=(bitmask)0x0000000000000d0f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 9, 255 ], channel-mask=(bitmask)0x0000000000000000
    src diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ximagesink.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ximagesink.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-ximagesink.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-ximagesink.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ X11 video output element based on standard Xlib calls ../../sys/ximage/.libs/libgstximagesink.so libgstximagesink.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-xvimagesink.xml gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-xvimagesink.xml --- gst-plugins-base1.0-1.4.3/docs/plugins/inspect/plugin-xvimagesink.xml 2014-09-24 08:19:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/inspect/plugin-xvimagesink.xml 2015-10-30 14:21:38.000000000 +0000 @@ -3,7 +3,7 @@ XFree86 video output plugin using Xv extension ../../sys/xvimage/.libs/libgstxvimagesink.so libgstxvimagesink.so - 1.4.3 + 1.6.1 LGPL gst-plugins-base GStreamer Base Plug-ins source release diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/Makefile.am gst-plugins-base1.0-1.6.1/docs/plugins/Makefile.am --- gst-plugins-base1.0-1.4.3/docs/plugins/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -80,6 +80,7 @@ $(top_srcdir)/gst/audiorate/gstaudiorate.h \ $(top_srcdir)/gst/audioresample/gstaudioresample.h \ $(top_srcdir)/gst/tcp/gstmultisocketsink.h \ + $(top_srcdir)/gst/tcp/gstsocketsrc.h \ $(top_srcdir)/gst/tcp/gsttcpclientsrc.h \ $(top_srcdir)/gst/tcp/gsttcpclientsink.h \ $(top_srcdir)/gst/tcp/gsttcpserversrc.h \ @@ -108,9 +109,6 @@ GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs GTKDOC_LIBS = $(GST_BASE_LIBS) -GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC) - # If you need to override some of the declarations, place them in this file DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt diff -Nru gst-plugins-base1.0-1.4.3/docs/plugins/Makefile.in gst-plugins-base1.0-1.6.1/docs/plugins/Makefile.in --- gst-plugins-base1.0-1.4.3/docs/plugins/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/docs/plugins/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -31,7 +31,17 @@ # This is an include file specifically tuned for building documentation # for GStreamer plug-ins VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -95,9 +105,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/upload-doc.mak \ - $(top_srcdir)/common/gtk-doc-plugins.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am subdir = docs/plugins ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -119,7 +126,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -136,6 +142,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -160,6 +167,9 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gtk-doc-plugins.mak \ + $(top_srcdir)/common/upload-doc.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -220,6 +230,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -249,6 +261,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -276,7 +290,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -291,6 +304,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -380,13 +394,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -439,6 +452,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -534,6 +548,7 @@ $(top_srcdir)/gst/audiorate/gstaudiorate.h \ $(top_srcdir)/gst/audioresample/gstaudioresample.h \ $(top_srcdir)/gst/tcp/gstmultisocketsink.h \ + $(top_srcdir)/gst/tcp/gstsocketsrc.h \ $(top_srcdir)/gst/tcp/gsttcpclientsrc.h \ $(top_srcdir)/gst/tcp/gsttcpclientsink.h \ $(top_srcdir)/gst/tcp/gsttcpserversrc.h \ @@ -562,11 +577,15 @@ # contains GtkObjects/GObjects and you want to document signals and properties. GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs GTKDOC_LIBS = $(GST_BASE_LIBS) -GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) -GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) # If you need to override some of the declarations, place them in this file DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) +@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = +@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to @@ -596,11 +615,9 @@ # maintainers and result is commited to git DOC_STAMPS = \ scan-build.stamp \ - tmpl-build.stamp \ sgml-build.stamp \ html-build.stamp \ scan.stamp \ - tmpl.stamp \ sgml.stamp \ html.stamp @@ -669,7 +686,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu docs/plugins/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -678,7 +694,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak: +$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -849,6 +865,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-local +.PRECIOUS: Makefile + html: html-build.stamp upload: $(FORMATS) @@ -936,7 +954,7 @@ @ENABLE_GTK_DOC_TRUE@ scanobj_options="--verbose"; \ @ENABLE_GTK_DOC_TRUE@ fi; \ @ENABLE_GTK_DOC_TRUE@ $(INSPECT_ENVIRONMENT) \ -@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" \ +@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" \ @ENABLE_GTK_DOC_TRUE@ CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ @ENABLE_GTK_DOC_TRUE@ $(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)" \ @@ -975,29 +993,9 @@ @ENABLE_GTK_DOC_TRUE@ --ignore-headers="$(IGNORE_HFILES)"; \ @ENABLE_GTK_DOC_TRUE@ touch scan-build.stamp -#### update templates; done on every build #### - -# in a non-srcdir build, we need to copy files from the previous step -# and the files from previous runs of this step -@ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES) -@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Rebuilding template files' -@ENABLE_GTK_DOC_TRUE@ @if test x"$(srcdir)" != x. ; then \ -@ENABLE_GTK_DOC_TRUE@ for f in $(SCANOBJ_FILES) $(SCAN_FILES); \ -@ENABLE_GTK_DOC_TRUE@ do \ -@ENABLE_GTK_DOC_TRUE@ if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi; \ -@ENABLE_GTK_DOC_TRUE@ done; \ -@ENABLE_GTK_DOC_TRUE@ fi -@ENABLE_GTK_DOC_TRUE@ @gtkdoc-mktmpl --module=$(DOC_MODULE) -@ENABLE_GTK_DOC_TRUE@ @$(PYTHON) \ -@ENABLE_GTK_DOC_TRUE@ $(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl -@ENABLE_GTK_DOC_TRUE@ @touch tmpl-build.stamp - -@ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp -@ENABLE_GTK_DOC_TRUE@ @true - #### xml #### -@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) +@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files) @ENABLE_GTK_DOC_TRUE@ @echo ' DOC Building XML' @ENABLE_GTK_DOC_TRUE@ @-mkdir -p xml @ENABLE_GTK_DOC_TRUE@ @for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \ @@ -1013,6 +1011,7 @@ @ENABLE_GTK_DOC_TRUE@ --output-format=xml \ @ENABLE_GTK_DOC_TRUE@ --ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \ @ENABLE_GTK_DOC_TRUE@ $(MKDB_OPTIONS) +@ENABLE_GTK_DOC_TRUE@ @$(PYTHON) $(top_srcdir)/common/mangle-db.py xml @ENABLE_GTK_DOC_TRUE@ @cp ../version.entities xml @ENABLE_GTK_DOC_TRUE@ @touch sgml-build.stamp diff -Nru gst-plugins-base1.0-1.4.3/ext/alsa/gstalsa.c gst-plugins-base1.0-1.6.1/ext/alsa/gstalsa.c --- gst-plugins-base1.0-1.4.3/ext/alsa/gstalsa.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/alsa/gstalsa.c 2015-10-22 08:01:34.000000000 +0000 @@ -149,7 +149,8 @@ finfo = gst_audio_format_get_info (format); - if (GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != endianness) + if (GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != endianness + && GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != 0) return FALSE; pcm_format = gst_alsa_get_pcm_format (format); @@ -713,38 +714,40 @@ #define ITEM(x, y) \ [SND_CHMAP_ ## x] = GST_AUDIO_CHANNEL_POSITION_ ## y + 1 -static GstAudioChannelPosition gst_pos[SND_CHMAP_LAST + 1] = { - ITEM(MONO, MONO), - ITEM(FL, FRONT_LEFT), - ITEM(FR, FRONT_RIGHT), - ITEM(FC, FRONT_CENTER), - ITEM(RL, REAR_LEFT), - ITEM(RR, REAR_RIGHT), - ITEM(RC, REAR_CENTER), - ITEM(LFE, LFE1), - ITEM(SL, SIDE_LEFT), - ITEM(SR, SIDE_RIGHT), - ITEM(FLC, FRONT_LEFT_OF_CENTER), - ITEM(FRC, FRONT_RIGHT_OF_CENTER), - ITEM(FLW, WIDE_LEFT), - ITEM(FRW, WIDE_RIGHT), - ITEM(TC, TOP_CENTER), - ITEM(TFL, TOP_FRONT_LEFT), - ITEM(TFR, TOP_FRONT_RIGHT), - ITEM(TFC, TOP_FRONT_CENTER), - ITEM(TRL, TOP_REAR_LEFT), - ITEM(TRR, TOP_REAR_RIGHT), - ITEM(TRC, TOP_REAR_CENTER), - ITEM(LLFE, LFE1), - ITEM(RLFE, LFE2), - ITEM(BC, BOTTOM_FRONT_CENTER), - ITEM(BLC, BOTTOM_FRONT_LEFT), - ITEM(BRC, BOTTOM_FRONT_LEFT), +static const GstAudioChannelPosition gst_pos[SND_CHMAP_LAST + 1] = { + ITEM (MONO, MONO), + ITEM (FL, FRONT_LEFT), + ITEM (FR, FRONT_RIGHT), + ITEM (FC, FRONT_CENTER), + ITEM (RL, REAR_LEFT), + ITEM (RR, REAR_RIGHT), + ITEM (RC, REAR_CENTER), + ITEM (LFE, LFE1), + ITEM (SL, SIDE_LEFT), + ITEM (SR, SIDE_RIGHT), + ITEM (FLC, FRONT_LEFT_OF_CENTER), + ITEM (FRC, FRONT_RIGHT_OF_CENTER), + ITEM (FLW, WIDE_LEFT), + ITEM (FRW, WIDE_RIGHT), + ITEM (TC, TOP_CENTER), + ITEM (TFL, TOP_FRONT_LEFT), + ITEM (TFR, TOP_FRONT_RIGHT), + ITEM (TFC, TOP_FRONT_CENTER), + ITEM (TRL, TOP_REAR_LEFT), + ITEM (TRR, TOP_REAR_RIGHT), + ITEM (TRC, TOP_REAR_CENTER), + ITEM (LLFE, LFE1), + ITEM (RLFE, LFE2), + ITEM (BC, BOTTOM_FRONT_CENTER), + ITEM (BLC, BOTTOM_FRONT_LEFT), + ITEM (BRC, BOTTOM_FRONT_LEFT), }; + #undef ITEM -gboolean alsa_chmap_to_channel_positions (const snd_pcm_chmap_t *chmap, - GstAudioChannelPosition *pos) +gboolean +alsa_chmap_to_channel_positions (const snd_pcm_chmap_t * chmap, + GstAudioChannelPosition * pos) { int c; diff -Nru gst-plugins-base1.0-1.4.3/ext/alsa/gstalsasink.c gst-plugins-base1.0-1.6.1/ext/alsa/gstalsasink.c --- gst-plugins-base1.0-1.4.3/ext/alsa/gstalsasink.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/alsa/gstalsasink.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,13 +24,13 @@ * SECTION:element-alsasink * @see_also: alsasrc * - * This element renders raw audio samples using the ALSA api. + * This element renders raw audio samples using the ALSA audio API. * * * Example pipelines * |[ - * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! alsasink - * ]| Play an Ogg/Vorbis file. + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! autoaudiosink + * ]| Play an Ogg/Vorbis file and output audio via ALSA. * */ @@ -52,6 +52,10 @@ #include #include +#ifndef ESTRPIPE +#define ESTRPIPE EPIPE +#endif + #define DEFAULT_DEVICE "default" #define DEFAULT_DEVICE_NAME "" #define DEFAULT_CARD_NAME "" @@ -982,7 +986,7 @@ static gint xrun_recovery (GstAlsaSink * alsa, snd_pcm_t * handle, gint err) { - GST_DEBUG_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err)); + GST_WARNING_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err)); if (err == -EPIPE) { /* under-run */ err = snd_pcm_prepare (handle); @@ -990,6 +994,7 @@ GST_WARNING_OBJECT (alsa, "Can't recover from underrun, prepare failed: %s", snd_strerror (err)); + gst_audio_base_sink_report_device_failure (GST_AUDIO_BASE_SINK (alsa)); return 0; } else if (err == -ESTRPIPE) { while ((err = snd_pcm_resume (handle)) == -EAGAIN) @@ -1002,6 +1007,8 @@ "Can't recover from suspend, prepare failed: %s", snd_strerror (err)); } + if (err == 0) + gst_audio_base_sink_report_device_failure (GST_AUDIO_BASE_SINK (alsa)); return 0; } return err; @@ -1013,16 +1020,17 @@ GstAlsaSink *alsa; gint err; gint cptr; - gint16 *ptr = data; + guint8 *ptr = data; alsa = GST_ALSA_SINK (asink); if (alsa->iec958 && alsa->need_swap) { guint i; + guint16 *ptr_tmp = (guint16 *) ptr; GST_DEBUG_OBJECT (asink, "swapping bytes"); for (i = 0; i < length / 2; i++) { - ptr[i] = GUINT16_SWAP_LE_BE (ptr[i]); + ptr_tmp[i] = GUINT16_SWAP_LE_BE (ptr_tmp[i]); } } diff -Nru gst-plugins-base1.0-1.4.3/ext/alsa/gstalsasrc.c gst-plugins-base1.0-1.6.1/ext/alsa/gstalsasrc.c --- gst-plugins-base1.0-1.4.3/ext/alsa/gstalsasrc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/alsa/gstalsasrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,7 +28,7 @@ * * Example pipelines * |[ - * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg + * gst-launch-1.0 -v alsasrc ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis. * */ @@ -49,6 +49,10 @@ #include +#ifndef ESTRPIPE +#define ESTRPIPE EPIPE +#endif + #define DEFAULT_PROP_DEVICE "default" #define DEFAULT_PROP_DEVICE_NAME "" #define DEFAULT_PROP_CARD_NAME "" @@ -721,8 +725,7 @@ alsa = GST_ALSA_SRC (asrc); CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_CAPTURE, - (alsa->driver_timestamps == TRUE) ? 0 : SND_PCM_NONBLOCK), - open_error); + (alsa->driver_timestamps) ? 0 : SND_PCM_NONBLOCK), open_error); return TRUE; @@ -787,7 +790,8 @@ if (chmap && chmap->channels == alsa->channels) { GstAudioChannelPosition pos[8]; if (alsa_chmap_to_channel_positions (chmap, pos)) - gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC (alsa)->ringbuffer, pos); + gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC + (alsa)->ringbuffer, pos); } free (chmap); } @@ -861,13 +865,13 @@ static gint xrun_recovery (GstAlsaSrc * alsa, snd_pcm_t * handle, gint err) { - GST_DEBUG_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (err)); + GST_WARNING_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err)); if (err == -EPIPE) { /* under-run */ err = snd_pcm_prepare (handle); if (err < 0) GST_WARNING_OBJECT (alsa, - "Can't recovery from underrun, prepare failed: %s", + "Can't recover from underrun, prepare failed: %s", snd_strerror (err)); return 0; } else if (err == -ESTRPIPE) { @@ -878,7 +882,7 @@ err = snd_pcm_prepare (handle); if (err < 0) GST_WARNING_OBJECT (alsa, - "Can't recovery from suspend, prepare failed: %s", + "Can't recover from suspend, prepare failed: %s", snd_strerror (err)); } return 0; @@ -950,12 +954,11 @@ GstAlsaSrc *alsa; gint err; gint cptr; - gint16 *ptr; + guint8 *ptr = data; alsa = GST_ALSA_SRC (asrc); cptr = length / alsa->bpf; - ptr = data; GST_ALSA_SRC_LOCK (asrc); while (cptr > 0) { @@ -971,7 +974,7 @@ continue; } - ptr += err * alsa->channels; + ptr += snd_pcm_frames_to_bytes (alsa->handle, err); cptr -= err; } GST_ALSA_SRC_UNLOCK (asrc); diff -Nru gst-plugins-base1.0-1.4.3/ext/alsa/Makefile.in gst-plugins-base1.0-1.6.1/ext/alsa/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/alsa/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/alsa/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/alsa -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -229,6 +238,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -289,6 +299,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -318,6 +330,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -345,7 +359,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -360,6 +373,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -449,13 +463,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -508,6 +521,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -563,7 +577,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/alsa/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/alsa/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -904,6 +917,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/cdparanoia/gstcdparanoiasrc.h gst-plugins-base1.0-1.6.1/ext/cdparanoia/gstcdparanoiasrc.h --- gst-plugins-base1.0-1.4.3/ext/cdparanoia/gstcdparanoiasrc.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/cdparanoia/gstcdparanoiasrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -24,13 +24,10 @@ G_BEGIN_DECLS -#define size16 gint16 -#define size32 gint32 - /* on OSX the cdparanoia headers include IOKit framework headers (in particular * SCSICmds_INQUIRY_Definitions.h) which define a structure that has a member * named VERSION, so we must #undef VERSION here for things to compile on OSX */ -static char GST_PLUGINS_BASE_VERSION[] = VERSION; +static const char GST_PLUGINS_BASE_VERSION[] = VERSION; #undef VERSION #ifdef CDPARANOIA_HEADERS_IN_DIR @@ -46,7 +43,6 @@ #define GST_CD_PARANOIA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CD_PARANOIA_SRC,GstCdParanoiaSrcClass)) #define GST_IS_CD_PARANOIA_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CD_PARANOIA_SRC)) #define GST_IS_CD_PARANOIA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CD_PARANOIA_SRC)) -#define GST_CD_PARANOIA_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CDDA_BASAE_SRC, GstCdParanoiaSrcClass)) typedef struct _GstCdParanoiaSrc GstCdParanoiaSrc; typedef struct _GstCdParanoiaSrcClass GstCdParanoiaSrcClass; diff -Nru gst-plugins-base1.0-1.4.3/ext/cdparanoia/Makefile.in gst-plugins-base1.0-1.6.1/ext/cdparanoia/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/cdparanoia/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/cdparanoia/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/cdparanoia -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -229,6 +238,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -289,6 +299,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -318,6 +330,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -345,7 +359,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -360,6 +373,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -449,13 +463,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -508,6 +521,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -553,7 +567,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/cdparanoia/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/cdparanoia/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -862,6 +875,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/libvisual/gstaudiovisualizer.c gst-plugins-base1.0-1.6.1/ext/libvisual/gstaudiovisualizer.c --- gst-plugins-base1.0-1.4.3/ext/libvisual/gstaudiovisualizer.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/libvisual/gstaudiovisualizer.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,21 +1,23 @@ /* GStreamer * Copyright (C) <2011> Stefan Kost + * Copyright (C) <2015> Luis de Bethencourt * * gstaudiovisualizer.h: base class for audio visualisation elements * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ /** * SECTION:gstaudiovisualizer @@ -63,7 +65,7 @@ guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_visualizer_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void gst_audio_visualizer_dispose (GObject * object); +static void gst_audio_visualizer_finalize (GObject * object); static gboolean gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope); static gboolean gst_audio_visualizer_src_setcaps (GstAudioVisualizer * @@ -91,6 +93,48 @@ static gboolean default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query); +#define GST_AUDIO_VISUALIZER_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_VISUALIZER, GstAudioVisualizerPrivate)) + +struct _GstAudioVisualizerPrivate +{ + gboolean negotiated; + + GstBufferPool *pool; + gboolean pool_active; + GstAllocator *allocator; + GstAllocationParams params; + GstQuery *query; + + /* pads */ + GstPad *srcpad, *sinkpad; + + GstAudioVisualizerShader shader_type; + GstAudioVisualizerShaderFunc shader; + guint32 shade_amount; + + GstAdapter *adapter; + + GstBuffer *inbuf; + GstBuffer *tempbuf; + GstVideoFrame tempframe; + + guint spf; /* samples per video frame */ + guint64 frame_duration; + + /* QoS stuff *//* with LOCK */ + gdouble proportion; + GstClockTime earliest_time; + + guint dropped; /* frames dropped / not dropped */ + guint processed; + + /* configuration mutex */ + GMutex config_lock; + + GstSegment segment; +}; + /* shading functions */ #define GST_TYPE_AUDIO_VISUALIZER_SHADER (gst_audio_visualizer_shader_get_type()) @@ -158,9 +202,10 @@ GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -186,9 +231,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -214,9 +260,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -242,9 +289,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -274,9 +322,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -306,9 +355,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -343,9 +393,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *d; gint ss, ds, width, height; @@ -380,9 +431,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -415,9 +467,10 @@ const GstVideoFrame * sframe, GstVideoFrame * dframe) { guint i, j; - guint r = (scope->shade_amount >> 16) & 0xff; - guint g = (scope->shade_amount >> 8) & 0xff; - guint b = (scope->shade_amount >> 0) & 0xff; + guint32 shade_amount = scope->priv->shade_amount; + guint r = (shade_amount >> 16) & 0xff; + guint g = (shade_amount >> 8) & 0xff; + guint b = (shade_amount >> 0) & 0xff; guint8 *s, *s1, *d, *d1; gint ss, ds, width, height; @@ -448,60 +501,50 @@ static void gst_audio_visualizer_change_shader (GstAudioVisualizer * scope) { - switch (scope->shader_type) { + GstAudioVisualizerShaderFunc shader; + + switch (scope->priv->shader_type) { case GST_AUDIO_VISUALIZER_SHADER_NONE: - scope->shader = NULL; + shader = NULL; break; case GST_AUDIO_VISUALIZER_SHADER_FADE: - scope->shader = shader_fade; + shader = shader_fade; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP: - scope->shader = shader_fade_and_move_up; + shader = shader_fade_and_move_up; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN: - scope->shader = shader_fade_and_move_down; + shader = shader_fade_and_move_down; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT: - scope->shader = shader_fade_and_move_left; + shader = shader_fade_and_move_left; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT: - scope->shader = shader_fade_and_move_right; + shader = shader_fade_and_move_right; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT: - scope->shader = shader_fade_and_move_horiz_out; + shader = shader_fade_and_move_horiz_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN: - scope->shader = shader_fade_and_move_horiz_in; + shader = shader_fade_and_move_horiz_in; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT: - scope->shader = shader_fade_and_move_vert_out; + shader = shader_fade_and_move_vert_out; break; case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN: - scope->shader = shader_fade_and_move_vert_in; + shader = shader_fade_and_move_vert_in; break; default: GST_ERROR ("invalid shader function"); - scope->shader = NULL; + shader = NULL; break; } + + scope->priv->shader = shader; } /* base class */ -#define GST_AUDIO_VISUALIZER_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_VISUALIZER, GstAudioVisualizerPrivate)) - -struct _GstAudioVisualizerPrivate -{ - gboolean negotiated; - - GstBufferPool *pool; - gboolean pool_active; - GstAllocator *allocator; - GstAllocationParams params; - GstQuery *query; -}; - GType libvisual_gst_audio_visualizer_get_type (void) { @@ -546,7 +589,7 @@ gobject_class->set_property = gst_audio_visualizer_set_property; gobject_class->get_property = gst_audio_visualizer_get_property; - gobject_class->dispose = gst_audio_visualizer_dispose; + gobject_class->finalize = gst_audio_visualizer_finalize; element_class->change_state = GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state); @@ -577,40 +620,40 @@ pad_template = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink"); g_return_if_fail (pad_template != NULL); - scope->sinkpad = gst_pad_new_from_template (pad_template, "sink"); - gst_pad_set_chain_function (scope->sinkpad, + scope->priv->sinkpad = gst_pad_new_from_template (pad_template, "sink"); + gst_pad_set_chain_function (scope->priv->sinkpad, GST_DEBUG_FUNCPTR (gst_audio_visualizer_chain)); - gst_pad_set_event_function (scope->sinkpad, + gst_pad_set_event_function (scope->priv->sinkpad, GST_DEBUG_FUNCPTR (gst_audio_visualizer_sink_event)); - gst_element_add_pad (GST_ELEMENT (scope), scope->sinkpad); + gst_element_add_pad (GST_ELEMENT (scope), scope->priv->sinkpad); pad_template = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src"); g_return_if_fail (pad_template != NULL); - scope->srcpad = gst_pad_new_from_template (pad_template, "src"); - gst_pad_set_event_function (scope->srcpad, + scope->priv->srcpad = gst_pad_new_from_template (pad_template, "src"); + gst_pad_set_event_function (scope->priv->srcpad, GST_DEBUG_FUNCPTR (gst_audio_visualizer_src_event)); - gst_pad_set_query_function (scope->srcpad, + gst_pad_set_query_function (scope->priv->srcpad, GST_DEBUG_FUNCPTR (gst_audio_visualizer_src_query)); - gst_element_add_pad (GST_ELEMENT (scope), scope->srcpad); + gst_element_add_pad (GST_ELEMENT (scope), scope->priv->srcpad); - scope->adapter = gst_adapter_new (); - scope->inbuf = gst_buffer_new (); + scope->priv->adapter = gst_adapter_new (); + scope->priv->inbuf = gst_buffer_new (); /* properties */ - scope->shader_type = DEFAULT_SHADER; + scope->priv->shader_type = DEFAULT_SHADER; gst_audio_visualizer_change_shader (scope); - scope->shade_amount = DEFAULT_SHADE_AMOUNT; + scope->priv->shade_amount = DEFAULT_SHADE_AMOUNT; /* reset the initial video state */ gst_video_info_init (&scope->vinfo); - scope->frame_duration = GST_CLOCK_TIME_NONE; + scope->priv->frame_duration = GST_CLOCK_TIME_NONE; /* reset the initial state */ gst_audio_info_init (&scope->ainfo); gst_video_info_init (&scope->vinfo); - g_mutex_init (&scope->config_lock); + g_mutex_init (&scope->priv->config_lock); } static void @@ -621,11 +664,11 @@ switch (prop_id) { case PROP_SHADER: - scope->shader_type = g_value_get_enum (value); + scope->priv->shader_type = g_value_get_enum (value); gst_audio_visualizer_change_shader (scope); break; case PROP_SHADE_AMOUNT: - scope->shade_amount = g_value_get_uint (value); + scope->priv->shade_amount = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -641,10 +684,10 @@ switch (prop_id) { case PROP_SHADER: - g_value_set_enum (value, scope->shader_type); + g_value_set_enum (value, scope->priv->shader_type); break; case PROP_SHADE_AMOUNT: - g_value_set_uint (value, scope->shade_amount); + g_value_set_uint (value, scope->priv->shade_amount); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -653,39 +696,43 @@ } static void -gst_audio_visualizer_dispose (GObject * object) +gst_audio_visualizer_finalize (GObject * object) { GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object); + GstAudioVisualizerPrivate *priv = scope->priv; - if (scope->adapter) { - g_object_unref (scope->adapter); - scope->adapter = NULL; - } - if (scope->inbuf) { - gst_buffer_unref (scope->inbuf); - scope->inbuf = NULL; - } - if (scope->tempbuf) { - gst_video_frame_unmap (&scope->tempframe); - gst_buffer_unref (scope->tempbuf); - scope->tempbuf = NULL; - } - if (scope->config_lock.p) { - g_mutex_clear (&scope->config_lock); - scope->config_lock.p = NULL; + if (priv->adapter) { + g_object_unref (priv->adapter); + priv->adapter = NULL; + } + if (priv->inbuf) { + gst_buffer_unref (priv->inbuf); + priv->inbuf = NULL; } - G_OBJECT_CLASS (parent_class)->dispose (object); + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); + priv->tempbuf = NULL; + } + + g_mutex_clear (&priv->config_lock); + + G_OBJECT_CLASS (parent_class)->finalize (object); } static void gst_audio_visualizer_reset (GstAudioVisualizer * scope) { - gst_adapter_clear (scope->adapter); - gst_segment_init (&scope->segment, GST_FORMAT_UNDEFINED); + GstAudioVisualizerPrivate *priv = scope->priv; + + gst_adapter_clear (priv->adapter); + gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED); GST_OBJECT_LOCK (scope); - scope->proportion = 1.0; - scope->earliest_time = -1; + priv->proportion = 1.0; + priv->earliest_time = -1; + priv->dropped = 0; + priv->processed = 0; GST_OBJECT_UNLOCK (scope); } @@ -726,6 +773,7 @@ { GstVideoInfo info; GstAudioVisualizerClass *klass; + GstAudioVisualizerPrivate *priv; gboolean res; if (!gst_video_info_from_caps (&info, caps)) @@ -733,45 +781,55 @@ klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); + priv = scope->priv; + scope->vinfo = info; - scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND, + priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND, GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), + priv->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); - scope->req_spf = scope->spf; + scope->req_spf = priv->spf; - if (scope->tempbuf) { - gst_video_frame_unmap (&scope->tempframe); - gst_buffer_unref (scope->tempbuf); + if (priv->tempbuf) { + gst_video_frame_unmap (&priv->tempframe); + gst_buffer_unref (priv->tempbuf); } - scope->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), + priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), scope->vinfo.size); - gst_video_frame_map (&scope->tempframe, &scope->vinfo, scope->tempbuf, + gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf, GST_MAP_READWRITE); - if (klass->setup) - res = klass->setup (scope); + if (klass->setup && !klass->setup (scope)) + goto setup_failed; GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d", GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info), GST_VIDEO_INFO_FPS_N (&info), GST_VIDEO_INFO_FPS_D (&info)); - GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", - scope->spf, scope->req_spf); + GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf, + scope->req_spf); - gst_pad_set_caps (scope->srcpad, caps); + gst_pad_set_caps (priv->srcpad, caps); /* find a pool for the negotiated caps now */ res = gst_audio_visualizer_do_bufferpool (scope, caps); + gst_caps_unref (caps); return res; /* ERRORS */ wrong_caps: { + gst_caps_unref (caps); GST_DEBUG_OBJECT (scope, "error parsing caps"); return FALSE; } + +setup_failed: + { + GST_WARNING_OBJECT (scope, "failed to set up"); + return FALSE; + } } static gboolean @@ -782,12 +840,12 @@ GstCaps *templ; gboolean ret; - templ = gst_pad_get_pad_template_caps (scope->srcpad); + templ = gst_pad_get_pad_template_caps (scope->priv->srcpad); GST_DEBUG_OBJECT (scope, "performing negotiation"); /* see what the peer can do */ - othercaps = gst_pad_peer_query_caps (scope->srcpad, NULL); + othercaps = gst_pad_peer_query_caps (scope->priv->srcpad, NULL); if (othercaps) { target = gst_caps_intersect (othercaps, templ); gst_caps_unref (othercaps); @@ -880,7 +938,7 @@ GST_DEBUG_OBJECT (scope, "doing allocation query"); query = gst_query_new_allocation (outcaps, TRUE); - if (!gst_pad_peer_query (scope->srcpad, query)) { + if (!gst_pad_peer_query (scope->priv->srcpad, query)) { /* not a problem, we use the query defaults */ GST_DEBUG_OBJECT (scope, "allocation query failed"); } @@ -1027,6 +1085,7 @@ { GstFlowReturn ret = GST_FLOW_OK; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; GstAudioVisualizerClass *klass; GstBuffer *inbuf; guint64 dist, ts; @@ -1035,19 +1094,20 @@ gint bps, channels, rate; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); GST_LOG_OBJECT (scope, "chainfunc called"); /* resync on DISCONT */ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) { - gst_adapter_clear (scope->adapter); + gst_adapter_clear (priv->adapter); } /* Make sure have an output format */ - if (gst_pad_check_reconfigure (scope->srcpad)) { + if (gst_pad_check_reconfigure (priv->srcpad)) { if (!gst_audio_visualizer_src_negotiate (scope)) { - gst_pad_mark_reconfigure (scope->srcpad); + gst_pad_mark_reconfigure (priv->srcpad); goto not_negotiated; } } @@ -1061,56 +1121,75 @@ goto beach; } - gst_adapter_push (scope->adapter, buffer); + gst_adapter_push (priv->adapter, buffer); - g_mutex_lock (&scope->config_lock); + g_mutex_lock (&priv->config_lock); /* this is what we want */ sbpf = scope->req_spf * channels * sizeof (gint16); - inbuf = scope->inbuf; + inbuf = priv->inbuf; /* FIXME: the timestamp in the adapter would be different */ gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1); /* this is what we have */ - avail = gst_adapter_available (scope->adapter); + avail = gst_adapter_available (priv->adapter); GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); while (avail >= sbpf) { GstBuffer *outbuf; GstVideoFrame outframe; /* get timestamp of the current adapter content */ - ts = gst_adapter_prev_pts (scope->adapter, &dist); + ts = gst_adapter_prev_pts (priv->adapter, &dist); if (GST_CLOCK_TIME_IS_VALID (ts)) { /* convert bytes to time */ dist /= bps; ts += gst_util_uint64_scale_int (dist, GST_SECOND, rate); } + /* check for QoS, don't compute buffers that are known to be late */ if (GST_CLOCK_TIME_IS_VALID (ts)) { + GstClockTime earliest_time; + gdouble proportion; gint64 qostime; - gboolean need_skip; qostime = - gst_segment_to_running_time (&scope->segment, GST_FORMAT_TIME, ts) + - scope->frame_duration; + gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME, + ts) + priv->frame_duration; GST_OBJECT_LOCK (scope); - /* check for QoS, don't compute buffers that are known to be late */ - need_skip = scope->earliest_time != -1 && qostime <= scope->earliest_time; + earliest_time = priv->earliest_time; + proportion = priv->proportion; GST_OBJECT_UNLOCK (scope); - if (need_skip) { - GST_WARNING_OBJECT (scope, + if (GST_CLOCK_TIME_IS_VALID (earliest_time) && qostime <= earliest_time) { + GstClockTime stream_time, jitter; + GstMessage *qos_msg; + + GST_DEBUG_OBJECT (scope, "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT, - GST_TIME_ARGS (qostime), GST_TIME_ARGS (scope->earliest_time)); + GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time)); + + ++priv->dropped; + stream_time = gst_segment_to_stream_time (&priv->segment, + GST_FORMAT_TIME, ts); + jitter = GST_CLOCK_DIFF (qostime, earliest_time); + qos_msg = gst_message_new_qos (GST_OBJECT (scope), FALSE, qostime, + stream_time, ts, GST_BUFFER_DURATION (buffer)); + gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000); + gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS, + priv->processed, priv->dropped); + gst_element_post_message (GST_ELEMENT (scope), qos_msg); + goto skip; } } - g_mutex_unlock (&scope->config_lock); + ++priv->processed; + + g_mutex_unlock (&priv->config_lock); ret = default_prepare_output_buffer (scope, &outbuf); - g_mutex_lock (&scope->config_lock); + g_mutex_lock (&priv->config_lock); /* recheck as the value could have changed */ sbpf = scope->req_spf * channels * sizeof (gint16); @@ -1123,16 +1202,16 @@ gst_object_sync_values (GST_OBJECT (scope), ts); GST_BUFFER_TIMESTAMP (outbuf) = ts; - GST_BUFFER_DURATION (outbuf) = scope->frame_duration; + GST_BUFFER_DURATION (outbuf) = priv->frame_duration; /* this can fail as the data size we need could have changed */ - if (!(adata = (gpointer) gst_adapter_map (scope->adapter, sbpf))) + if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf))) break; gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE); - if (scope->shader) { - gst_video_frame_copy (&outframe, &scope->tempframe); + if (priv->shader) { + gst_video_frame_copy (&outframe, &priv->tempframe); } else { /* gst_video_frame_clear() or is output frame already cleared */ gint i; @@ -1150,21 +1229,22 @@ if (klass->render) { if (!klass->render (scope, inbuf, &outframe)) { ret = GST_FLOW_ERROR; + gst_video_frame_unmap (&outframe); + goto beach; } else { /* run various post processing (shading and geometric transformation) */ /* FIXME: SHADER assumes 32bpp */ - if (scope->shader && - GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { - scope->shader (scope, &outframe, &scope->tempframe); + if (priv->shader && GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) { + priv->shader (scope, &outframe, &priv->tempframe); } } } gst_video_frame_unmap (&outframe); - g_mutex_unlock (&scope->config_lock); - ret = gst_pad_push (scope->srcpad, outbuf); + g_mutex_unlock (&priv->config_lock); + ret = gst_pad_push (priv->srcpad, outbuf); outbuf = NULL; - g_mutex_lock (&scope->config_lock); + g_mutex_lock (&priv->config_lock); skip: /* recheck as the value could have changed */ @@ -1172,21 +1252,21 @@ GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); /* we want to take less or more, depending on spf : req_spf */ if (avail - sbpf >= sbpf) { - gst_adapter_flush (scope->adapter, sbpf); - gst_adapter_unmap (scope->adapter); + gst_adapter_flush (priv->adapter, sbpf); + gst_adapter_unmap (priv->adapter); } else if (avail >= sbpf) { /* just flush a bit and stop */ - gst_adapter_flush (scope->adapter, (avail - sbpf)); - gst_adapter_unmap (scope->adapter); + gst_adapter_flush (priv->adapter, (avail - sbpf)); + gst_adapter_unmap (priv->adapter); break; } - avail = gst_adapter_available (scope->adapter); + avail = gst_adapter_available (priv->adapter); if (ret != GST_FLOW_OK) break; } - g_mutex_unlock (&scope->config_lock); + g_mutex_unlock (&priv->config_lock); beach: return ret; @@ -1205,8 +1285,10 @@ { gboolean res; GstAudioVisualizer *scope; + GstAudioVisualizerPrivate *priv; scope = GST_AUDIO_VISUALIZER (parent); + priv = scope->priv; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_QOS: @@ -1219,16 +1301,16 @@ /* save stuff for the _chain() function */ GST_OBJECT_LOCK (scope); - scope->proportion = proportion; + priv->proportion = proportion; if (diff >= 0) /* we're late, this is a good estimate for next displayable * frame (see part-qos.txt) */ - scope->earliest_time = timestamp + 2 * diff + scope->frame_duration; + priv->earliest_time = timestamp + 2 * diff + priv->frame_duration; else - scope->earliest_time = timestamp + diff; + priv->earliest_time = timestamp + diff; GST_OBJECT_UNLOCK (scope); - res = gst_pad_push_event (scope->sinkpad, event); + res = gst_pad_push_event (priv->sinkpad, event); break; } case GST_EVENT_RECONFIGURE: @@ -1260,20 +1342,21 @@ gst_event_parse_caps (event, &caps); res = gst_audio_visualizer_sink_setcaps (scope, caps); + gst_event_unref (event); break; } case GST_EVENT_FLUSH_STOP: gst_audio_visualizer_reset (scope); - res = gst_pad_push_event (scope->srcpad, event); + res = gst_pad_push_event (scope->priv->srcpad, event); break; case GST_EVENT_SEGMENT: { /* the newsegment values are used to clip the input samples * and to convert the incomming timestamps to running time so * we can do QoS */ - gst_event_copy_segment (event, &scope->segment); + gst_event_copy_segment (event, &scope->priv->segment); - res = gst_pad_push_event (scope->srcpad, event); + res = gst_pad_push_event (scope->priv->srcpad, event); break; } default: @@ -1307,7 +1390,7 @@ if (rate == 0) break; - if ((res = gst_pad_peer_query (scope->sinkpad, query))) { + if ((res = gst_pad_peer_query (scope->priv->sinkpad, query))) { gst_query_parse_latency (query, &us_live, &min_latency, &max_latency); GST_DEBUG_OBJECT (scope, "Peer latency: min %" @@ -1315,7 +1398,7 @@ GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); /* the max samples we must buffer buffer */ - max_samples = MAX (scope->req_spf, scope->spf); + max_samples = MAX (scope->req_spf, scope->priv->spf); our_latency = gst_util_uint64_scale_int (max_samples, GST_SECOND, rate); GST_DEBUG_OBJECT (scope, "Our latency: %" GST_TIME_FORMAT, diff -Nru gst-plugins-base1.0-1.4.3/ext/libvisual/gstaudiovisualizer.h gst-plugins-base1.0-1.6.1/ext/libvisual/gstaudiovisualizer.h --- gst-plugins-base1.0-1.4.3/ext/libvisual/gstaudiovisualizer.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/libvisual/gstaudiovisualizer.h 2015-10-22 08:01:34.000000000 +0000 @@ -1,21 +1,23 @@ /* GStreamer * Copyright (C) <2011> Stefan Kost + * Copyright (C) <2015> Luis de Bethencourt * * gstaudiovisualizer.c: base class for audio visualisation elements * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef __GST_AUDIO_VISUALIZER_H__ @@ -73,37 +75,14 @@ { GstElement parent; - /* pads */ - GstPad *srcpad, *sinkpad; - - GstAdapter *adapter; - GstBuffer *inbuf; - GstBuffer *tempbuf; - GstVideoFrame tempframe; - - GstAudioVisualizerShader shader_type; - GstAudioVisualizerShaderFunc shader; - guint32 shade_amount; - - guint spf; /* samples per video frame */ guint req_spf; /* min samples per frame wanted by the subclass */ /* video state */ GstVideoInfo vinfo; - guint64 frame_duration; /* audio state */ GstAudioInfo ainfo; - /* configuration mutex */ - GMutex config_lock; - - /* QoS stuff *//* with LOCK */ - gdouble proportion; - GstClockTime earliest_time; - - GstSegment segment; - /* */ GstAudioVisualizerPrivate *priv; }; diff -Nru gst-plugins-base1.0-1.4.3/ext/libvisual/Makefile.in gst-plugins-base1.0-1.6.1/ext/libvisual/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/libvisual/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/libvisual/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/libvisual -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -230,6 +239,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -290,6 +300,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -319,6 +331,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -346,7 +360,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -361,6 +374,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -450,13 +464,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -509,6 +522,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -548,7 +562,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/libvisual/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/libvisual/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -873,6 +886,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/Makefile.in gst-plugins-base1.0-1.6.1/ext/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -19,7 +19,17 @@ # descending into all subdirectories a second time, but only after the first # (parallel) run has finished, so it should go right through the second time. VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = ext ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -181,6 +189,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/parallel-subdirs.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -266,6 +276,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -295,6 +307,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -322,7 +336,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -337,6 +350,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -426,13 +440,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -485,6 +498,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -545,7 +559,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -554,7 +567,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/parallel-subdirs.mak: +$(top_srcdir)/common/parallel-subdirs.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -841,6 +854,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + .PHONY: independent-subdirs $(SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/gstoggdemux.c gst-plugins-base1.0-1.6.1/ext/ogg/gstoggdemux.c --- gst-plugins-base1.0-1.4.3/ext/ogg/gstoggdemux.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/gstoggdemux.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,8 +28,8 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=test.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink - * ]| Decodes the vorbis audio stored inside an ogg container. + * gst-launch-1.0 -v filesrc location=test.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink + * ]| Decodes a vorbis audio stream stored inside an ogg container and plays it. * */ @@ -59,6 +59,8 @@ #define GST_FLOW_LIMIT GST_FLOW_CUSTOM_ERROR #define GST_FLOW_SKIP_PUSH GST_FLOW_CUSTOM_SUCCESS_1 +#define SEEK_GIVE_UP_THRESHOLD (3*GST_SECOND) + #define GST_CHAIN_LOCK(ogg) g_mutex_lock(&(ogg)->chain_lock) #define GST_CHAIN_UNLOCK(ogg) g_mutex_unlock(&(ogg)->chain_lock) @@ -177,6 +179,7 @@ gst_pad_use_fixed_caps (GST_PAD (pad)); pad->current_granule = -1; + pad->prev_granule = -1; pad->keyframe_granule = -1; pad->start_time = GST_CLOCK_TIME_NONE; @@ -458,6 +461,7 @@ pad->last_ret = GST_FLOW_OK; pad->position = GST_CLOCK_TIME_NONE; pad->current_granule = -1; + pad->prev_granule = -1; pad->keyframe_granule = -1; pad->is_eos = FALSE; } @@ -582,6 +586,74 @@ GST_DEBUG_OBJECT (ogg, "packet duration %" G_GUINT64_FORMAT, duration); } + + /* If we get a hole at start, it might be we're catching a stream + * partway through. In that case, if the stream has an index, the + * index might be mooted. However, as it's totally valid to index + * a stream with a hole at start (ie, capturing a live stream and + * then index it), we now check whether the index references some + * offset beyond the byte length (if known). If this is the case, + * we can be reasonably sure we're getting a stream partway, with + * its index being now useless since we don't know how many bytes + * were skipped, preventing us from patching the index offsets to + * match the hole size. */ + if (!is_header && ogg->check_index_overflow) { + GstQuery *query; + GstFormat format; + int i; + gint64 length; + gboolean beyond; + + if (ogg->current_chain) { + query = gst_query_new_duration (GST_FORMAT_BYTES); + if (gst_pad_peer_query (ogg->sinkpad, query)) { + gst_query_parse_duration (query, &format, &length); + if (format == GST_FORMAT_BYTES && length >= 0) { + for (i = 0; i < ogg->current_chain->streams->len; i++) { + GstOggPad *ipad = + g_array_index (ogg->current_chain->streams, GstOggPad *, i); + if (!ipad->map.index) + continue; + beyond = ipad->map.n_index + && ipad->map.index[ipad->map.n_index - 1].offset >= length; + if (beyond) { + GST_WARNING_OBJECT (pad, "Index offsets beyong byte length"); + if (ipad->discont) { + /* hole - the index is most likely screwed up */ + GST_WARNING_OBJECT (ogg, "Discarding entire index"); + g_free (ipad->map.index); + ipad->map.index = NULL; + ipad->map.n_index = 0; + } else { + /* no hole - we can just clip the index if needed */ + GST_WARNING_OBJECT (ogg, "Clipping index"); + while (ipad->map.n_index > 0 + && ipad->map.index[ipad->map.n_index - 1].offset >= length) + ipad->map.n_index--; + if (ipad->map.n_index == 0) { + GST_WARNING_OBJECT (ogg, "The entire index was clipped"); + g_free (ipad->map.index); + ipad->map.index = NULL; + } + } + /* We can't trust the total time if the index goes beyond */ + ipad->map.total_time = -1; + } else { + /* use total time to update the total ogg time */ + if (ogg->total_time == -1) { + ogg->total_time = ipad->map.total_time; + } else if (ipad->map.total_time > 0) { + ogg->total_time = MAX (ogg->total_time, ipad->map.total_time); + } + } + } + } + } + gst_query_unref (query); + } + ogg->check_index_overflow = FALSE; + } + if (packet->b_o_s) { out_timestamp = GST_CLOCK_TIME_NONE; out_duration = GST_CLOCK_TIME_NONE; @@ -640,8 +712,21 @@ GST_SECOND * pad->map.granulerate_d, pad->map.granulerate_n); } } else { - out_timestamp = gst_ogg_stream_granule_to_time (&pad->map, - pad->current_granule - duration); + /* The last packet may be clipped. This will be represented + by the last granule being smaller than what it would otherwise + have been, had no content been clipped. In that case, we + cannot calculate the PTS of the audio from the packet length + and granule. */ + if (packet->e_o_s) { + if (pad->prev_granule >= 0) + out_timestamp = gst_ogg_stream_granule_to_time (&pad->map, + pad->prev_granule); + else + out_timestamp = 0; + } else { + out_timestamp = gst_ogg_stream_granule_to_time (&pad->map, + pad->current_granule - duration); + } out_duration = gst_ogg_stream_granule_to_time (&pad->map, pad->current_granule) - out_timestamp; @@ -652,6 +737,7 @@ out_offset = gst_ogg_stream_granule_to_time (&pad->map, pad->current_granule); } + pad->prev_granule = pad->current_granule; } if (pad->map.is_ogm_text) { @@ -687,7 +773,9 @@ /* Mark discont on the buffer */ if (pad->discont) { GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); - pad->discont = FALSE; + if GST_BUFFER_TIMESTAMP_IS_VALID + (buf) + pad->discont = FALSE; } pad->position = ogg->segment.position; @@ -695,6 +783,7 @@ /* don't push the header packets when we are asked to skip them */ if (!packet->b_o_s || push_headers) { if (pad->last_ret == GST_FLOW_OK) { + GST_LOG_OBJECT (ogg, "Pushing buf %" GST_PTR_FORMAT, buf); ret = gst_pad_push (GST_PAD_CAST (pad), buf); } else { GST_DEBUG_OBJECT (ogg, "not pushing buffer on error pad"); @@ -732,8 +821,8 @@ /* and store as the current position */ ogg->segment.position = current_time; - GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT, - GST_TIME_ARGS (current_time)); + GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT + " (%" G_GINT64_FORMAT ")", GST_TIME_ARGS (current_time), current_time); /* check stream eos */ if (!pad->is_eos && !delta_unit && @@ -898,13 +987,7 @@ case GST_OGG_SKELETON_INDEX: gst_ogg_map_add_index (&skel_pad->map, &pad->map, packet->packet, packet->bytes); - - /* use total time to update the total ogg time */ - if (ogg->total_time == -1) { - ogg->total_time = skel_pad->map.total_time; - } else if (skel_pad->map.total_time > 0) { - ogg->total_time = MAX (ogg->total_time, skel_pad->map.total_time); - } + ogg->check_index_overflow = TRUE; break; default: break; @@ -919,9 +1002,11 @@ granule = gst_ogg_stream_granulepos_to_granule (&pad->map, packet->granulepos); - if (granule >= 0) { + if (granule > 0) { GST_DEBUG_OBJECT (ogg, "%p has granulepos %" G_GINT64_FORMAT, pad, granule); pad->current_granule = granule; + } else if (granule == 0) { + /* headers */ } else if (granule != -1) { GST_ERROR_OBJECT (ogg, "granulepos %" G_GINT64_FORMAT " yielded granule %" G_GINT64_FORMAT, @@ -993,7 +1078,8 @@ (gint64) packet->granulepos, granule, pad->map.accumulated_granule); } else { packet->granulepos = gst_ogg_stream_granule_to_granulepos (&pad->map, - pad->map.accumulated_granule, pad->keyframe_granule); + pad->map.accumulated_granule + pad->current_granule, + pad->keyframe_granule); } } } else { @@ -1053,19 +1139,20 @@ GST_TIME_ARGS (start_time)); segment.rate = ogg->push_seek_rate; segment.start = ogg->push_seek_time_original_target; + segment.position = ogg->push_seek_time_original_target; segment.stop = ogg->push_seek_time_original_stop; segment.time = ogg->push_seek_time_original_target; - segment.base = ogg->push_seek_time_original_target; + segment.base = ogg->segment.base; event = gst_event_new_segment (&segment); - gst_event_set_seqnum (event, ogg->push_seek_seqnum); ogg->push_state = PUSH_PLAYING; } else { segment.rate = ogg->segment.rate; segment.applied_rate = ogg->segment.applied_rate; segment.start = start_time; + segment.position = start_time; segment.stop = chain->segment_stop; segment.time = segment_time; - segment.base = segment_time; + segment.base = ogg->segment.base; event = gst_event_new_segment (&segment); } GST_PUSH_UNLOCK (ogg); @@ -1090,9 +1177,10 @@ segment.rate = ogg->segment.rate; segment.applied_rate = ogg->segment.applied_rate; segment.start = chain->segment_start; + segment.position = chain->segment_start; segment.stop = chain->segment_stop; segment.time = chain->begin_time; - segment.base = chain->begin_time; + segment.base = ogg->segment.base; event = gst_event_new_segment (&segment); } } @@ -1190,6 +1278,65 @@ } static void +gst_ogg_demux_setup_first_granule (GstOggDemux * ogg, GstOggPad * pad, + ogg_page * page) +{ + /* When we submit a page, we check if we have started tracking granules. + * If not, we calculate the granule corresponding to the first packet + * on the page. */ + if (pad->current_granule == -1) { + ogg_int64_t granpos = ogg_page_granulepos (page); + if (granpos > 0) { + gint64 granule = + (gint64) gst_ogg_stream_granulepos_to_granule (&pad->map, granpos); + gint64 duration; + int packets = ogg_page_packets (page), n; + GST_DEBUG_OBJECT (pad, + "This page completes %d packets, granule %" G_GINT64_FORMAT, packets, + granule); + if (packets > 0) { + ogg_stream_state os; + ogg_packet op; + int last_size = pad->map.last_size; + + memcpy (&os, &pad->map.stream, sizeof (os)); + for (n = 0; n < packets; ++n) { + int ret = ogg_stream_packetout (&os, &op); + if (ret < 0) { + GST_WARNING_OBJECT (pad, "Failed to read packets off first page"); + granule = -1; + break; + } + if (ret == 0) { + GST_WARNING_OBJECT (pad, + "Short read getting %d packets off first page", packets); + granule = -1; + break; + } + duration = gst_ogg_stream_get_packet_duration (&pad->map, &op); + GST_DEBUG_OBJECT (pad, "Packet %d has duration %" G_GINT64_FORMAT, n, + duration); + granule -= duration; + } + pad->map.last_size = last_size; + if (granule >= 0) { + pad->current_granule = granule; + GST_INFO_OBJECT (pad, "Starting with first granule %" G_GINT64_FORMAT, + granule); + } else { + pad->current_granule = 0; + GST_INFO_OBJECT (pad, "Extrapolated first granule is negative, " + "used to clip samples at start"); + } + } else { + GST_WARNING_OBJECT (pad, + "Ogg page finishing no packets, but a valid granule"); + } + } + } +} + +static void gst_ogg_demux_setup_bisection_bounds (GstOggDemux * ogg) { if (ogg->push_last_seek_time >= ogg->push_seek_time_target) { @@ -1369,22 +1516,20 @@ ogg->push_state = PUSH_PLAYING; - GST_PUSH_UNLOCK (ogg); - - if (event) { - /* If there is one, perform it */ - gst_ogg_demux_perform_seek_push (ogg, event); - } else { - /* If there wasn't, seek back at start to start normal playback */ + /* If there is one, perform it. Otherwise, seek back at start to start + * normal playback */ + if (!event) { GST_INFO_OBJECT (ogg, "Seeking back to 0 after duration check"); event = gst_event_new_seek (1.0, GST_FORMAT_BYTES, GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 1, GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE); - if (!gst_pad_push_event (ogg->sinkpad, event)) { - GST_WARNING_OBJECT (ogg, "Failed seeking back to start"); - return GST_FLOW_ERROR; - } } + gst_event_replace (&ogg->seek_event, event); + gst_event_unref (event); + GST_PUSH_UNLOCK (ogg); + g_mutex_lock (&ogg->seek_event_mutex); + g_cond_broadcast (&ogg->seek_event_cond); + g_mutex_unlock (&ogg->seek_event_mutex); return GST_FLOW_OK; } @@ -1514,7 +1659,6 @@ GstClockTime t; gint64 best = -1; GstEvent *sevent; - int res; gboolean close_enough; float seek_quality; @@ -1523,6 +1667,8 @@ GST_PUSH_UNLOCK (ogg); if (ogg_stream_pagein (&pad->map.stream, page) != 0) goto choked; + if (pad->current_granule == -1) + gst_ogg_demux_setup_first_granule (ogg, pad, page); return GST_FLOW_SKIP_PUSH; } @@ -1542,6 +1688,8 @@ "Not enough timing info collected for sync, waiting for more"); if (ogg_stream_pagein (&pad->map.stream, page) != 0) goto choked; + if (pad->current_granule == -1) + gst_ogg_demux_setup_first_granule (ogg, pad, page); return GST_FLOW_SKIP_PUSH; } ogg->push_last_seek_time = sync_time; @@ -1705,15 +1853,14 @@ gst_event_new_seek (ogg->push_seek_rate, GST_FORMAT_BYTES, ogg->push_seek_flags, GST_SEEK_TYPE_SET, best, GST_SEEK_TYPE_NONE, -1); - gst_event_set_seqnum (sevent, ogg->push_seek_seqnum); + gst_event_set_seqnum (sevent, ogg->seqnum); + gst_event_replace (&ogg->seek_event, sevent); + gst_event_unref (sevent); GST_PUSH_UNLOCK (ogg); - res = gst_pad_push_event (ogg->sinkpad, sevent); - if (!res) { - /* We failed to send the seek event, notify the pipeline */ - GST_ELEMENT_ERROR (ogg, RESOURCE, SEEK, (NULL), ("Failed to seek")); - return GST_FLOW_ERROR; - } + g_mutex_lock (&ogg->seek_event_mutex); + g_cond_broadcast (&ogg->seek_event_cond); + g_mutex_unlock (&ogg->seek_event_mutex); return GST_FLOW_SKIP_PUSH; } @@ -1737,6 +1884,36 @@ } } +static void +gst_ogg_demux_query_duration_push (GstOggDemux * ogg) +{ + if (!ogg->pullmode && ogg->push_byte_length == -1) { + GstQuery *query; + gboolean seekable = FALSE; + + query = gst_query_new_seeking (GST_FORMAT_BYTES); + if (gst_pad_peer_query (ogg->sinkpad, query)) + gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); + gst_query_unref (query); + + if (seekable) { + gint64 length = -1; + if (!gst_element_query_duration (GST_ELEMENT (ogg), GST_FORMAT_BYTES, + &length) + || length <= 0) { + GST_DEBUG_OBJECT (ogg, + "Unable to determine stream size, assuming live, seeking disabled"); + ogg->push_disable_seeking = TRUE; + } else { + ogg->push_disable_seeking = FALSE; + } + } else { + GST_DEBUG_OBJECT (ogg, "Stream is not seekable, seeking disabled"); + ogg->push_disable_seeking = TRUE; + } + } +} + /* submit a page to an oggpad, this function will then submit all * the packets in the page. */ @@ -1775,6 +1952,8 @@ } } + gst_ogg_demux_query_duration_push (ogg); + /* keep track of time in push mode */ if (!ogg->pullmode) { result = gst_ogg_pad_handle_push_mode_state (pad, page); @@ -1789,6 +1968,8 @@ if (ogg_stream_pagein (&pad->map.stream, page) != 0) goto choked; + if (pad->current_granule == -1) + gst_ogg_demux_setup_first_granule (ogg, pad, page); /* flush all packets in the stream layer, this might not give a packet if * the page had no packets finishing on the page (npackets == 0). */ @@ -1912,7 +2093,6 @@ gst_ogg_chain_new_stream (GstOggChain * chain, guint32 serialno) { GstOggPad *ret; - GstTagList *list; gchar *name; GST_DEBUG_OBJECT (chain->ogg, @@ -1934,12 +2114,6 @@ if (ogg_stream_init (&ret->map.stream, serialno) != 0) goto init_failed; - /* FIXME: either do something with it or remove it */ - list = gst_tag_list_new_empty (); - gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_SERIAL, serialno, - NULL); - gst_tag_list_unref (list); - GST_DEBUG_OBJECT (chain->ogg, "created new ogg src %p for stream with serial %08x", ret, serialno); @@ -2098,6 +2272,9 @@ gst_flow_combiner_free (ogg->flowcombiner); + if (ogg->building_chain) + gst_ogg_chain_free (ogg->building_chain); + G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -2116,11 +2293,13 @@ stream->start_time = -1; stream->map.accumulated_granule = 0; + stream->current_granule = -1; } ogg->building_chain = chain; GST_DEBUG_OBJECT (ogg, "Resetting current chain"); ogg->current_chain = NULL; ogg->resync = TRUE; + gst_ogg_chain_mark_discont (chain); ogg->chunk_size = CHUNKSIZE; } @@ -2161,7 +2340,7 @@ ogg->push_byte_offset = segment.start; ogg->push_last_seek_offset = segment.start; - if (gst_event_get_seqnum (event) == ogg->push_seek_seqnum) { + if (gst_event_get_seqnum (event) == ogg->seqnum) { GstSeekType stop_type = GST_SEEK_TYPE_NONE; if (ogg->push_seek_time_original_stop != -1) stop_type = GST_SEEK_TYPE_SET; @@ -2171,12 +2350,43 @@ ogg->push_seek_time_original_stop, &update); } + if (!ogg->pullmode && !(ogg->push_seek_flags & GST_SEEK_FLAG_FLUSH)) { + int i; + GstOggChain *chain = ogg->current_chain; + + ogg->push_seek_flags = 0; + if (!chain) { + /* This will happen when we bisect, as we clear the chain when + we do the first seek. On subsequent ones, we just reset the + ogg sync object as we already reset the chain */ + GST_DEBUG_OBJECT (ogg, "No chain, just resetting ogg sync"); + ogg_sync_reset (&ogg->sync); + } else { + /* reset pad push mode seeking state */ + for (i = 0; i < chain->streams->len; i++) { + GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i); + pad->push_kf_time = GST_CLOCK_TIME_NONE; + pad->push_sync_time = GST_CLOCK_TIME_NONE; + } + ogg_sync_reset (&ogg->sync); + gst_ogg_demux_reset_streams (ogg); + } + } + + if (!ogg->pullmode) { + if (ogg->seek_event_drop_till == gst_event_get_seqnum (event)) { + GST_DEBUG_OBJECT (ogg, "Got event seqnum %u, stopping dropping", + ogg->seek_event_drop_till); + ogg->seek_event_drop_till = 0; + } + } GST_PUSH_UNLOCK (ogg); } else { GST_WARNING_OBJECT (ogg, "unexpected segment format: %s", gst_format_get_name (segment.format)); } } + gst_event_unref (event); res = TRUE; break; @@ -2204,8 +2414,10 @@ #endif res = gst_ogg_demux_send_event (ogg, event); if (ogg->current_chain == NULL) { - GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), - ("can't get first chain")); + GST_WARNING_OBJECT (ogg, + "EOS while trying to retrieve chain, seeking disabled"); + ogg->push_disable_seeking = TRUE; + res = TRUE; } break; } @@ -2563,6 +2775,9 @@ /* if we cannot seek back to the chain, we can destroy the chain * completely */ if (!ogg->pullmode) { + if (ogg->building_chain == chain) + ogg->building_chain = NULL; + ogg->current_chain = NULL; gst_ogg_chain_free (chain); } @@ -2971,6 +3186,8 @@ GstFlowReturn ret; gint i, pending; gint serialno = 0; + gboolean found_keyframe = FALSE; + GstClockTime ts, first_ts = GST_CLOCK_TIME_NONE; position = segment->position; @@ -3064,6 +3281,28 @@ continue; } + /* We have a valid granpos, and we bail out when the time since the + first seen time to the time corresponding to this granpos is larger + then a threshold, to guard against some streams having large holes + (eg, a stream ending early, which would cause seeking after that + to fill up a queue for streams still active). */ + ts = gst_ogg_stream_get_end_time_for_granulepos (&pad->map, granulepos); + if (GST_CLOCK_TIME_IS_VALID (ts)) { + if (first_ts == GST_CLOCK_TIME_NONE) { + GST_WARNING_OBJECT (pad, "Locking on ts %" GST_TIME_FORMAT, + GST_TIME_ARGS (ts)); + first_ts = ts; + } + if (ts - first_ts > SEEK_GIVE_UP_THRESHOLD) { + GST_WARNING_OBJECT (pad, + "No data found for %" GST_TIME_FORMAT ", giving up", + GST_TIME_ARGS (SEEK_GIVE_UP_THRESHOLD)); + found_keyframe = FALSE; + keytarget = target; + break; + } + } + /* in reverse we want to go past the page with the lower timestamp */ if (segment->rate < 0.0) { /* get time for this pad */ @@ -3101,6 +3340,7 @@ if (keyframe_time < keytarget) { serialno = pad->map.serialno; keytarget = keyframe_time; + found_keyframe = TRUE; } } @@ -3114,6 +3354,10 @@ if (segment->rate < 0.0) goto done; + /* No keyframe found, no need to bisect again, keytarget == target here */ + if (!found_keyframe) + best = 0; + if (keytarget != target) { GST_LOG_OBJECT (ogg, "final seek to target %" GST_TIME_FORMAT, GST_TIME_ARGS (keytarget)); @@ -3388,7 +3632,6 @@ /* In push mode, we get to the end of the stream to get the duration */ gint64 position; GstEvent *sevent; - gboolean res; /* A full Ogg page can be almost 64 KB. There's no guarantee that there'll be a granpos there, but it's fairly likely */ @@ -3403,16 +3646,12 @@ /* do not read the last byte */ sevent = gst_event_new_seek (1.0, GST_FORMAT_BYTES, flags, GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_SET, ogg->push_byte_length - 1); - res = gst_pad_push_event (ogg->sinkpad, sevent); - if (res) { - GST_DEBUG_OBJECT (ogg, "Seek succesful"); - return TRUE; - } else { - GST_INFO_OBJECT (ogg, "Seek failed, duration will stay unknown"); - ogg->push_state = PUSH_PLAYING; - ogg->push_disable_seeking = TRUE; - return FALSE; - } + gst_event_replace (&ogg->seek_event, sevent); + gst_event_unref (sevent); + g_mutex_lock (&ogg->seek_event_mutex); + g_cond_broadcast (&ogg->seek_event_cond); + g_mutex_unlock (&ogg->seek_event_mutex); + return TRUE; } static gboolean @@ -3435,6 +3674,7 @@ } else { GST_DEBUG_OBJECT (ogg, "File byte length unknown, assuming live"); ogg->push_disable_seeking = TRUE; + gst_object_unref (peer); return TRUE; } res = gst_pad_query_duration (peer, GST_FORMAT_TIME, &length); @@ -3499,11 +3739,6 @@ if (stop_type == GST_SEEK_TYPE_NONE) stop = -1; - if (!(flags & GST_SEEK_FLAG_FLUSH)) { - GST_DEBUG_OBJECT (ogg, "can only do flushing seeks"); - goto error; - } - GST_DEBUG_OBJECT (ogg, "Push mode seek request: %" GST_TIME_FORMAT, GST_TIME_ARGS (start)); @@ -3586,7 +3821,7 @@ ogg->push_offset1 = ogg->push_byte_length - 1; ogg->push_time0 = ogg->push_start_time; ogg->push_time1 = ogg->push_time_length; - ogg->push_seek_seqnum = gst_event_get_seqnum (event); + ogg->seqnum = gst_event_get_seqnum (event); ogg->push_seek_time_target = start; ogg->push_prev_seek_time = GST_CLOCK_TIME_NONE; ogg->push_seek_time_original_target = start; @@ -3595,11 +3830,13 @@ ogg->seek_secant = FALSE; ogg->seek_undershot = FALSE; - /* reset pad push mode seeking state */ - for (i = 0; i < chain->streams->len; i++) { - GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i); - pad->push_kf_time = GST_CLOCK_TIME_NONE; - pad->push_sync_time = GST_CLOCK_TIME_NONE; + if (flags & GST_SEEK_FLAG_FLUSH) { + /* reset pad push mode seeking state */ + for (i = 0; i < chain->streams->len; i++) { + GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i); + pad->push_kf_time = GST_CLOCK_TIME_NONE; + pad->push_sync_time = GST_CLOCK_TIME_NONE; + } } GST_DEBUG_OBJECT (ogg, @@ -3620,8 +3857,12 @@ start_type, best, GST_SEEK_TYPE_NONE, -1); gst_event_set_seqnum (sevent, gst_event_get_seqnum (event)); + gst_event_replace (&ogg->seek_event, sevent); + gst_event_unref (sevent); GST_PUSH_UNLOCK (ogg); - res = gst_pad_push_event (ogg->sinkpad, sevent); + g_mutex_lock (&ogg->seek_event_mutex); + g_cond_broadcast (&ogg->seek_event_cond); + g_mutex_unlock (&ogg->seek_event_mutex); return res; @@ -4074,8 +4315,12 @@ * ogg file. */ gst_ogg_demux_seek (ogg, 0); ret = gst_ogg_demux_read_chain (ogg, &chain); - if (ret != GST_FLOW_OK) - goto no_first_chain; + if (ret != GST_FLOW_OK) { + if (ret == GST_FLOW_FLUSHING) + goto flushing; + else + goto no_first_chain; + } /* read page from end offset, we use this page to check if its serial * number is contained in the first chain. If this is the case then @@ -4135,6 +4380,11 @@ gst_ogg_chain_free (chain); return ret; } +flushing: + { + GST_DEBUG_OBJECT (ogg, "Flushing, can't read chain"); + return GST_FLOW_FLUSHING; + } } static void @@ -4185,7 +4435,7 @@ segment.start = start; segment.stop = chain->segment_stop; segment.time = chain->begin_time; - segment.base = chain->begin_time; + segment.base += chain->begin_time; event = gst_event_new_segment (&segment); gst_event_set_seqnum (event, ogg->seqnum); @@ -4279,9 +4529,19 @@ GstOggDemux *ogg; gint ret = 0; GstFlowReturn result = GST_FLOW_OK; + gboolean drop; ogg = GST_OGG_DEMUX (parent); + GST_PUSH_LOCK (ogg); + drop = (ogg->seek_event_drop_till > 0); + GST_PUSH_UNLOCK (ogg); + if (drop) { + GST_ERROR_OBJECT (ogg, "Dropping buffer because we have a pending seek"); + gst_buffer_unref (buffer); + return GST_FLOW_OK; + } + GST_DEBUG_OBJECT (ogg, "enter"); result = gst_ogg_demux_submit_buffer (ogg, buffer); if (result < 0) { @@ -4347,7 +4607,8 @@ pad->last_ret = ret; pad->is_eos = (ret == GST_FLOW_EOS); - return gst_flow_combiner_update_flow (ogg->flowcombiner, ret); + return gst_flow_combiner_update_pad_flow (ogg->flowcombiner, + GST_PAD_CAST (pad), ret); } static GstFlowReturn @@ -4442,10 +4703,10 @@ for (i = 0; i < chain->streams->len; i++) { GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, i); - /* Theoretically, we should be doing this for all streams, but we're only - * doing it for known-to-be-sparse streams at the moment in order not to - * break things for wrongly-muxed streams (like we used to produce once) */ - if (stream->map.is_sparse && stream->position != GST_CLOCK_TIME_NONE) { + /* Theoretically, we should be doing this for all streams, so we're doing + * it, but it might break things break things for wrongly-muxed streams + * (like we used to produce once) */ + if ( /*stream->map.is_sparse && */ stream->position != GST_CLOCK_TIME_NONE) { /* Does this stream lag? Random threshold of 2 seconds */ if (GST_CLOCK_DIFF (stream->position, cur) > (2 * GST_SECOND)) { @@ -4518,9 +4779,18 @@ } seek_failed: { - GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), - ("failed to start demuxing ogg")); - ret = GST_FLOW_ERROR; + gboolean flushing; + + GST_OBJECT_LOCK (pad); + flushing = GST_PAD_IS_FLUSHING (pad); + GST_OBJECT_UNLOCK (pad); + if (flushing) { + ret = GST_FLOW_FLUSHING; + } else { + GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), + ("failed to start demuxing ogg")); + ret = GST_FLOW_ERROR; + } goto pause; } pause: @@ -4588,6 +4858,55 @@ } } +/* The sink pad task function for push mode. + * It just sends any seek events queued by the streaming thread. + */ +static gpointer +gst_ogg_demux_loop_push (GstOggDemux * ogg) +{ + GstEvent *event; + + while (1) { + g_mutex_lock (&ogg->seek_event_mutex); + if (ogg->seek_event_thread_stop) { + g_mutex_unlock (&ogg->seek_event_mutex); + break; + } + g_cond_wait (&ogg->seek_event_cond, &ogg->seek_event_mutex); + if (ogg->seek_event_thread_stop) { + g_mutex_unlock (&ogg->seek_event_mutex); + break; + } + g_mutex_unlock (&ogg->seek_event_mutex); + + GST_PUSH_LOCK (ogg); + event = ogg->seek_event; + ogg->seek_event = NULL; + if (event) { + ogg->seek_event_drop_till = gst_event_get_seqnum (event); + } + GST_PUSH_UNLOCK (ogg); + + if (!event) + continue; + + GST_DEBUG_OBJECT (ogg->sinkpad, "Pushing event %" GST_PTR_FORMAT, event); + if (!gst_pad_push_event (ogg->sinkpad, event)) { + GST_WARNING_OBJECT (ogg, "Failed to push event"); + GST_PUSH_LOCK (ogg); + if (!ogg->pullmode) { + ogg->push_state = PUSH_PLAYING; + ogg->push_disable_seeking = TRUE; + } + GST_PUSH_UNLOCK (ogg); + } else { + GST_DEBUG_OBJECT (ogg->sinkpad, "Pushed event ok"); + } + } + gst_object_unref (ogg); + return NULL; +} + static void gst_ogg_demux_clear_chains (GstOggDemux * ogg) { @@ -4602,6 +4921,8 @@ gst_ogg_chain_free (chain); } ogg->chains = g_array_set_size (ogg->chains, 0); + ogg->current_chain = NULL; + ogg->building_chain = NULL; GST_CHAIN_UNLOCK (ogg); } @@ -4615,8 +4936,7 @@ gst_ogg_demux_sink_activate (GstPad * sinkpad, GstObject * parent) { GstQuery *query; - gboolean pull_mode = FALSE; - GstSchedulingFlags flags; + gboolean pull_mode; query = gst_query_new_scheduling (); @@ -4625,13 +4945,8 @@ goto activate_push; } - gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL); - - /* Don't use pull mode if sequential access is suggested */ - if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL)) { - pull_mode = (flags & GST_SCHEDULING_FLAG_SEEKABLE) && - !(flags & GST_SCHEDULING_FLAG_SEQUENTIAL); - } + pull_mode = gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE); gst_query_unref (query); if (!pull_mode) @@ -4660,6 +4975,22 @@ case GST_PAD_MODE_PUSH: ogg->pullmode = FALSE; ogg->resync = FALSE; + if (active) { + ogg->seek_event_thread_stop = FALSE; + g_mutex_init (&ogg->seek_event_mutex); + g_cond_init (&ogg->seek_event_cond); + ogg->seek_event_thread = g_thread_new ("seek_event_thread", + (GThreadFunc) gst_ogg_demux_loop_push, gst_object_ref (ogg)); + } else { + g_mutex_lock (&ogg->seek_event_mutex); + ogg->seek_event_thread_stop = TRUE; + g_cond_broadcast (&ogg->seek_event_cond); + g_mutex_unlock (&ogg->seek_event_mutex); + g_thread_join (ogg->seek_event_thread); + g_cond_clear (&ogg->seek_event_cond); + g_mutex_clear (&ogg->seek_event_mutex); + ogg->seek_event_thread = NULL; + } res = TRUE; break; case GST_PAD_MODE_PULL: @@ -4708,25 +5039,10 @@ ogg->group_id = G_MAXUINT; ogg->push_disable_seeking = FALSE; - if (!ogg->pullmode) { - GstPad *peer; - if ((peer = gst_pad_get_peer (ogg->sinkpad)) != NULL) { - gint64 length = -1; - if (!gst_pad_query_duration (peer, GST_FORMAT_BYTES, &length) - || length <= 0) { - GST_DEBUG_OBJECT (ogg, - "Unable to determine stream size, assuming live, seeking disabled"); - ogg->push_disable_seeking = TRUE; - } - gst_object_unref (peer); - } - } - + gst_ogg_demux_query_duration_push (ogg); GST_PUSH_UNLOCK (ogg); gst_segment_init (&ogg->segment, GST_FORMAT_TIME); break; - case GST_STATE_CHANGE_PAUSED_TO_PLAYING: - break; default: break; } diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/gstoggdemux.h gst-plugins-base1.0-1.6.1/ext/ogg/gstoggdemux.h --- gst-plugins-base1.0-1.4.3/ext/ogg/gstoggdemux.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/gstoggdemux.h 2015-10-22 08:01:34.000000000 +0000 @@ -89,6 +89,7 @@ gint64 packetno; gint64 current_granule; + gint64 prev_granule; gint64 keyframe_granule; GstClockTime start_time; /* the timestamp of the first sample */ @@ -147,6 +148,8 @@ useful for skewing when seeking */ guint64 max_packet_size, max_page_size; + gboolean check_index_overflow; + /* state */ GMutex chain_lock; /* we need the lock to protect the chains */ GArray *chains; /* list of chains we know */ @@ -190,7 +193,6 @@ gboolean seek_secant; gboolean seek_undershot; GstClockTime push_prev_seek_time; - guint32 push_seek_seqnum; gint push_bisection_steps[2]; gint stats_bisection_steps[2]; @@ -200,6 +202,14 @@ /* ogg stuff */ ogg_sync_state sync; long chunk_size; + + /* Seek events set up by the streaming thread in push mode */ + GstEvent *seek_event; + GThread *seek_event_thread; + GMutex seek_event_mutex; + GCond seek_event_cond; + gboolean seek_event_thread_stop; + guint32 seek_event_drop_till; }; struct _GstOggDemuxClass diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/gstoggmux.c gst-plugins-base1.0-1.6.1/ext/ogg/gstoggmux.c --- gst-plugins-base1.0-1.4.3/ext/ogg/gstoggmux.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/gstoggmux.c 2015-10-22 08:01:34.000000000 +0000 @@ -27,7 +27,7 @@ * * Example pipelines * |[ - * gst-launch v4l2src num-buffers=500 ! video/x-raw,width=320,height=240 ! videoconvert ! theoraenc ! oggmux ! filesink location=video.ogg + * gst-launch-1.0 v4l2src num-buffers=500 ! video/x-raw,width=320,height=240 ! videoconvert ! videorate ! theoraenc ! oggmux ! filesink location=video.ogg * ]| Encodes a video stream captured from a v4l2-compatible camera to Ogg/Theora * (the encoding will stop automatically after 500 frames) * @@ -63,20 +63,6 @@ #define GST_GP_FORMAT "[gp %8" G_GINT64_FORMAT "]" #define GST_GP_CAST(_gp) ((gint64) _gp) -typedef enum -{ - GST_OGG_FLAG_BOS = GST_ELEMENT_FLAG_LAST, - GST_OGG_FLAG_EOS -} -GstOggFlag; - -/* OggMux signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; - /* set to 0.5 seconds by default */ #define DEFAULT_MAX_DELAY G_GINT64_CONSTANT(500000000) #define DEFAULT_MAX_PAGE_DELAY G_GINT64_CONSTANT(500000000) @@ -228,8 +214,6 @@ gst_pad_set_event_function (ogg_mux->srcpad, gst_ogg_mux_handle_src_event); gst_element_add_pad (GST_ELEMENT (ogg_mux), ogg_mux->srcpad); - GST_OBJECT_FLAG_SET (GST_ELEMENT (ogg_mux), GST_OGG_FLAG_BOS); - /* seed random number generator for creation of serial numbers */ srand (time (NULL)); @@ -316,7 +300,7 @@ GstOggMux *ogg_mux = GST_OGG_MUX (user_data); GstOggPadData *ogg_pad = (GstOggPadData *) pad; - GST_DEBUG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event)); + GST_DEBUG_OBJECT (pad->pad, "Got %s event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEGMENT: @@ -642,14 +626,14 @@ } } else { /* We then need to check for a non-negative granulepos */ - int i; gboolean valid = FALSE; + GList *l; - for (i = 0; i < pad->pagebuffers->length; i++) { - buf = g_queue_peek_nth (pad->pagebuffers, i); + for (l = pad->pagebuffers->head; l != NULL; l = l->next) { + buf = l->data; /* Here we check the OFFSET_END, which is actually temporarily the * granulepos value for this buffer */ - if (GST_BUFFER_OFFSET_END (buf) != -1) { + if (GST_BUFFER_OFFSET_END_IS_VALID (buf)) { valid = TRUE; break; } @@ -816,7 +800,7 @@ gst_ogg_mux_decorate_buffer (GstOggMux * ogg_mux, GstOggPadData * pad, GstBuffer * buf) { - GstClockTime time; + GstClockTime time, end_time; gint64 duration, granule, limit; GstClockTime next_time; GstClockTimeDiff diff; @@ -866,6 +850,25 @@ goto no_granule; } + /* The last packet may have clipped samples. We need to test against + * the segment to ensure we do not use a granpos that encompasses those. + */ + end_time = + gst_ogg_stream_granule_to_time (&pad->map, pad->next_granule + duration); + if (end_time > pad->segment.stop + && !GST_CLOCK_TIME_IS_VALID (gst_segment_to_running_time (&pad->segment, + GST_FORMAT_TIME, pad->segment.start + end_time))) { + gint64 actual_duration = + gst_util_uint64_scale_round (pad->segment.stop - time, + pad->map.granulerate_n, + GST_SECOND * pad->map.granulerate_d); + GST_INFO_OBJECT (ogg_mux, + "Got clipped last packet of duration %" G_GINT64_FORMAT " (%" + G_GINT64_FORMAT " clipped)", actual_duration, + duration - actual_duration); + duration = actual_duration; + } + GST_LOG_OBJECT (pad->collect.pad, "buffer ts %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT ", granule duration %" G_GINT64_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), @@ -1660,7 +1663,7 @@ if (next_buf) { ogg_mux->pulling->eos = FALSE; gst_buffer_unref (next_buf); - } else { + } else if (!ogg_mux->pulling->map.is_sparse) { GST_DEBUG_OBJECT (ogg_mux->pulling->collect.pad, "setting eos to true"); ogg_mux->pulling->eos = TRUE; } @@ -1673,7 +1676,7 @@ if (next_buf) { best->eos = FALSE; gst_buffer_unref (next_buf); - } else { + } else if (!best->map.is_sparse) { GST_DEBUG_OBJECT (best->collect.pad, "setting eos to true"); best->eos = TRUE; } @@ -1976,7 +1979,7 @@ GST_DEBUG_OBJECT (oggpad->collect.pad, "oggpad %p eos %d", oggpad, oggpad->eos); - if (oggpad->eos == FALSE) + if (!oggpad->eos) return FALSE; walk = g_slist_next (walk); @@ -2041,6 +2044,14 @@ if (best->eos && all_pads_eos (pads)) goto eos; + /* We might have used up a cached pad->buffer. If all streams + * have a buffer ready in collectpads, collectpads will block at + * next chain, and will never call collected again. So we make a + * last call to _queue_pads now, to ensure that collectpads can + * push to at least one pad (mostly for streams with a single + * logical stream). */ + gst_ogg_mux_queue_pads (ogg_mux, &popped); + return ret; eos: diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/gstogmparse.c gst-plugins-base1.0-1.6.1/ext/ogg/gstogmparse.c --- gst-plugins-base1.0-1.4.3/ext/ogg/gstogmparse.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/gstogmparse.c 2015-10-22 08:01:34.000000000 +0000 @@ -279,7 +279,7 @@ gst_element_class_set_static_metadata (element_class, "OGM audio stream parser", "Codec/Decoder/Audio", "parse an OGM audio header and stream", - "GStreamer maintainers "); + "GStreamer maintainers "); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory_audio)); @@ -298,7 +298,7 @@ gst_element_class_set_static_metadata (element_class, "OGM video stream parser", "Codec/Decoder/Video", "parse an OGM video header and stream", - "GStreamer maintainers "); + "GStreamer maintainers "); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory_video)); @@ -318,7 +318,7 @@ gst_element_class_set_static_metadata (element_class, "OGM text stream parser", "Codec/Decoder/Subtitle", "parse an OGM text header and stream", - "GStreamer maintainers "); + "GStreamer maintainers "); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory_text)); diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/Makefile.am gst-plugins-base1.0-1.6.1/ext/ogg/Makefile.am --- gst-plugins-base1.0-1.4.3/ext/ogg/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -35,18 +35,3 @@ $(OGG_LIBS) libgstogg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstogg_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstogg -:SHARED libgstogg \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstogg_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \ - -:LDFLAGS $(libgstogg_la_LDFLAGS) \ - $(libgstogg_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/ext/ogg/Makefile.in gst-plugins-base1.0-1.6.1/ext/ogg/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/ogg/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/ogg/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/ogg -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -234,6 +243,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -294,6 +304,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -323,6 +335,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -350,7 +364,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -365,6 +378,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -454,13 +468,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -513,6 +526,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -578,7 +592,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/ogg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/ogg/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -951,20 +964,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstogg -:SHARED libgstogg \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstogg_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \ - -:LDFLAGS $(libgstogg_la_LDFLAGS) \ - $(libgstogg_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gstbasetextoverlay.c gst-plugins-base1.0-1.6.1/ext/pango/gstbasetextoverlay.c --- gst-plugins-base1.0-1.4.3/ext/pango/gstbasetextoverlay.c 2014-09-19 06:37:46.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gstbasetextoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -22,55 +22,6 @@ * Boston, MA 02110-1301, USA. */ -/** - * SECTION:element-textoverlay - * @see_also: #GstTextRender, #GstClockOverlay, #GstTimeOverlay, #GstSubParse - * - * This plugin renders text on top of a video stream. This can be either - * static text or text from buffers received on the text sink pad, e.g. - * as produced by the subparse element. If the text sink pad is not linked, - * the text set via the "text" property will be rendered. If the text sink - * pad is linked, text will be rendered as it is received on that pad, - * honouring and matching the buffer timestamps of both input streams. - * - * The text can contain newline characters and text wrapping is enabled by - * default. - * - * - * Example launch lines - * |[ - * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink - * ]| Here is a simple pipeline that displays a static text in the top left - * corner of the video picture - * |[ - * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt. videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink - * ]| Here is another pipeline that displays subtitles from an .srt subtitle - * file, centered at the bottom of the picture and with a rectangular shading - * around the text in the background: - * - * If you do not have such a subtitle file, create one looking like this - * in a text editor: - * |[ - * 1 - * 00:00:03,000 --> 00:00:05,000 - * Hello? (3-5s) - * - * 2 - * 00:00:08,000 --> 00:00:13,000 - * Yes, this is a subtitle. Don't - * you like it? (8-13s) - * - * 3 - * 00:00:18,826 --> 00:01:02,886 - * Uh? What are you talking about? - * I don't understand (18-62s) - * ]| - * - * - */ - -/* FIXME: alloc segment as part of instance struct */ - #ifdef HAVE_CONFIG_H #include #endif @@ -84,12 +35,12 @@ #include "gstclockoverlay.h" #include "gsttextrender.h" #include +#include /* FIXME: * - use proper strides and offset for I420 * - if text is wider than the video picture, it does not get * clipped properly during blitting (if wrapping is disabled) - * - make 'shading_value' a property (or enum: light/normal/dark/verydark)? */ GST_DEBUG_CATEGORY (pango_debug); @@ -112,11 +63,11 @@ #define DEFAULT_PROP_WAIT_TEXT TRUE #define DEFAULT_PROP_AUTO_ADJUST_SIZE TRUE #define DEFAULT_PROP_VERTICAL_RENDER FALSE +#define DEFAULT_PROP_DRAW_SHADOW TRUE +#define DEFAULT_PROP_DRAW_OUTLINE TRUE #define DEFAULT_PROP_COLOR 0xffffffff #define DEFAULT_PROP_OUTLINE_COLOR 0xff000000 - -/* make a property of me */ -#define DEFAULT_SHADING_VALUE -80 +#define DEFAULT_PROP_SHADING_VALUE 80 #define MINIMUM_OUTLINE_OFFSET 1.0 #define DEFAULT_SCALE_BASIS 640 @@ -126,6 +77,7 @@ PROP_0, PROP_TEXT, PROP_SHADING, + PROP_SHADING_VALUE, PROP_HALIGNMENT, PROP_VALIGNMENT, PROP_XPAD, @@ -142,7 +94,8 @@ PROP_AUTO_ADJUST_SIZE, PROP_VERTICAL_RENDER, PROP_COLOR, - PROP_SHADOW, + PROP_DRAW_SHADOW, + PROP_DRAW_OUTLINE, PROP_OUTLINE_COLOR, PROP_LAST }; @@ -302,8 +255,6 @@ static void gst_base_text_overlay_text_pad_unlink (GstPad * pad, GstObject * parent); static void gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay); -static void gst_base_text_overlay_update_render_mode (GstBaseTextOverlay * - overlay); static void gst_base_text_overlay_finalize (GObject * object); static void gst_base_text_overlay_set_property (GObject * object, guint prop_id, @@ -316,6 +267,9 @@ PangoFontDescription * desc); static gboolean gst_base_text_overlay_can_handle_caps (GstCaps * incaps); +static void +gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay); + GType gst_base_text_overlay_get_type (void) { @@ -363,6 +317,7 @@ fontmap = pango_cairo_font_map_get_default (); klass->pango_context = pango_font_map_create_context (PANGO_FONT_MAP (fontmap)); + pango_context_set_base_gravity (klass->pango_context, PANGO_GRAVITY_SOUTH); if (klass->pango_lock) g_mutex_unlock (klass->pango_lock); } @@ -403,6 +358,11 @@ g_param_spec_boolean ("shaded-background", "shaded background", "Whether to shade the background under the text area", DEFAULT_PROP_SHADING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SHADING_VALUE, + g_param_spec_uint ("shading-value", "background shading value", + "Shading value to apply if shaded-background is true", 1, 255, + DEFAULT_PROP_SHADING_VALUE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VALIGNMENT, g_param_spec_enum ("valignment", "vertical alignment", "Vertical alignment of the text", GST_TYPE_BASE_TEXT_OVERLAY_VALIGN, @@ -423,11 +383,12 @@ g_param_spec_int ("deltax", "X position modifier", "Shift X position to the left or to the right. Unit is pixels.", G_MININT, G_MAXINT, DEFAULT_PROP_DELTAX, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DELTAY, g_param_spec_int ("deltay", "Y position modifier", "Shift Y position up or down. Unit is pixels.", G_MININT, G_MAXINT, - DEFAULT_PROP_DELTAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + GST_PARAM_CONTROLLABLE | DEFAULT_PROP_DELTAY, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstBaseTextOverlay:xpos: * @@ -458,7 +419,7 @@ "Pango font description of font to be used for rendering. " "See documentation of pango_font_description_from_string " "for syntax.", DEFAULT_PROP_FONT_DESC, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstBaseTextOverlay:color: * @@ -503,6 +464,30 @@ DEFAULT_PROP_SILENT, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); /** + * GstBaseTextOverlay:draw-shadow: + * + * If set, a text shadow is drawn. + * + * Since: 1.6 + */ + g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DRAW_SHADOW, + g_param_spec_boolean ("draw-shadow", "draw-shadow", + "Whether to draw shadow", + DEFAULT_PROP_DRAW_SHADOW, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstBaseTextOverlay:draw-outline: + * + * If set, an outline is drawn. + * + * Since: 1.6 + */ + g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DRAW_OUTLINE, + g_param_spec_boolean ("draw-outline", "draw-outline", + "Whether to draw outline", + DEFAULT_PROP_DRAW_OUTLINE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** * GstBaseTextOverlay:wait-text: * * If set, the video will block until a subtitle is received on the text pad. @@ -608,7 +593,6 @@ gst_element_add_pad (GST_ELEMENT (overlay), overlay->srcpad); g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); - overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT; overlay->layout = pango_layout_new (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_context); @@ -631,8 +615,10 @@ overlay->wrap_mode = DEFAULT_PROP_WRAP_MODE; overlay->want_shading = DEFAULT_PROP_SHADING; - overlay->shading_value = DEFAULT_SHADING_VALUE; + overlay->shading_value = DEFAULT_PROP_SHADING_VALUE; overlay->silent = DEFAULT_PROP_SILENT; + overlay->draw_shadow = DEFAULT_PROP_DRAW_SHADOW; + overlay->draw_outline = DEFAULT_PROP_DRAW_OUTLINE; overlay->wait_text = DEFAULT_PROP_WAIT_TEXT; overlay->auto_adjust_size = DEFAULT_PROP_AUTO_ADJUST_SIZE; @@ -640,11 +626,30 @@ overlay->need_render = TRUE; overlay->text_image = NULL; overlay->use_vertical_render = DEFAULT_PROP_VERTICAL_RENDER; - gst_base_text_overlay_update_render_mode (overlay); + + overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT; + pango_layout_set_alignment (overlay->layout, + (PangoAlignment) overlay->line_align); overlay->text_buffer = NULL; overlay->text_linked = FALSE; + overlay->composition = NULL; + overlay->upstream_composition = NULL; + + overlay->width = 1; + overlay->height = 1; + + overlay->window_width = 1; + overlay->window_height = 1; + + overlay->image_width = 1; + overlay->image_height = 1; + + overlay->render_width = 1; + overlay->render_height = 1; + overlay->render_scale = 1.0l; + g_mutex_init (&overlay->lock); g_cond_init (&overlay->cond); gst_segment_init (&overlay->segment, GST_FORMAT_TIME); @@ -652,49 +657,20 @@ } static void -gst_base_text_overlay_update_wrap_mode (GstBaseTextOverlay * overlay) +gst_base_text_overlay_set_wrap_mode (GstBaseTextOverlay * overlay, gint width) { if (overlay->wrap_mode == GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE) { GST_DEBUG_OBJECT (overlay, "Set wrap mode NONE"); pango_layout_set_width (overlay->layout, -1); } else { - int width; - - if (overlay->auto_adjust_size) { - width = DEFAULT_SCALE_BASIS * PANGO_SCALE; - if (overlay->use_vertical_render) { - width = width * (overlay->height - overlay->ypad * 2) / overlay->width; - } - } else { - width = - (overlay->use_vertical_render ? overlay->height : overlay->width) * - PANGO_SCALE; - } + width = width * PANGO_SCALE; - GST_DEBUG_OBJECT (overlay, "Set layout width %d", overlay->width); + GST_DEBUG_OBJECT (overlay, "Set layout width %d", width); GST_DEBUG_OBJECT (overlay, "Set wrap mode %d", overlay->wrap_mode); pango_layout_set_width (overlay->layout, width); - pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode); } -} - -static void -gst_base_text_overlay_update_render_mode (GstBaseTextOverlay * overlay) -{ - PangoMatrix matrix = PANGO_MATRIX_INIT; - PangoContext *context = pango_layout_get_context (overlay->layout); - if (overlay->use_vertical_render) { - pango_matrix_rotate (&matrix, -90); - pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO); - pango_context_set_matrix (context, &matrix); - pango_layout_set_alignment (overlay->layout, PANGO_ALIGN_LEFT); - } else { - pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH); - pango_context_set_matrix (context, &matrix); - pango_layout_set_alignment (overlay->layout, - (PangoAlignment) overlay->line_align); - } + pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode); } static gboolean @@ -714,17 +690,22 @@ static gboolean gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps) { - GstQuery *query; + gboolean upstream_has_meta = FALSE; + gboolean caps_has_meta = FALSE; + gboolean alloc_has_meta = FALSE; gboolean attach = FALSE; - gboolean caps_has_meta = TRUE; - gboolean ret; + gboolean ret = TRUE; + guint width, height; GstCapsFeatures *f; - GstCaps *original_caps; - gboolean original_has_meta = FALSE; - gboolean allocation_ret = TRUE; + GstCaps *overlay_caps; + GstQuery *query; + guint alloc_index; GST_DEBUG_OBJECT (overlay, "performing negotiation"); + /* Clear any pending reconfigure to avoid negotiating twice */ + gst_pad_check_reconfigure (overlay->srcpad); + if (!caps) caps = gst_pad_get_current_caps (overlay->video_sinkpad); else @@ -733,88 +714,119 @@ if (!caps || gst_caps_is_empty (caps)) goto no_format; - original_caps = caps; + /* Check if upstream caps have meta */ + if ((f = gst_caps_get_features (caps, 0))) { + upstream_has_meta = gst_caps_features_contains (f, + GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); + } - /* Try to use the overlay meta if possible */ - f = gst_caps_get_features (caps, 0); + /* Initialize dimensions */ + width = overlay->width; + height = overlay->height; - /* if the caps doesn't have the overlay meta, we query if downstream - * accepts it before trying the version without the meta - * If upstream already is using the meta then we can only use it */ - if (!f - || !gst_caps_features_contains (f, - GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION)) { - GstCaps *overlay_caps; + if (upstream_has_meta) { + overlay_caps = gst_caps_ref (caps); + } else { + GstCaps *peercaps; - /* In this case we added the meta, but we can work without it - * so preserve the original caps so we can use it as a fallback */ + /* BaseTransform requires caps for the allocation query to work */ overlay_caps = gst_caps_copy (caps); - f = gst_caps_get_features (overlay_caps, 0); - if (f == NULL) { - f = gst_caps_features_new - (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, NULL); - } else { - gst_caps_features_add (f, - GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); - } + gst_caps_features_add (f, + GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); - ret = gst_pad_peer_query_accept_caps (overlay->srcpad, overlay_caps); - GST_DEBUG_OBJECT (overlay, "Downstream accepts the overlay meta: %d", ret); - if (ret) { - gst_caps_unref (caps); - caps = overlay_caps; + /* Then check if downstream accept overlay composition in caps */ + /* FIXME: We should probably check if downstream *prefers* the + * overlay meta, and only enforce usage of it if we can't handle + * the format ourselves and thus would have to drop the overlays. + * Otherwise we should prefer what downstream wants here. + */ + peercaps = gst_pad_peer_query_caps (overlay->srcpad, NULL); + caps_has_meta = gst_caps_can_intersect (peercaps, overlay_caps); + gst_caps_unref (peercaps); - } else { - /* fallback to the original */ - gst_caps_unref (overlay_caps); - caps_has_meta = FALSE; - } - } else { - original_has_meta = TRUE; + GST_DEBUG ("caps have overlay meta %d", caps_has_meta); } - GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, caps); - ret = gst_pad_set_caps (overlay->srcpad, caps); - if (ret) { - /* find supported meta */ - query = gst_query_new_allocation (caps, FALSE); + if (upstream_has_meta || caps_has_meta) { + /* Send caps immediatly, it's needed by GstBaseTransform to get a reply + * from allocation query */ + ret = gst_pad_set_caps (overlay->srcpad, overlay_caps); + + /* First check if the allocation meta has compositon */ + query = gst_query_new_allocation (overlay_caps, FALSE); if (!gst_pad_peer_query (overlay->srcpad, query)) { /* no problem, we use the query defaults */ GST_DEBUG_OBJECT (overlay, "ALLOCATION query failed"); - allocation_ret = FALSE; + + /* In case we were flushing, mark reconfigure and fail this method, + * will make it retry */ + if (overlay->video_flushing) + ret = FALSE; } - if (caps_has_meta && gst_query_find_allocation_meta (query, - GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, NULL)) - attach = TRUE; + alloc_has_meta = gst_query_find_allocation_meta (query, + GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, &alloc_index); + + GST_DEBUG ("sink alloc has overlay meta %d", alloc_has_meta); + + if (alloc_has_meta) { + const GstStructure *params; + + gst_query_parse_nth_allocation_meta (query, alloc_index, ¶ms); + if (params) { + if (gst_structure_get (params, "width", G_TYPE_UINT, &width, + "height", G_TYPE_UINT, &height, NULL)) { + GST_DEBUG ("received window size: %dx%d", width, height); + g_assert (width != 0 && height != 0); + } + } + } gst_query_unref (query); } - overlay->attach_compo_to_buffer = attach; - - if (!allocation_ret && overlay->video_flushing) { - ret = FALSE; - } else if (original_caps && !original_has_meta && !attach) { - if (caps_has_meta) { - /* Some elements (fakesink) claim to accept the meta on caps but won't - put it in the allocation query result, this leads below - check to fail. Prevent this by removing the meta from caps */ - gst_caps_unref (caps); - caps = gst_caps_ref (original_caps); - ret = gst_pad_set_caps (overlay->srcpad, caps); - if (ret && !gst_base_text_overlay_can_handle_caps (caps)) - ret = FALSE; + /* Update render size if needed */ + overlay->window_width = width; + overlay->window_height = height; + gst_base_text_overlay_update_render_size (overlay); + + /* For backward compatbility, we will prefer bliting if downstream + * allocation does not support the meta. In other case we will prefer + * attaching, and will fail the negotiation in the unlikely case we are + * force to blit, but format isn't supported. */ + + if (upstream_has_meta) { + attach = TRUE; + } else if (caps_has_meta) { + if (alloc_has_meta) { + attach = TRUE; + } else { + /* Don't attach unless we cannot handle the format */ + attach = !gst_base_text_overlay_can_handle_caps (caps); } + } else { + ret = gst_base_text_overlay_can_handle_caps (caps); } + /* If we attach, then pick the overlay caps */ + if (attach) { + GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, overlay_caps); + /* Caps where already sent */ + } else if (ret) { + GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, caps); + ret = gst_pad_set_caps (overlay->srcpad, caps); + } + + overlay->attach_compo_to_buffer = attach; + if (!ret) { GST_DEBUG_OBJECT (overlay, "negotiation failed, schedule reconfigure"); gst_pad_mark_reconfigure (overlay->srcpad); } + gst_caps_unref (overlay_caps); gst_caps_unref (caps); return ret; @@ -850,6 +862,11 @@ if (!gst_video_info_from_caps (&info, caps)) goto invalid_caps; + /* Render again if size have changed */ + if (GST_VIDEO_INFO_WIDTH (&info) != GST_VIDEO_INFO_WIDTH (&overlay->info) || + GST_VIDEO_INFO_HEIGHT (&info) != GST_VIDEO_INFO_HEIGHT (&overlay->info)) + overlay->need_render = TRUE; + overlay->info = info; overlay->format = GST_VIDEO_INFO_FORMAT (&info); overlay->width = GST_VIDEO_INFO_WIDTH (&info); @@ -858,15 +875,12 @@ ret = gst_base_text_overlay_negotiate (overlay, caps); GST_BASE_TEXT_OVERLAY_LOCK (overlay); - g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + if (!overlay->attach_compo_to_buffer && !gst_base_text_overlay_can_handle_caps (caps)) { GST_DEBUG_OBJECT (overlay, "unsupported caps %" GST_PTR_FORMAT, caps); ret = FALSE; } - - gst_base_text_overlay_update_wrap_mode (overlay); - g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); return ret; @@ -890,7 +904,6 @@ case PROP_TEXT: g_free (overlay->default_text); overlay->default_text = g_value_dup_string (value); - overlay->need_render = TRUE; break; case PROP_SHADING: overlay->want_shading = g_value_get_boolean (value); @@ -921,9 +934,6 @@ break; case PROP_WRAP_MODE: overlay->wrap_mode = g_value_get_enum (value); - g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); - gst_base_text_overlay_update_wrap_mode (overlay); - g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); break; case PROP_FONT_DESC: { @@ -954,6 +964,12 @@ case PROP_SILENT: overlay->silent = g_value_get_boolean (value); break; + case PROP_DRAW_SHADOW: + overlay->draw_shadow = g_value_get_boolean (value); + break; + case PROP_DRAW_OUTLINE: + overlay->draw_outline = g_value_get_boolean (value); + break; case PROP_LINE_ALIGNMENT: overlay->line_align = g_value_get_enum (value); g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); @@ -966,14 +982,21 @@ break; case PROP_AUTO_ADJUST_SIZE: overlay->auto_adjust_size = g_value_get_boolean (value); - overlay->need_render = TRUE; break; case PROP_VERTICAL_RENDER: overlay->use_vertical_render = g_value_get_boolean (value); - g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); - gst_base_text_overlay_update_render_mode (overlay); - g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); - overlay->need_render = TRUE; + if (overlay->use_vertical_render) { + overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP; + overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT; + overlay->line_align = GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT; + g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + pango_layout_set_alignment (overlay->layout, + (PangoAlignment) overlay->line_align); + g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + } + break; + case PROP_SHADING_VALUE: + overlay->shading_value = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1028,6 +1051,12 @@ case PROP_SILENT: g_value_set_boolean (value, overlay->silent); break; + case PROP_DRAW_SHADOW: + g_value_set_boolean (value, overlay->draw_shadow); + break; + case PROP_DRAW_OUTLINE: + g_value_set_boolean (value, overlay->draw_outline); + break; case PROP_LINE_ALIGNMENT: g_value_set_enum (value, overlay->line_align); break; @@ -1046,6 +1075,23 @@ case PROP_OUTLINE_COLOR: g_value_set_uint (value, overlay->outline_color); break; + case PROP_SHADING_VALUE: + g_value_set_uint (value, overlay->shading_value); + break; + case PROP_FONT_DESC: + { + const PangoFontDescription *desc; + + g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + desc = pango_layout_get_font_description (overlay->layout); + if (!desc) + g_value_set_string (value, ""); + else { + g_value_take_string (value, pango_font_description_to_string (desc)); + } + g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1084,64 +1130,57 @@ return ret; } -static gboolean -gst_base_text_overlay_src_event (GstPad * pad, GstObject * parent, - GstEvent * event) +static void +gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay) { - gboolean ret = FALSE; - GstBaseTextOverlay *overlay = NULL; - - overlay = GST_BASE_TEXT_OVERLAY (parent); + gdouble video_aspect = (gdouble) overlay->width / (gdouble) overlay->height; + gdouble window_aspect = (gdouble) overlay->window_width / + (gdouble) overlay->window_height; - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_SEEK:{ - GstSeekFlags flags; + guint text_buffer_width = 0; + guint text_buffer_height = 0; - /* We don't handle seek if we have not text pad */ - if (!overlay->text_linked) { - GST_DEBUG_OBJECT (overlay, "seek received, pushing upstream"); - ret = gst_pad_push_event (overlay->video_sinkpad, event); - goto beach; - } + if (video_aspect >= window_aspect) { + text_buffer_width = overlay->window_width; + text_buffer_height = window_aspect * overlay->window_height / video_aspect; + } else if (video_aspect < window_aspect) { + text_buffer_width = video_aspect * overlay->window_width / window_aspect; + text_buffer_height = overlay->window_height; + } - GST_DEBUG_OBJECT (overlay, "seek received, driving from here"); + if ((overlay->render_width == text_buffer_width) && + (overlay->render_height == text_buffer_height)) + return; - gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL); + overlay->need_render = TRUE; + overlay->render_width = text_buffer_width; + overlay->render_height = text_buffer_height; + overlay->render_scale = (gdouble) overlay->render_width / + (gdouble) overlay->width; + + GST_DEBUG ("updating render dimensions %dx%d from stream %dx%d, window %dx%d " + "and render scale %f", overlay->render_width, overlay->render_height, + overlay->width, overlay->height, overlay->window_width, + overlay->window_height, overlay->render_scale); +} - /* Flush downstream, only for flushing seek */ - if (flags & GST_SEEK_FLAG_FLUSH) - gst_pad_push_event (overlay->srcpad, gst_event_new_flush_start ()); +static gboolean +gst_base_text_overlay_src_event (GstPad * pad, GstObject * parent, + GstEvent * event) +{ + GstBaseTextOverlay *overlay; + gboolean ret; - /* Mark ourself as flushing, unblock chains */ - GST_BASE_TEXT_OVERLAY_LOCK (overlay); - overlay->video_flushing = TRUE; - overlay->text_flushing = TRUE; - gst_base_text_overlay_pop_text (overlay); - GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); + overlay = GST_BASE_TEXT_OVERLAY (parent); - /* Seek on each sink pad */ - gst_event_ref (event); - ret = gst_pad_push_event (overlay->video_sinkpad, event); - if (ret) { - ret = gst_pad_push_event (overlay->text_sinkpad, event); - } else { - gst_event_unref (event); - } - break; - } - default: - if (overlay->text_linked) { - gst_event_ref (event); - ret = gst_pad_push_event (overlay->video_sinkpad, event); - gst_pad_push_event (overlay->text_sinkpad, event); - } else { - ret = gst_pad_push_event (overlay->video_sinkpad, event); - } - break; + if (overlay->text_linked) { + gst_event_ref (event); + ret = gst_pad_push_event (overlay->video_sinkpad, event); + gst_pad_push_event (overlay->text_sinkpad, event); + } else { + ret = gst_pad_push_event (overlay->video_sinkpad, event); } -beach: - return ret; } @@ -1370,30 +1409,26 @@ gint * xpos, gint * ypos) { gint width, height; - GstBaseTextOverlayVAlign valign; - GstBaseTextOverlayHAlign halign; - - width = overlay->image_width; - height = overlay->image_height; - if (overlay->use_vertical_render) - halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT; - else - halign = overlay->halign; + width = overlay->logical_rect.width; + height = overlay->logical_rect.height; - switch (halign) { + *xpos = overlay->ink_rect.x - overlay->logical_rect.x; + switch (overlay->halign) { case GST_BASE_TEXT_OVERLAY_HALIGN_LEFT: - *xpos = overlay->xpad; + *xpos += overlay->xpad; + *xpos = MAX (0, *xpos); break; case GST_BASE_TEXT_OVERLAY_HALIGN_CENTER: - *xpos = (overlay->width - width) / 2; + *xpos += (overlay->width - width) / 2; break; case GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT: - *xpos = overlay->width - width - overlay->xpad; + *xpos += overlay->width - width - overlay->xpad; + *xpos = MIN (overlay->width - overlay->ink_rect.width, *xpos); break; case GST_BASE_TEXT_OVERLAY_HALIGN_POS: - *xpos = (gint) (overlay->width * overlay->xpos) - width / 2; - *xpos = CLAMP (*xpos, 0, overlay->width - width); + *xpos += (gint) (overlay->width * overlay->xpos) - width / 2; + *xpos = CLAMP (*xpos, 0, overlay->width - overlay->ink_rect.width); if (*xpos < 0) *xpos = 0; break; @@ -1402,24 +1437,25 @@ } *xpos += overlay->deltax; - if (overlay->use_vertical_render) - valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP; - else - valign = overlay->valign; - - switch (valign) { + *ypos = overlay->ink_rect.y - overlay->logical_rect.y; + switch (overlay->valign) { case GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM: - *ypos = overlay->height - height - overlay->ypad; + /* This will be the same as baseline, if there is enough padding, + * otherwise it will avoid clipping the text */ + *ypos += overlay->height - height - overlay->ypad; + *ypos = MIN (overlay->height - overlay->ink_rect.height, *ypos); break; case GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE: - *ypos = overlay->height - (height + overlay->ypad); + *ypos += overlay->height - height - overlay->ypad; + /* Don't clip, this would not respect the base line */ break; case GST_BASE_TEXT_OVERLAY_VALIGN_TOP: - *ypos = overlay->ypad; + *ypos += overlay->ypad; + *ypos = MAX (0.0, *ypos); break; case GST_BASE_TEXT_OVERLAY_VALIGN_POS: *ypos = (gint) (overlay->height * overlay->ypos) - height / 2; - *ypos = CLAMP (*ypos, 0, overlay->height - height); + *ypos = CLAMP (*ypos, 0, overlay->height - overlay->ink_rect.height); break; case GST_BASE_TEXT_OVERLAY_VALIGN_CENTER: *ypos = (overlay->height - height) / 2; @@ -1429,6 +1465,8 @@ break; } *ypos += overlay->deltay; + + GST_DEBUG_OBJECT (overlay, "Placing overlay at (%d, %d)", *xpos, *ypos); } static inline void @@ -1437,21 +1475,49 @@ gint xpos, ypos; GstVideoOverlayRectangle *rectangle; - gst_base_text_overlay_get_pos (overlay, &xpos, &ypos); + if (overlay->text_image && overlay->image_width != 1) { + gint render_width, render_height; + + gst_base_text_overlay_get_pos (overlay, &xpos, &ypos); + + render_width = overlay->ink_rect.width; + render_height = overlay->ink_rect.height; + + GST_DEBUG ("updating composition for '%s' with window size %dx%d, " + "buffer size %dx%d, render size %dx%d and position (%d, %d)", + overlay->default_text, overlay->window_width, overlay->window_height, + overlay->image_width, overlay->image_height, render_width, + render_height, xpos, ypos); - if (overlay->text_image) { gst_buffer_add_video_meta (overlay->text_image, GST_VIDEO_FRAME_FLAG_NONE, GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, overlay->image_width, overlay->image_height); + rectangle = gst_video_overlay_rectangle_new_raw (overlay->text_image, - xpos, ypos, overlay->image_width, overlay->image_height, + xpos, ypos, render_width, render_height, GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA); if (overlay->composition) gst_video_overlay_composition_unref (overlay->composition); + overlay->composition = gst_video_overlay_composition_new (rectangle); gst_video_overlay_rectangle_unref (rectangle); + if (overlay->upstream_composition) { + guint num_overlays = + gst_video_overlay_composition_n_rectangles + (overlay->upstream_composition); + + for (guint i = 0; i < num_overlays; i++) { + GstVideoOverlayRectangle *rectangle; + rectangle = + gst_video_overlay_composition_get_rectangle + (overlay->upstream_composition, i); + gst_video_overlay_composition_add_rectangle (overlay->composition, + rectangle); + } + } + } else if (overlay->composition) { gst_video_overlay_composition_unref (overlay->composition); overlay->composition = NULL; @@ -1476,9 +1542,14 @@ cairo_surface_t *surface; PangoRectangle ink_rect, logical_rect; cairo_matrix_t cairo_matrix; - int width, height; + gint unscaled_width, unscaled_height; + gint width, height; + gboolean full_width = FALSE; double scalef = 1.0; double a, r, g, b; + gdouble shadow_offset = 0.0; + gdouble outline_offset = 0.0; + gint xpad = 0, ypad = 0; GstBuffer *buffer; GstMapInfo map; @@ -1488,6 +1559,23 @@ /* 640 pixel is default */ scalef = (double) (overlay->width) / DEFAULT_SCALE_BASIS; } + + if (overlay->draw_shadow) + shadow_offset = ceil (overlay->shadow_offset); + + /* This value is uses as cairo line width, which is the diameter of a pen + * that is circular. That's why only half of it is used to offset */ + if (overlay->draw_outline) + outline_offset = ceil (overlay->outline_offset); + + if (overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_LEFT || + overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT) + xpad = overlay->xpad; + + if (overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_TOP || + overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM) + ypad = overlay->ypad; + pango_layout_set_width (overlay->layout, -1); /* set text on pango layout */ pango_layout_set_markup (overlay->layout, string, textlen); @@ -1495,58 +1583,136 @@ /* get subtitle image size */ pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect); - width = (logical_rect.width + overlay->shadow_offset) * scalef; + unscaled_width = ink_rect.width + shadow_offset + outline_offset; + width = ceil (unscaled_width * scalef); - if (width + overlay->deltax > - (overlay->use_vertical_render ? overlay->height : overlay->width)) { - /* - * subtitle image width is larger then overlay width - * so rearrange overlay wrap mode. - */ - gst_base_text_overlay_update_wrap_mode (overlay); + /* + * subtitle image width can be larger then overlay width + * so rearrange overlay wrap mode. + */ + if (overlay->use_vertical_render) { + if (width + ypad > overlay->height) { + width = overlay->height - ypad; + full_width = TRUE; + } + } else if (width + xpad > overlay->width) { + width = overlay->width - xpad; + full_width = TRUE; + } + + if (full_width) { + unscaled_width = width / scalef; + gst_base_text_overlay_set_wrap_mode (overlay, + unscaled_width - shadow_offset - outline_offset); pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect); - width = overlay->width; + + unscaled_width = ink_rect.width + shadow_offset + outline_offset; + width = ceil (unscaled_width * scalef); } - height = - (logical_rect.height + logical_rect.y + overlay->shadow_offset) * scalef; - if (height > overlay->height) { - height = overlay->height; + unscaled_height = ink_rect.height + shadow_offset + outline_offset; + height = ceil (unscaled_height * scalef); + + if (overlay->use_vertical_render) { + if (height + xpad > overlay->width) { + height = overlay->width - xpad; + unscaled_height = width / scalef; + } + } else if (height + ypad > overlay->height) { + height = overlay->height - ypad; + unscaled_height = height / scalef; + } + + GST_DEBUG_OBJECT (overlay, "Rendering with ink rect (%d, %d) %dx%d and " + "logical rect (%d, %d) %dx%d", ink_rect.x, ink_rect.y, ink_rect.width, + ink_rect.height, logical_rect.x, logical_rect.y, logical_rect.width, + logical_rect.height); + GST_DEBUG_OBJECT (overlay, "Rendering with width %d and height %d " + "(shadow %f, outline %f)", unscaled_width, unscaled_height, + shadow_offset, outline_offset); + + + /* Save and scale the rectangles so get_pos() can place the text */ + overlay->ink_rect.x = + ceil ((ink_rect.x - ceil (outline_offset / 2.0l)) * scalef); + overlay->ink_rect.y = + ceil ((ink_rect.y - ceil (outline_offset / 2.0l)) * scalef); + overlay->ink_rect.width = width; + overlay->ink_rect.height = height; + + overlay->logical_rect.x = + ceil ((logical_rect.x - ceil (outline_offset / 2.0l)) * scalef); + overlay->logical_rect.y = + ceil ((logical_rect.y - ceil (outline_offset / 2.0l)) * scalef); + overlay->logical_rect.width = + ceil ((logical_rect.width + shadow_offset + outline_offset) * scalef); + overlay->logical_rect.height = + ceil ((logical_rect.height + shadow_offset + outline_offset) * scalef); + + /* flip the rectangle if doing vertical render */ + if (overlay->use_vertical_render) { + PangoRectangle tmp = overlay->ink_rect; + + overlay->ink_rect.x = tmp.y; + overlay->ink_rect.y = tmp.x; + overlay->ink_rect.width = tmp.height; + overlay->ink_rect.height = tmp.width; + /* We want the top left corect, but we now have the top right */ + overlay->ink_rect.x += overlay->ink_rect.width; + + tmp = overlay->logical_rect; + overlay->logical_rect.x = tmp.y; + overlay->logical_rect.y = tmp.x; + overlay->logical_rect.width = tmp.height; + overlay->logical_rect.height = tmp.width; + overlay->logical_rect.x += overlay->logical_rect.width; + } + + /* scale to reported window size */ + width = ceil (width * overlay->render_scale); + height = ceil (height * overlay->render_scale); + scalef *= overlay->render_scale; + + if (width <= 0 || height <= 0) { + g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + GST_DEBUG_OBJECT (overlay, + "Overlay is outside video frame. Skipping text rendering"); + return; + } + + if (unscaled_height <= 0 || unscaled_width <= 0) { + g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); + GST_DEBUG_OBJECT (overlay, + "Overlay is outside video frame. Skipping text rendering"); + return; } + /* Prepare the transformation matrix. Note that the transformation happens + * in reverse order. So for horizontal text, we will translate and then + * scale. This is important to understand which scale shall be used. */ + cairo_matrix_init_scale (&cairo_matrix, scalef, scalef); + if (overlay->use_vertical_render) { - PangoRectangle rect; - PangoContext *context; - PangoMatrix matrix = PANGO_MATRIX_INIT; - int tmp; - - context = pango_layout_get_context (overlay->layout); - - pango_matrix_rotate (&matrix, -90); - - rect.x = rect.y = 0; - rect.width = width; - rect.height = height; - pango_matrix_transform_pixel_rectangle (&matrix, &rect); - matrix.x0 = -rect.x; - matrix.y0 = -rect.y; - - pango_context_set_matrix (context, &matrix); - - cairo_matrix.xx = matrix.xx; - cairo_matrix.yx = matrix.yx; - cairo_matrix.xy = matrix.xy; - cairo_matrix.yy = matrix.yy; - cairo_matrix.x0 = matrix.x0; - cairo_matrix.y0 = matrix.y0; - cairo_matrix_scale (&cairo_matrix, scalef, scalef); + gint tmp; + + /* tranlate to the center of the image, rotate, and tranlate the rotated + * image back to the right place */ + cairo_matrix_translate (&cairo_matrix, unscaled_height / 2.0l, + unscaled_width / 2.0l); + /* 90 degree clockwise rotation which is PI / 2 in radiants */ + cairo_matrix_rotate (&cairo_matrix, G_PI_2); + cairo_matrix_translate (&cairo_matrix, -(unscaled_width / 2.0l), + -(unscaled_height / 2.0l)); + /* Swap width and height */ tmp = height; height = width; width = tmp; - } else { - cairo_matrix_init_scale (&cairo_matrix, scalef, scalef); } + cairo_matrix_translate (&cairo_matrix, + ceil (outline_offset / 2.0l) - ink_rect.x, + ceil (outline_offset / 2.0l) - ink_rect.y); + /* reallocate overlay buffer */ buffer = gst_buffer_new_and_alloc (4 * width * height); gst_buffer_replace (&overlay->text_image, buffer); @@ -1563,9 +1729,6 @@ cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - if (overlay->want_shading) - cairo_paint_with_alpha (cr, overlay->shading_value); - /* apply transformations */ cairo_set_matrix (cr, &cairo_matrix); @@ -1582,7 +1745,7 @@ */ /* draw shadow text */ - { + if (overlay->draw_shadow) { PangoAttrList *origin_attr, *filtered_attr, *temp_attr; /* Store a ref on the original attributes for later restoration */ @@ -1607,18 +1770,20 @@ cairo_restore (cr); } - a = (overlay->outline_color >> 24) & 0xff; - r = (overlay->outline_color >> 16) & 0xff; - g = (overlay->outline_color >> 8) & 0xff; - b = (overlay->outline_color >> 0) & 0xff; - /* draw outline text */ - cairo_save (cr); - cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0); - cairo_set_line_width (cr, overlay->outline_offset); - pango_cairo_layout_path (cr, overlay->layout); - cairo_stroke (cr); - cairo_restore (cr); + if (overlay->draw_outline) { + a = (overlay->outline_color >> 24) & 0xff; + r = (overlay->outline_color >> 16) & 0xff; + g = (overlay->outline_color >> 8) & 0xff; + b = (overlay->outline_color >> 0) & 0xff; + + cairo_save (cr); + cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0); + cairo_set_line_width (cr, overlay->outline_offset); + pango_cairo_layout_path (cr, overlay->layout); + cairo_stroke (cr); + cairo_restore (cr); + } a = (overlay->color >> 24) & 0xff; r = (overlay->color >> 16) & 0xff; @@ -1634,9 +1799,10 @@ cairo_destroy (cr); cairo_surface_destroy (surface); gst_buffer_unmap (buffer, &map); - overlay->image_width = width; - overlay->image_height = height; - overlay->baseline_y = ink_rect.y; + if (width != 0) + overlay->image_width = width; + if (height != 0) + overlay->image_height = height; g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock); gst_base_text_overlay_set_composition (overlay); @@ -1654,7 +1820,7 @@ for (i = y0; i < y1; ++i) { for (j = x0; j < x1; ++j) { - gint y = dest_ptr[(i * dest_stride) + j] + overlay->shading_value; + gint y = dest_ptr[(i * dest_stride) + j] - overlay->shading_value; dest_ptr[(i * dest_stride) + j] = CLAMP (y, 0, 255); } @@ -1689,7 +1855,7 @@ gint y_pos; y_pos = (i * dest_stride) + j * pixel_stride; - y = dest_ptr[y_pos] + overlay->shading_value; + y = dest_ptr[y_pos] - overlay->shading_value; dest_ptr[y_pos] = CLAMP (y, 0, 255); } @@ -1714,7 +1880,7 @@ y_pos = (i * 4 * overlay->width) + j * 4; for (k = 0; k < 4; k++) { - y = dest_ptr[y_pos + k] + overlay->shading_value; + y = dest_ptr[y_pos + k] - overlay->shading_value; dest_ptr[y_pos + k] = CLAMP (y, 0, 255); } } @@ -1730,7 +1896,7 @@ gint y, x, stride, shading_val, tmp; guint8 *p; - shading_val = overlay->shading_value; + shading_val = -overlay->shading_value; stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); for (y = y0; y < y1; ++y) { @@ -1754,7 +1920,7 @@ gint y, x, stride, shading_val, tmp; guint8 *p; - shading_val = overlay->shading_value; + shading_val = -overlay->shading_value; stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0); /* IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) */ @@ -1790,7 +1956,7 @@ gint y, y_pos, k;\ y_pos = (i * 4 * overlay->width) + j * 4;\ for (k = OFFSET; k < 3+OFFSET; k++) {\ - y = dest_ptr[y_pos + k] + overlay->shading_value;\ + y = dest_ptr[y_pos + k] - overlay->shading_value;\ dest_ptr[y_pos + k] = CLAMP (y, 0, 255);\ }\ }\ @@ -2294,7 +2460,9 @@ if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) overlay->text_segment.position = clip_start; - overlay->text_buffer = buffer; + overlay->text_buffer = buffer; /* pass ownership of @buffer */ + buffer = NULL; + /* That's a new text buffer we need to render */ overlay->need_render = TRUE; @@ -2305,6 +2473,8 @@ GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); beach: + if (buffer) + gst_buffer_unref (buffer); return ret; } @@ -2319,8 +2489,22 @@ gboolean in_seg = FALSE; guint64 start, stop, clip_start = 0, clip_stop = 0; gchar *text = NULL; + GstVideoOverlayCompositionMeta *composition_meta; overlay = GST_BASE_TEXT_OVERLAY (parent); + + composition_meta = gst_buffer_get_video_overlay_composition_meta (buffer); + if (composition_meta) { + if (overlay->upstream_composition != composition_meta->overlay) { + GST_DEBUG ("GstVideoOverlayCompositionMeta found."); + overlay->upstream_composition = composition_meta->overlay; + overlay->need_render = TRUE; + } + } else if (overlay->upstream_composition != NULL) { + overlay->upstream_composition = NULL; + overlay->need_render = TRUE; + } + klass = GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay); if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gstbasetextoverlay.h gst-plugins-base1.0-1.6.1/ext/pango/gstbasetextoverlay.h --- gst-plugins-base1.0-1.4.3/ext/pango/gstbasetextoverlay.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gstbasetextoverlay.h 2015-10-22 08:01:34.000000000 +0000 @@ -1,3 +1,27 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * Copyright (C) <2003> David Schleef + * Copyright (C) <2006> Julien Moutte + * Copyright (C) <2006> Zeeshan Ali + * Copyright (C) <2006-2008> Tim-Philipp Müller + * Copyright (C) <2009> Young-Ho Cha + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #ifndef __GST_BASE_TEXT_OVERLAY_H__ #define __GST_BASE_TEXT_OVERLAY_H__ @@ -104,11 +128,11 @@ GstSegment segment; GstSegment text_segment; GstBuffer *text_buffer; - gboolean text_linked; - gboolean video_flushing; - gboolean video_eos; - gboolean text_flushing; - gboolean text_eos; + gboolean text_linked; + gboolean video_flushing; + gboolean video_eos; + gboolean text_flushing; + gboolean text_eos; GMutex lock; GCond cond; /* to signal removal of a queued text @@ -116,16 +140,13 @@ * a text segment update, or a change * in status (e.g. shutdown, flushing) */ + /* stream metrics */ GstVideoInfo info; GstVideoFormat format; gint width; gint height; - GstBaseTextOverlayVAlign valign; - GstBaseTextOverlayHAlign halign; - GstBaseTextOverlayWrapMode wrap_mode; - GstBaseTextOverlayLineAlign line_align; - + /* properties */ gint xpad; gint ypad; gint deltax; @@ -137,26 +158,49 @@ gboolean silent; gboolean wait_text; guint color, outline_color; - PangoLayout *layout; - gdouble shadow_offset; - gdouble outline_offset; + gboolean auto_adjust_size; + gboolean draw_shadow; + gboolean draw_outline; + gint shading_value; /* for timeoverlay subclass */ + gboolean use_vertical_render; + GstBaseTextOverlayVAlign valign; + GstBaseTextOverlayHAlign halign; + GstBaseTextOverlayWrapMode wrap_mode; + GstBaseTextOverlayLineAlign line_align; + + /* text pad format */ + gboolean have_pango_markup; + + /* rendering state */ + gboolean need_render; GstBuffer *text_image; + + /* dimension relative to witch the render is done, this is the stream size + * or a portion of the window_size (adapted to aspect ratio) */ + gint render_width; + gint render_height; + /* This is (render_width / width) uses to convert to stream scale */ + gdouble render_scale; + + /* dimension of text_image, the physical dimension */ gint image_width; gint image_height; - gint baseline_y; - gboolean auto_adjust_size; - gboolean need_render; - - gint shading_value; /* for timeoverlay subclass */ + /* window dimension, reported in the composition meta params. This is set + * to stream width, height if missing */ + gint window_width; + gint window_height; - gboolean have_pango_markup; - gboolean use_vertical_render; + gdouble shadow_offset; + gdouble outline_offset; - gboolean attach_compo_to_buffer; + PangoRectangle ink_rect; + PangoRectangle logical_rect; + gboolean attach_compo_to_buffer; GstVideoOverlayComposition *composition; + GstVideoOverlayComposition *upstream_composition; }; struct _GstBaseTextOverlayClass { diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gstclockoverlay.c gst-plugins-base1.0-1.6.1/ext/pango/gstclockoverlay.c --- gst-plugins-base1.0-1.4.3/ext/pango/gstclockoverlay.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gstclockoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -31,10 +31,10 @@ * * Example launch lines * |[ - * gst-launch -v videotestsrc ! clockoverlay ! xvimagesink - * ]| Display the current time in the top left corner of the video picture + * gst-launch-1.0 -v videotestsrc ! clockoverlay ! autovideosink + * ]| Display the current wall clock time in the top left corner of the video picture * |[ - * gst-launch -v videotestsrc ! clockoverlay halign=right valign=bottom text="Edge City" shaded-background=true ! videoconvert ! ximagesink + * gst-launch-1.0 -v videotestsrc ! clockoverlay halignment=right valignment=bottom text="Edge City" shaded-background=true font-desc="Sans, 36" ! videoconvert ! autovideosink * ]| Another pipeline that displays the current time with some leading * text in the bottom right corner of the video picture, with the background * of the text being shaded in order to make it more legible on top of a diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gsttextoverlay.c gst-plugins-base1.0-1.6.1/ext/pango/gsttextoverlay.c --- gst-plugins-base1.0-1.4.3/ext/pango/gsttextoverlay.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gsttextoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -40,11 +40,11 @@ * * Example launch lines * |[ - * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink + * gst-launch-1.0 -v gst-launch-1.0 videotestsrc ! textoverlay text="Room A" valignment=top halignment=left font-desc="Sans, 72" ! autovideosink * ]| Here is a simple pipeline that displays a static text in the top left * corner of the video picture * |[ - * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt. videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink + * gst-launch-1.0 -v filesrc location=subtitles.srt ! subparse ! txt. videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! autovideosink * ]| Here is another pipeline that displays subtitles from an .srt subtitle * file, centered at the bottom of the picture and with a rectangular shading * around the text in the background: @@ -66,15 +66,6 @@ * Uh? What are you talking about? * I don't understand (18-62s) * ]| - * One can also feed arbitrary live text into the element: - * |[ - * gst-launch fdsrc fd=0 ! text/x-raw,format=utf8 ! txt. videotestsrc ! \ - * textoverlay name=txt shaded-background=yes font-desc="Serif 40" wait-text=false ! \ - * xvimagesink - * ]| This shows new text as entered on the terminal (stdin). This is not suited - * for subtitles as the test overlay is not timed. Subtitles should use - * timestamped formats. For the above use case one can also read the text from - * the application as set the #GstTextOverlay:text property. * * */ diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gsttextrender.c gst-plugins-base1.0-1.6.1/ext/pango/gsttextrender.c --- gst-plugins-base1.0-1.4.3/ext/pango/gsttextrender.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gsttextrender.c 2015-10-22 08:01:34.000000000 +0000 @@ -34,7 +34,7 @@ * * Example launch lines * |[ - * gst-launch -v filesrc location=subtitles.srt ! subparse ! textrender ! xvimagesink + * gst-launch-1.0 -v filesrc location=subtitles.srt ! subparse ! textrender ! videoconvert ! autovideosink * ]| * */ @@ -197,7 +197,7 @@ "Filter/Editor/Video", "Renders a text string to an image bitmap", "David Schleef , " - "GStreamer maintainers "); + "GStreamer maintainers "); fontmap = pango_cairo_font_map_get_default (); klass->pango_context = diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gsttimeoverlay.c gst-plugins-base1.0-1.6.1/ext/pango/gsttimeoverlay.c --- gst-plugins-base1.0-1.4.3/ext/pango/gsttimeoverlay.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gsttimeoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,6 +1,6 @@ /* GStreamer - * Copyright (C) <1999> Erik Walthinsen - * Copyright (C) <2005> Tim-Philipp Müller + * Copyright (C) 1999 Erik Walthinsen + * Copyright (C) 2005-2014 Tim-Philipp Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -30,11 +30,10 @@ * * * |[ - * gst-launch -v videotestsrc ! timeoverlay ! xvimagesink - * ]| Display the time stamps in the top left - * corner of the video picture. + * gst-launch-1.0 -v videotestsrc ! timeoverlay ! autovideosink + * ]| Display the time stamps in the top left corner of the video picture. * |[ - * gst-launch -v videotestsrc ! timeoverlay halign=right valign=bottom text="Stream time:" shaded-background=true ! xvimagesink + * gst-launch-1.0 -v videotestsrc ! timeoverlay halignment=right valignment=bottom text="Stream time:" shaded-background=true font-desc="Sans, 24" ! autovideosink * ]| Another pipeline that displays the time stamps with some leading * text in the bottom right corner of the video picture, with the background * of the text being shaded in order to make it more legible on top of a @@ -50,9 +49,40 @@ #include "gsttimeoverlay.h" +#define DEFAULT_TIME_LINE GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME + +enum +{ + PROP_0, + PROP_TIME_LINE +}; + #define gst_time_overlay_parent_class parent_class G_DEFINE_TYPE (GstTimeOverlay, gst_time_overlay, GST_TYPE_BASE_TEXT_OVERLAY); +static void gst_time_overlay_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_time_overlay_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); + +#define GST_TYPE_TIME_OVERLAY_TIME_LINE (gst_time_overlay_time_line_type()) +static GType +gst_time_overlay_time_line_type (void) +{ + static GType time_line_type = 0; + static const GEnumValue modes[] = { + {GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME, "buffer-time", "buffer-time"}, + {GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME, "stream-time", "stream-time"}, + {GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME, "running-time", "running-time"}, + {0, NULL, NULL}, + }; + + if (!time_line_type) { + time_line_type = g_enum_register_static ("GstTimeOverlayTimeLine", modes); + } + return time_line_type; +} + static gchar * gst_time_overlay_render_time (GstTimeOverlay * overlay, GstClockTime time) { @@ -74,21 +104,40 @@ gst_time_overlay_get_text (GstBaseTextOverlay * overlay, GstBuffer * video_frame) { - GstClockTime time = GST_BUFFER_TIMESTAMP (video_frame); + GstTimeOverlayTimeLine time_line; + GstClockTime ts, ts_buffer; + GstSegment *segment = &overlay->segment; gchar *time_str, *txt, *ret; overlay->need_render = TRUE; - if (!GST_CLOCK_TIME_IS_VALID (time)) { + ts_buffer = GST_BUFFER_TIMESTAMP (video_frame); + + if (!GST_CLOCK_TIME_IS_VALID (ts_buffer)) { GST_DEBUG ("buffer without valid timestamp"); return g_strdup (""); } - GST_DEBUG ("buffer with timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (time)); + GST_DEBUG ("buffer with timestamp %" GST_TIME_FORMAT, + GST_TIME_ARGS (ts_buffer)); + + time_line = g_atomic_int_get (&GST_TIME_OVERLAY_CAST (overlay)->time_line); + switch (time_line) { + case GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME: + ts = gst_segment_to_stream_time (segment, GST_FORMAT_TIME, ts_buffer); + break; + case GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME: + ts = gst_segment_to_running_time (segment, GST_FORMAT_TIME, ts_buffer); + break; + case GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME: + default: + ts = ts_buffer; + break; + } txt = g_strdup (overlay->default_text); - time_str = gst_time_overlay_render_time (GST_TIME_OVERLAY (overlay), time); + time_str = gst_time_overlay_render_time (GST_TIME_OVERLAY (overlay), ts); if (txt != NULL && *txt != '\0') { ret = g_strdup_printf ("%s %s", txt, time_str); } else { @@ -107,11 +156,13 @@ { GstElementClass *gstelement_class; GstBaseTextOverlayClass *gsttextoverlay_class; + GObjectClass *gobject_class; PangoContext *context; PangoFontDescription *font_description; gsttextoverlay_class = (GstBaseTextOverlayClass *) klass; gstelement_class = (GstElementClass *) klass; + gobject_class = (GObjectClass *) klass; gst_element_class_set_static_metadata (gstelement_class, "Time overlay", "Filter/Editor/Video", @@ -120,6 +171,14 @@ gsttextoverlay_class->get_text = gst_time_overlay_get_text; + gobject_class->set_property = gst_time_overlay_set_property; + gobject_class->get_property = gst_time_overlay_get_property; + + g_object_class_install_property (gobject_class, PROP_TIME_LINE, + g_param_spec_enum ("time-mode", "Time Mode", "What time to show", + GST_TYPE_TIME_OVERLAY_TIME_LINE, DEFAULT_TIME_LINE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_mutex_lock (gsttextoverlay_class->pango_lock); context = gsttextoverlay_class->pango_context; @@ -147,4 +206,38 @@ textoverlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP; textoverlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_LEFT; + + overlay->time_line = DEFAULT_TIME_LINE; +} + +static void +gst_time_overlay_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstTimeOverlay *overlay = GST_TIME_OVERLAY (object); + + switch (prop_id) { + case PROP_TIME_LINE: + g_atomic_int_set (&overlay->time_line, g_value_get_enum (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_time_overlay_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstTimeOverlay *overlay = GST_TIME_OVERLAY (object); + + switch (prop_id) { + case PROP_TIME_LINE: + g_value_set_enum (value, g_atomic_int_get (&overlay->time_line)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/gsttimeoverlay.h gst-plugins-base1.0-1.6.1/ext/pango/gsttimeoverlay.h --- gst-plugins-base1.0-1.4.3/ext/pango/gsttimeoverlay.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/gsttimeoverlay.h 2015-10-22 08:01:34.000000000 +0000 @@ -36,10 +36,17 @@ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIME_OVERLAY)) #define GST_IS_TIME_OVERLAY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TIME_OVERLAY)) +#define GST_TIME_OVERLAY_CAST(obj) ((GstTimeOverlay*)(obj)) typedef struct _GstTimeOverlay GstTimeOverlay; typedef struct _GstTimeOverlayClass GstTimeOverlayClass; +typedef enum { + GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME, + GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME, + GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME +} GstTimeOverlayTimeLine; + /** * GstTimeOverlay: * @@ -47,6 +54,9 @@ */ struct _GstTimeOverlay { GstBaseTextOverlay textoverlay; + + /*< private >*/ + GstTimeOverlayTimeLine time_line; }; struct _GstTimeOverlayClass { diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/Makefile.am gst-plugins-base1.0-1.6.1/ext/pango/Makefile.am --- gst-plugins-base1.0-1.4.3/ext/pango/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -23,6 +23,7 @@ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ + $(LIBM) \ $(PANGO_LIBS) libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstpango_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) diff -Nru gst-plugins-base1.0-1.4.3/ext/pango/Makefile.in gst-plugins-base1.0-1.6.1/ext/pango/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/pango/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/pango/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/pango -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -156,7 +165,7 @@ am__DEPENDENCIES_1 = libgstpango_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libgstpango_la_OBJECTS = libgstpango_la-gstbasetextoverlay.lo \ libgstpango_la-gstclockoverlay.lo \ libgstpango_la-gsttextoverlay.lo \ @@ -232,6 +241,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -292,6 +302,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -321,6 +333,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -348,7 +362,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -363,6 +376,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -452,13 +466,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -511,6 +524,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -548,6 +562,7 @@ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ + $(LIBM) \ $(PANGO_LIBS) libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) @@ -568,7 +583,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/pango/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/pango/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -909,6 +923,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/theora/gsttheoradec.c gst-plugins-base1.0-1.6.1/ext/theora/gsttheoradec.c --- gst-plugins-base1.0-1.4.3/ext/theora/gsttheoradec.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/theora/gsttheoradec.c 2015-10-22 08:01:34.000000000 +0000 @@ -32,9 +32,9 @@ * * Example pipeline * |[ - * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! xvimagesink - * ]| This example pipeline will decode an ogg stream and decodes the theora video. Refer to - * the theoraenc example to create the ogg file. + * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! autovideosink + * ]| This example pipeline will decode an ogg stream and decodes the theora video in it. + * Refer to the theoraenc example to create the ogg file. * */ @@ -206,6 +206,10 @@ * but is not marked that way so data gets parsed and keyframes marked */ gst_video_decoder_set_packetized (GST_VIDEO_DECODER (dec), FALSE); gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (dec), TRUE); + + gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST + (dec), TRUE); + GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (dec)); } static gboolean @@ -418,7 +422,7 @@ } /* theora has: * - * width/height : dimension of the encoded frame + * width/height : dimension of the encoded frame * pic_width/pic_height : dimension of the visible part * pic_x/pic_y : offset in encoded frame where visible part starts */ @@ -507,6 +511,8 @@ break; } + dec->uncropped_info = state->info; + gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec)); dec->have_header = TRUE; @@ -559,6 +565,62 @@ } } +#define MIN_NUM_HEADERS 3 +static GstFlowReturn +theoradec_handle_header_caps (GstTheoraDec * dec) +{ + GstFlowReturn result = GST_CUSTOM_FLOW_DROP; + GstCaps *caps; + GstStructure *s = NULL; + const GValue *array = NULL; + + GST_DEBUG_OBJECT (dec, "Looking for Theora headers in caps"); + caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SINK_PAD (dec)); + if (caps) + s = gst_caps_get_structure (caps, 0); + if (s) + array = gst_structure_get_value (s, "streamheader"); + + if (caps) + gst_caps_unref (caps); + + if (array && (gst_value_array_get_size (array) >= MIN_NUM_HEADERS)) { + const GValue *value = NULL; + GstBuffer *buf = NULL; + gint i = 0; + + while (result == GST_CUSTOM_FLOW_DROP + && i < gst_value_array_get_size (array)) { + value = gst_value_array_get_value (array, i); + buf = gst_value_get_buffer (value); + if (!buf) + goto null_buffer; + GST_LOG_OBJECT (dec, "Submitting header packet"); + result = theora_dec_decode_buffer (dec, buf, NULL); + i++; + } + } else + goto array_error; + +done: + return (result != + GST_CUSTOM_FLOW_DROP ? GST_FLOW_NOT_NEGOTIATED : GST_FLOW_OK); + + /* ERRORS */ +array_error: + { + GST_WARNING_OBJECT (dec, "streamheader array not found"); + result = GST_FLOW_ERROR; + goto done; + } +null_buffer: + { + GST_WARNING_OBJECT (dec, "streamheader with null buffer received"); + result = GST_FLOW_ERROR; + goto done; + } +} + /* Allocate buffer and copy image data into Y444 format */ static GstFlowReturn theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, @@ -638,7 +700,7 @@ GST_CAT_TRACE_OBJECT (GST_CAT_PERFORMANCE, dec, "doing unavoidable video frame copy"); - if (G_UNLIKELY (!gst_video_frame_map (&vframe, &dec->output_state->info, + if (G_UNLIKELY (!gst_video_frame_map (&vframe, &dec->uncropped_info, frame->output_buffer, GST_MAP_WRITE))) goto invalid_frame; @@ -683,10 +745,13 @@ GstFlowReturn result; ogg_int64_t gp; - if (G_UNLIKELY (!dec->have_header)) - goto not_initialized; + if (G_UNLIKELY (!dec->have_header)) { + result = theoradec_handle_header_caps (dec); + if (result != GST_FLOW_OK) + goto not_initialized; + } - /* the second most significant bit of the first data byte is cleared + /* the second most significant bit of the first data byte is cleared * for keyframes. We can only check it if it's not a zero-length packet. */ keyframe = packet->bytes && ((packet->packet[0] & 0x40) == 0); if (G_UNLIKELY (keyframe)) { @@ -782,19 +847,15 @@ /* switch depending on packet type. A zero byte packet is always a data * packet; we don't dereference it in that case. */ if (packet.bytes && packet.packet[0] & 0x80) { + /* header packets are not meant to be displayed - return FLOW_DROP */ if (dec->have_header) { GST_WARNING_OBJECT (GST_OBJECT (dec), "Ignoring header"); - GST_VIDEO_CODEC_FRAME_FLAG_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY); result = GST_CUSTOM_FLOW_DROP; goto done; } - result = theora_handle_header_packet (dec, &packet); - /* header packets are not meant to be displayed */ - /* FIXME : This is a temporary hack. The proper fix would be to - * not call _finish_frame() for these types of packets */ - GST_VIDEO_CODEC_FRAME_FLAG_SET (frame, - GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY); + if ((result = theora_handle_header_packet (dec, &packet)) != GST_FLOW_OK) + goto done; + result = GST_CUSTOM_FLOW_DROP; } else { result = theora_handle_data_packet (dec, &packet, frame); } @@ -857,14 +918,18 @@ } if (dec->can_crop) { - GstVideoInfo info = state->info; + GstVideoInfo *info = &dec->uncropped_info; GstCaps *caps; - /* Calculate uncropped size */ - gst_video_info_set_format (&info, info.finfo->format, dec->info.frame_width, + GST_LOG_OBJECT (decoder, "Using GstVideoCropMeta, uncropped wxh = %dx%d", + info->width, info->height); + + gst_video_info_set_format (info, info->finfo->format, dec->info.frame_width, dec->info.frame_height); - size = MAX (size, info.size); - caps = gst_video_info_to_caps (&info); + + /* Calculate uncropped size */ + size = MAX (size, info->size); + caps = gst_video_info_to_caps (info); gst_buffer_pool_config_set_params (config, caps, size, min, max); gst_caps_unref (caps); } diff -Nru gst-plugins-base1.0-1.4.3/ext/theora/gsttheoradec.h gst-plugins-base1.0-1.6.1/ext/theora/gsttheoradec.h --- gst-plugins-base1.0-1.4.3/ext/theora/gsttheoradec.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/theora/gsttheoradec.h 2015-10-22 08:01:34.000000000 +0000 @@ -77,6 +77,7 @@ gint telemetry_bits; gboolean can_crop; + GstVideoInfo uncropped_info; }; struct _GstTheoraDecClass diff -Nru gst-plugins-base1.0-1.4.3/ext/theora/gsttheoraenc.c gst-plugins-base1.0-1.6.1/ext/theora/gsttheoraenc.c --- gst-plugins-base1.0-1.4.3/ext/theora/gsttheoraenc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/theora/gsttheoraenc.c 2015-10-22 08:01:34.000000000 +0000 @@ -42,10 +42,13 @@ * bitrate (CBR) stream while setting the quality property will produce a * variable bitrate (VBR) stream. * + * A videorate element is often required in front of theoraenc, especially + * when transcoding and when putting Theora into the Ogg container. + * * * Example pipeline * |[ - * gst-launch -v videotestsrc num-buffers=1000 ! theoraenc ! oggmux ! filesink location=videotestsrc.ogg + * gst-launch-1.0 -v videotestsrc num-buffers=500 ! video/x-raw,width=1280,height=720 ! queue ! progressreport ! theoraenc ! oggmux ! filesink location=videotestsrc.ogg * ]| This example pipeline will encode a test video source to theora muxed in an * ogg container. Refer to the theoradec documentation to decode the create * stream. @@ -303,6 +306,8 @@ static void gst_theora_enc_init (GstTheoraEnc * enc) { + GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_ENCODER_SINK_PAD (enc)); + enc->video_bitrate = THEORA_DEF_BITRATE; enc->video_quality = THEORA_DEF_QUALITY; enc->keyframe_auto = THEORA_DEF_KEYFRAME_AUTO; diff -Nru gst-plugins-base1.0-1.4.3/ext/theora/gsttheoraparse.c gst-plugins-base1.0-1.6.1/ext/theora/gsttheoraparse.c --- gst-plugins-base1.0-1.4.3/ext/theora/gsttheoraparse.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/theora/gsttheoraparse.c 2015-10-22 08:01:34.000000000 +0000 @@ -43,11 +43,11 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=video.ogg ! oggdemux ! theoraparse ! fakesink + * gst-launch-1.0 -v filesrc location=video.ogg ! oggdemux ! theoraparse ! fakesink * ]| This pipeline shows that the streamheader is set in the caps, and that each * buffer has the timestamp, duration, offset, and offset_end set. * |[ - * gst-launch filesrc location=video.ogg ! oggdemux ! theoraparse \ + * gst-launch-1.0 filesrc location=video.ogg ! oggdemux ! theoraparse \ * ! oggmux ! filesink location=video-remuxed.ogg * ]| This pipeline shows remuxing. video-remuxed.ogg might not be exactly the same * as video.ogg, but they should produce exactly the same decoded data. diff -Nru gst-plugins-base1.0-1.4.3/ext/theora/Makefile.in gst-plugins-base1.0-1.6.1/ext/theora/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/theora/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/theora/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = ext/theora -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -232,6 +241,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -292,6 +302,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -321,6 +333,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -348,7 +362,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -363,6 +376,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -452,13 +466,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -511,6 +524,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -559,7 +573,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/theora/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/theora/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -892,6 +905,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisdec.c gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisdec.c --- gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisdec.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisdec.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,12 +24,14 @@ * This element decodes a Vorbis stream to raw float audio. * Vorbis is a royalty-free * audio codec maintained by the Xiph.org - * Foundation. + * Foundation. As it outputs raw float audio you will often need to + * put an audioconvert element after it. + * * * * Example pipelines * |[ - * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink + * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink * ]| Decode an Ogg/Vorbis. To create an Ogg/Vorbis file refer to the documentation of vorbisenc. * */ @@ -107,6 +109,9 @@ static void gst_vorbis_dec_init (GstVorbisDec * dec) { + gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST + (dec), TRUE); + GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dec)); } static void @@ -270,7 +275,7 @@ { gint res; - g_assert (vd->initialized == FALSE); + g_assert (!vd->initialized); #ifdef USE_TREMOLO if (G_UNLIKELY ((res = vorbis_dsp_init (&vd->vd, &vd->vi)))) diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisdeclib.c gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisdeclib.c --- gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisdeclib.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisdeclib.c 2015-10-22 08:01:34.000000000 +0000 @@ -81,6 +81,28 @@ #endif } +static void +copy_samples_no_reorder (vorbis_sample_t * out, vorbis_sample_t ** in, + guint samples, gint channels) +{ +#ifdef GST_VORBIS_DEC_SEQUENTIAL + gint i; + + for (i = 0; i < channels; i++) { + memcpy (out, in[i], samples * sizeof (float)); + out += samples; + } +#else + gint i, j; + + for (j = 0; j < samples; j++) { + for (i = 0; i < channels; i++) { + *out++ = in[i][j]; + } + } +#endif +} + CopySampleFunc gst_vorbis_get_copy_sample_func (gint channels) { @@ -93,9 +115,17 @@ case 2: f = copy_samples_s; break; - default: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: f = copy_samples; break; + default: + f = copy_samples_no_reorder; + break; } return f; diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisenc.c gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisenc.c --- gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisenc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisenc.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,12 +29,12 @@ * * Example pipelines * |[ - * gst-launch -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=sine.ogg + * gst-launch-1.0 -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=sine.ogg * ]| Encode a test sine signal to Ogg/Vorbis. Note that the resulting file * will be really small because a sine signal compresses very well. * |[ - * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg - * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis. + * gst-launch-1.0 -v autoaudiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg + * ]| Record from a sound card and encode to Ogg/Vorbis. * */ #ifdef HAVE_CONFIG_H @@ -56,16 +56,6 @@ GST_DEBUG_CATEGORY_EXTERN (vorbisenc_debug); #define GST_CAT_DEFAULT vorbisenc_debug -static GstStaticPadTemplate vorbis_enc_sink_factory = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw, " - "format = (string) " GST_AUDIO_NE (F32) ", " - "layout = (string) interleaved, " - "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 255 ]") - ); - static GstStaticPadTemplate vorbis_enc_src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, @@ -86,6 +76,7 @@ }; static GstFlowReturn gst_vorbis_enc_output_buffers (GstVorbisEnc * vorbisenc); +static GstCaps *gst_vorbis_enc_generate_sink_caps (void); #define MAX_BITRATE_DEFAULT -1 @@ -101,8 +92,6 @@ GstAudioInfo * info); static GstFlowReturn gst_vorbis_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * in_buf); -static GstCaps *gst_vorbis_enc_getcaps (GstAudioEncoder * enc, - GstCaps * filter); static gboolean gst_vorbis_enc_sink_event (GstAudioEncoder * enc, GstEvent * event); @@ -125,6 +114,8 @@ GObjectClass *gobject_class; GstElementClass *gstelement_class; GstAudioEncoderClass *base_class; + GstCaps *sink_caps; + GstPadTemplate *sink_templ; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; @@ -165,10 +156,14 @@ "The last status message", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + sink_caps = gst_vorbis_enc_generate_sink_caps (); + sink_templ = gst_pad_template_new ("sink", + GST_PAD_SINK, GST_PAD_ALWAYS, sink_caps); + gst_element_class_add_pad_template (gstelement_class, sink_templ); + gst_caps_unref (sink_caps); + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&vorbis_enc_src_factory)); - gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&vorbis_enc_sink_factory)); gst_element_class_set_static_metadata (gstelement_class, "Vorbis audio encoder", "Codec/Encoder/Audio", @@ -179,7 +174,6 @@ base_class->stop = GST_DEBUG_FUNCPTR (gst_vorbis_enc_stop); base_class->set_format = GST_DEBUG_FUNCPTR (gst_vorbis_enc_set_format); base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_vorbis_enc_handle_frame); - base_class->getcaps = GST_DEBUG_FUNCPTR (gst_vorbis_enc_getcaps); base_class->sink_event = GST_DEBUG_FUNCPTR (gst_vorbis_enc_sink_event); base_class->flush = GST_DEBUG_FUNCPTR (gst_vorbis_enc_flush); } @@ -189,6 +183,8 @@ { GstAudioEncoder *enc = GST_AUDIO_ENCODER (vorbisenc); + GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (enc)); + vorbisenc->channels = -1; vorbisenc->frequency = -1; @@ -289,27 +285,6 @@ return caps; } -static GstCaps * -gst_vorbis_enc_getcaps (GstAudioEncoder * enc, GstCaps * filter) -{ - GstVorbisEnc *vorbisenc = GST_VORBISENC (enc); - GstCaps *caps; - - if (vorbisenc->sinkcaps == NULL) - vorbisenc->sinkcaps = gst_vorbis_enc_generate_sink_caps (); - - if (filter) { - GstCaps *int_caps = gst_caps_intersect_full (filter, vorbisenc->sinkcaps, - GST_CAPS_INTERSECT_FIRST); - caps = gst_audio_encoder_proxy_getcaps (enc, int_caps, filter); - gst_caps_unref (int_caps); - } else { - caps = gst_audio_encoder_proxy_getcaps (enc, vorbisenc->sinkcaps, filter); - } - - return caps; -} - static gint64 gst_vorbis_enc_get_latency (GstVorbisEnc * vorbisenc) { @@ -616,16 +591,17 @@ /* * (really really) FIXME: move into core (dixit tpm) */ -/** +/* * _gst_caps_set_buffer_array: - * @caps: a #GstCaps + * @caps: (transfer full): a #GstCaps * @field: field in caps to set * @buf: header buffers * * Adds given buffers to an array of buffers set as the given @field * on the given @caps. List of buffer arguments must be NULL-terminated. * - * Returns: input caps with a streamheader field added, or NULL if some error + * Returns: (transfer full): input caps with a streamheader field added, or NULL + * if some error occurred */ static GstCaps * _gst_caps_set_buffer_array (GstCaps * caps, const gchar * field, @@ -799,6 +775,27 @@ while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) { GstBuffer *buf; + if (op.e_o_s) { + GstAudioEncoder *enc = GST_AUDIO_ENCODER (vorbisenc); + GstClockTime duration; + + GST_DEBUG_OBJECT (vorbisenc, "Got EOS packet from libvorbis"); + GST_AUDIO_ENCODER_STREAM_LOCK (enc); + if (!GST_CLOCK_TIME_IS_VALID (enc->output_segment.stop)) { + GST_DEBUG_OBJECT (vorbisenc, + "Output segment has no end time, setting"); + duration = + gst_util_uint64_scale (op.granulepos, GST_SECOND, + vorbisenc->frequency); + enc->output_segment.stop = enc->output_segment.start + duration; + GST_DEBUG_OBJECT (enc, "new output segment %" GST_SEGMENT_FORMAT, + &enc->output_segment); + gst_pad_push_event (GST_AUDIO_ENCODER_SRC_PAD (enc), + gst_event_new_segment (&enc->output_segment)); + } + GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); + } + GST_LOG_OBJECT (vorbisenc, "pushing out a data packet"); buf = gst_audio_encoder_allocate_output_buffer (GST_AUDIO_ENCODER diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisparse.c gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisparse.c --- gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbisparse.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbisparse.c 2015-10-22 08:01:34.000000000 +0000 @@ -36,11 +36,11 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisparse ! fakesink + * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisparse ! fakesink * ]| This pipeline shows that the streamheader is set in the caps, and that each * buffer has the timestamp, duration, offset, and offset_end set. * |[ - * gst-launch filesrc location=sine.ogg ! oggdemux ! vorbisparse \ + * gst-launch-1.0 filesrc location=sine.ogg ! oggdemux ! vorbisparse \ * ! oggmux ! filesink location=sine-remuxed.ogg * ]| This pipeline shows remuxing. sine-remuxed.ogg might not be exactly the same * as sine.ogg, but they should produce exactly the same decoded data. @@ -227,7 +227,7 @@ /* get the headers into the caps, passing them to vorbis as we go */ caps = gst_caps_new_simple ("audio/x-vorbis", "rate", G_TYPE_INT, parse->sample_rate, - "channels", G_TYPE_INT, parse->channels, NULL);; + "channels", G_TYPE_INT, parse->channels, NULL); vorbis_parse_set_header_on_caps (parse, caps); GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps); gst_pad_set_caps (parse->srcpad, caps); diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbistag.c gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbistag.c --- gst-plugins-base1.0-1.4.3/ext/vorbis/gstvorbistag.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/gstvorbistag.c 2015-10-22 08:01:34.000000000 +0000 @@ -37,8 +37,8 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=foo.ogg ! oggdemux ! vorbistag ! oggmux ! filesink location=bar.ogg - * ]| This element is not useful with gst-launch, because it does not support + * gst-launch-1.0 -v filesrc location=foo.ogg ! oggdemux ! vorbistag ! oggmux ! filesink location=bar.ogg + * ]| This element is not useful with gst-launch-1.0, because it does not support * setting the tags on a #GstTagSetter interface. Conceptually, the element * will usually be used in this order though. * diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/Makefile.am gst-plugins-base1.0-1.6.1/ext/vorbis/Makefile.am --- gst-plugins-base1.0-1.4.3/ext/vorbis/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -45,18 +45,3 @@ gstvorbisparse.h \ gstvorbistag.h \ gstvorbiscommon.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstivorbisdec_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \ - -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \ - $(libgstivorbisdec_la_LIBADD) \ - -lvorbisidec \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/ext/vorbis/Makefile.in gst-plugins-base1.0-1.6.1/ext/vorbis/Makefile.in --- gst-plugins-base1.0-1.4.3/ext/vorbis/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ext/vorbis/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ @USE_VORBIS_TRUE@am__append_1 = libgstvorbis.la @USE_IVORBIS_TRUE@am__append_2 = libgstivorbisdec.la subdir = ext/vorbis -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -105,7 +113,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -122,6 +129,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -258,6 +267,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -318,6 +328,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -347,6 +359,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -374,7 +388,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -389,6 +402,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -478,13 +492,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -537,6 +550,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -606,7 +620,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/vorbis/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ext/vorbis/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -998,21 +1011,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstivorbisdec_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \ - -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \ - $(libgstivorbisdec_la_LIBADD) \ - -lvorbisidec \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/adder/gstadder.c gst-plugins-base1.0-1.6.1/gst/adder/gstadder.c --- gst-plugins-base1.0-1.4.3/gst/adder/gstadder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/adder/gstadder.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,10 +29,14 @@ * The adder currently mixes all data received on the sinkpads as soon as * possible without trying to synchronize the streams. * + * Check out the audiomixer element in gst-plugins-bad for a better-behaving + * audio mixing element: It will sync input streams correctly and also handle + * live inputs properly. + * * * Example launch line * |[ - * gst-launch audiotestsrc freq=100 ! adder name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix. + * gst-launch-1.0 audiotestsrc freq=100 ! adder name=mix ! audioconvert ! autoaudiosink audiotestsrc freq=500 ! mix. * ]| This pipeline produces two sine waves mixed together. * */ @@ -485,91 +489,6 @@ } static gboolean -gst_adder_query_latency (GstAdder * adder, GstQuery * query) -{ - GstClockTime min, max; - gboolean live; - gboolean res; - GstIterator *it; - gboolean done; - GValue item = { 0, }; - - res = TRUE; - done = FALSE; - - live = FALSE; - min = 0; - max = GST_CLOCK_TIME_NONE; - - /* Take maximum of all latency values */ - it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); - while (!done) { - GstIteratorResult ires; - - ires = gst_iterator_next (it, &item); - switch (ires) { - case GST_ITERATOR_DONE: - done = TRUE; - break; - case GST_ITERATOR_OK: - { - GstPad *pad = g_value_get_object (&item); - GstQuery *peerquery; - GstClockTime min_cur, max_cur; - gboolean live_cur; - - peerquery = gst_query_new_latency (); - - /* Ask peer for latency */ - res &= gst_pad_peer_query (pad, peerquery); - - /* take max from all valid return values */ - if (res) { - gst_query_parse_latency (peerquery, &live_cur, &min_cur, &max_cur); - - if (min_cur > min) - min = min_cur; - - if (max_cur != GST_CLOCK_TIME_NONE && - ((max != GST_CLOCK_TIME_NONE && max_cur > max) || - (max == GST_CLOCK_TIME_NONE))) - max = max_cur; - - live = live || live_cur; - } - - gst_query_unref (peerquery); - g_value_reset (&item); - break; - } - case GST_ITERATOR_RESYNC: - live = FALSE; - min = 0; - max = GST_CLOCK_TIME_NONE; - res = TRUE; - gst_iterator_resync (it); - break; - default: - res = FALSE; - done = TRUE; - break; - } - } - g_value_unset (&item); - gst_iterator_free (it); - - if (res) { - /* store the results */ - GST_DEBUG_OBJECT (adder, "Calculated total latency: live %s, min %" - GST_TIME_FORMAT ", max %" GST_TIME_FORMAT, - (live ? "yes" : "no"), GST_TIME_ARGS (min), GST_TIME_ARGS (max)); - gst_query_set_latency (query, live, min, max); - } - - return res; -} - -static gboolean gst_adder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { GstAdder *adder = GST_ADDER (parent); @@ -600,9 +519,6 @@ case GST_QUERY_DURATION: res = gst_adder_query_duration (adder, query); break; - case GST_QUERY_LATENCY: - res = gst_adder_query_latency (adder, query); - break; default: /* FIXME, needs a custom query handler because we have multiple * sinkpads */ @@ -1182,7 +1098,7 @@ if (G_UNLIKELY (adder->info.finfo->format == GST_AUDIO_FORMAT_UNKNOWN)) goto not_negotiated; - if (adder->flush_stop_pending == TRUE) { + if (adder->flush_stop_pending) { GST_INFO_OBJECT (adder->srcpad, "send pending flush stop event"); if (!gst_pad_push_event (adder->srcpad, gst_event_new_flush_stop (TRUE))) { GST_WARNING_OBJECT (adder->srcpad, "Sending flush stop event failed"); @@ -1282,7 +1198,7 @@ inbuf = gst_collect_pads_take_buffer (pads, collect_data, outsize); if (!GST_COLLECT_PADS_STATE_IS_SET (collect_data, - GST_COLLECT_PADS_STATE_EOS)) + GST_COLLECT_PADS_STATE_EOS)) is_eos = FALSE; /* NULL means EOS or an empty buffer so we still need to flush in diff -Nru gst-plugins-base1.0-1.4.3/gst/adder/gstadder.h gst-plugins-base1.0-1.6.1/gst/adder/gstadder.h --- gst-plugins-base1.0-1.4.3/gst/adder/gstadder.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/adder/gstadder.h 2015-10-22 08:01:34.000000000 +0000 @@ -34,7 +34,6 @@ #define GST_IS_ADDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ADDER)) #define GST_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_ADDER,GstAdderClass)) #define GST_IS_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_ADDER)) -#define GST_ADDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_ADDER,GstAdderClass)) typedef struct _GstAdder GstAdder; typedef struct _GstAdderClass GstAdderClass; diff -Nru gst-plugins-base1.0-1.4.3/gst/adder/gstadderorc-dist.c gst-plugins-base1.0-1.6.1/gst/adder/gstadderorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/adder/gstadderorc-dist.c 2014-09-24 08:19:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/adder/gstadderorc-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -1121,16 +1121,11 @@ orc_int8 var35; #endif orc_int8 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var37; -#else orc_int8 var37; -#endif orc_int8 var38; - orc_int8 var39; + orc_union16 var39; orc_union16 var40; - orc_union16 var41; - orc_int8 var42; + orc_int8 var41; ptr0 = (orc_int8 *) d1; @@ -1138,24 +1133,22 @@ var35 = (int) 0x00000080; /* 128 or 6.32404e-322f */ /* 3: loadpb */ var36 = p1; - /* 7: loadpb */ - var37 = (int) 0x00000080; /* 128 or 6.32404e-322f */ for (i = 0; i < n; i++) { /* 0: loadb */ var34 = ptr0[i]; /* 2: xorb */ - var39 = var34 ^ var35; + var38 = var34 ^ var35; /* 4: mulsbw */ - var40.i = var39 * var36; + var39.i = var38 * var36; /* 5: shrsw */ - var41.i = var40.i >> 3; + var40.i = var39.i >> 3; /* 6: convssswb */ - var42 = ORC_CLAMP_SB (var41.i); - /* 8: xorb */ - var38 = var42 ^ var37; - /* 9: storeb */ - ptr0[i] = var38; + var41 = ORC_CLAMP_SB (var40.i); + /* 7: xorb */ + var37 = var41 ^ var35; + /* 8: storeb */ + ptr0[i] = var37; } } @@ -1174,16 +1167,11 @@ orc_int8 var35; #endif orc_int8 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var37; -#else orc_int8 var37; -#endif orc_int8 var38; - orc_int8 var39; + orc_union16 var39; orc_union16 var40; - orc_union16 var41; - orc_int8 var42; + orc_int8 var41; ptr0 = (orc_int8 *) ex->arrays[0]; @@ -1191,24 +1179,22 @@ var35 = (int) 0x00000080; /* 128 or 6.32404e-322f */ /* 3: loadpb */ var36 = ex->params[24]; - /* 7: loadpb */ - var37 = (int) 0x00000080; /* 128 or 6.32404e-322f */ for (i = 0; i < n; i++) { /* 0: loadb */ var34 = ptr0[i]; /* 2: xorb */ - var39 = var34 ^ var35; + var38 = var34 ^ var35; /* 4: mulsbw */ - var40.i = var39 * var36; + var39.i = var38 * var36; /* 5: shrsw */ - var41.i = var40.i >> 3; + var40.i = var39.i >> 3; /* 6: convssswb */ - var42 = ORC_CLAMP_SB (var41.i); - /* 8: xorb */ - var38 = var42 ^ var37; - /* 9: storeb */ - ptr0[i] = var38; + var41 = ORC_CLAMP_SB (var40.i); + /* 7: xorb */ + var37 = var41 ^ var35; + /* 8: storeb */ + ptr0[i] = var37; } } @@ -1230,7 +1216,7 @@ static const orc_uint8 bc[] = { 1, 9, 19, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 118, 111, 108, 117, 109, 101, 95, 117, 56, 11, 1, 1, 14, 1, 128, 0, 0, 0, 14, - 4, 3, 0, 0, 0, 16, 1, 20, 2, 20, 1, 68, 33, 0, 16, 174, + 2, 3, 0, 0, 0, 16, 1, 20, 2, 20, 1, 68, 33, 0, 16, 174, 32, 33, 24, 94, 32, 32, 17, 159, 33, 32, 68, 0, 33, 16, 2, 0, }; @@ -1242,7 +1228,7 @@ orc_program_set_backup_function (p, _backup_adder_orc_volume_u8); orc_program_add_destination (p, 1, "d1"); orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_constant (p, 4, 0x00000003, "c2"); + orc_program_add_constant (p, 2, 0x00000003, "c2"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); orc_program_add_temporary (p, 1, "t2"); @@ -1361,7 +1347,7 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 19, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 118, 111, 108, - 117, 109, 101, 95, 115, 56, 11, 1, 1, 14, 4, 3, 0, 0, 0, 16, + 117, 109, 101, 95, 115, 56, 11, 1, 1, 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 174, 32, 0, 24, 94, 32, 32, 16, 159, 0, 32, 2, 0, }; @@ -1372,7 +1358,7 @@ orc_program_set_name (p, "adder_orc_volume_s8"); orc_program_set_backup_function (p, _backup_adder_orc_volume_s8); orc_program_add_destination (p, 1, "d1"); - orc_program_add_constant (p, 4, 0x00000003, "c1"); + orc_program_add_constant (p, 2, 0x00000003, "c1"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); @@ -1418,16 +1404,11 @@ orc_union16 var35; #endif orc_union16 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else orc_union16 var37; -#endif orc_union16 var38; - orc_union16 var39; + orc_union32 var39; orc_union32 var40; - orc_union32 var41; - orc_union16 var42; + orc_union16 var41; ptr0 = (orc_union16 *) d1; @@ -1435,24 +1416,22 @@ var35.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ /* 3: loadpw */ var36.i = p1; - /* 7: loadpw */ - var37.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ for (i = 0; i < n; i++) { /* 0: loadw */ var34 = ptr0[i]; /* 2: xorw */ - var39.i = var34.i ^ var35.i; + var38.i = var34.i ^ var35.i; /* 4: mulswl */ - var40.i = var39.i * var36.i; + var39.i = var38.i * var36.i; /* 5: shrsl */ - var41.i = var40.i >> 11; + var40.i = var39.i >> 11; /* 6: convssslw */ - var42.i = ORC_CLAMP_SW (var41.i); - /* 8: xorw */ - var38.i = var42.i ^ var37.i; - /* 9: storew */ - ptr0[i] = var38; + var41.i = ORC_CLAMP_SW (var40.i); + /* 7: xorw */ + var37.i = var41.i ^ var35.i; + /* 8: storew */ + ptr0[i] = var37; } } @@ -1471,16 +1450,11 @@ orc_union16 var35; #endif orc_union16 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else orc_union16 var37; -#endif orc_union16 var38; - orc_union16 var39; + orc_union32 var39; orc_union32 var40; - orc_union32 var41; - orc_union16 var42; + orc_union16 var41; ptr0 = (orc_union16 *) ex->arrays[0]; @@ -1488,24 +1462,22 @@ var35.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ /* 3: loadpw */ var36.i = ex->params[24]; - /* 7: loadpw */ - var37.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ for (i = 0; i < n; i++) { /* 0: loadw */ var34 = ptr0[i]; /* 2: xorw */ - var39.i = var34.i ^ var35.i; + var38.i = var34.i ^ var35.i; /* 4: mulswl */ - var40.i = var39.i * var36.i; + var39.i = var38.i * var36.i; /* 5: shrsl */ - var41.i = var40.i >> 11; + var40.i = var39.i >> 11; /* 6: convssslw */ - var42.i = ORC_CLAMP_SW (var41.i); - /* 8: xorw */ - var38.i = var42.i ^ var37.i; - /* 9: storew */ - ptr0[i] = var38; + var41.i = ORC_CLAMP_SW (var40.i); + /* 7: xorw */ + var37.i = var41.i ^ var35.i; + /* 8: storew */ + ptr0[i] = var37; } } @@ -1715,16 +1687,11 @@ orc_union32 var35; #endif orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var37; -#else orc_union32 var37; -#endif orc_union32 var38; - orc_union32 var39; + orc_union64 var39; orc_union64 var40; - orc_union64 var41; - orc_union32 var42; + orc_union32 var41; ptr0 = (orc_union32 *) d1; @@ -1732,24 +1699,22 @@ var35.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ /* 3: loadpl */ var36.i = p1; - /* 7: loadpl */ - var37.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ for (i = 0; i < n; i++) { /* 0: loadl */ var34 = ptr0[i]; /* 2: xorl */ - var39.i = var34.i ^ var35.i; + var38.i = var34.i ^ var35.i; /* 4: mulslq */ - var40.i = ((orc_int64) var39.i) * ((orc_int64) var36.i); + var39.i = ((orc_int64) var38.i) * ((orc_int64) var36.i); /* 5: shrsq */ - var41.i = var40.i >> 27; + var40.i = var39.i >> 27; /* 6: convsssql */ - var42.i = ORC_CLAMP_SL (var41.i); - /* 8: xorl */ - var38.i = var42.i ^ var37.i; - /* 9: storel */ - ptr0[i] = var38; + var41.i = ORC_CLAMP_SL (var40.i); + /* 7: xorl */ + var37.i = var41.i ^ var35.i; + /* 8: storel */ + ptr0[i] = var37; } } @@ -1768,16 +1733,11 @@ orc_union32 var35; #endif orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var37; -#else orc_union32 var37; -#endif orc_union32 var38; - orc_union32 var39; + orc_union64 var39; orc_union64 var40; - orc_union64 var41; - orc_union32 var42; + orc_union32 var41; ptr0 = (orc_union32 *) ex->arrays[0]; @@ -1785,24 +1745,22 @@ var35.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ /* 3: loadpl */ var36.i = ex->params[24]; - /* 7: loadpl */ - var37.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ for (i = 0; i < n; i++) { /* 0: loadl */ var34 = ptr0[i]; /* 2: xorl */ - var39.i = var34.i ^ var35.i; + var38.i = var34.i ^ var35.i; /* 4: mulslq */ - var40.i = ((orc_int64) var39.i) * ((orc_int64) var36.i); + var39.i = ((orc_int64) var38.i) * ((orc_int64) var36.i); /* 5: shrsq */ - var41.i = var40.i >> 27; + var40.i = var39.i >> 27; /* 6: convsssql */ - var42.i = ORC_CLAMP_SL (var41.i); - /* 8: xorl */ - var38.i = var42.i ^ var37.i; - /* 9: storel */ - ptr0[i] = var38; + var41.i = ORC_CLAMP_SL (var40.i); + /* 7: xorl */ + var37.i = var41.i ^ var35.i; + /* 8: storel */ + ptr0[i] = var37; } } @@ -1824,9 +1782,9 @@ static const orc_uint8 bc[] = { 1, 9, 20, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 118, 111, 108, 117, 109, 101, 95, 117, 51, 50, 11, 4, 4, 14, 4, 0, 0, 0, 128, - 14, 4, 27, 0, 0, 0, 16, 4, 20, 8, 20, 4, 132, 33, 0, 16, - 178, 32, 33, 24, 147, 32, 32, 17, 170, 33, 32, 132, 0, 33, 16, 2, - 0, + 15, 8, 27, 0, 0, 0, 0, 0, 0, 0, 16, 4, 20, 8, 20, 4, + 132, 33, 0, 16, 178, 32, 33, 24, 147, 32, 32, 17, 170, 33, 32, 132, + 0, 33, 16, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_adder_orc_volume_u32); @@ -1836,7 +1794,7 @@ orc_program_set_backup_function (p, _backup_adder_orc_volume_u32); orc_program_add_destination (p, 4, "d1"); orc_program_add_constant (p, 4, 0x80000000, "c1"); - orc_program_add_constant (p, 4, 0x0000001b, "c2"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c2"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); orc_program_add_temporary (p, 4, "t2"); @@ -1955,9 +1913,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 20, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 118, 111, 108, - 117, 109, 101, 95, 115, 51, 50, 11, 4, 4, 14, 4, 27, 0, 0, 0, - 16, 4, 20, 8, 178, 32, 0, 24, 147, 32, 32, 16, 170, 0, 32, 2, - 0, + 117, 109, 101, 95, 115, 51, 50, 11, 4, 4, 15, 8, 27, 0, 0, 0, + 0, 0, 0, 0, 16, 4, 20, 8, 178, 32, 0, 24, 147, 32, 32, 16, + 170, 0, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_adder_orc_volume_s32); @@ -1966,7 +1924,7 @@ orc_program_set_name (p, "adder_orc_volume_s32"); orc_program_set_backup_function (p, _backup_adder_orc_volume_s32); orc_program_add_destination (p, 4, "d1"); - orc_program_add_constant (p, 4, 0x0000001b, "c1"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c1"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); @@ -2243,8 +2201,8 @@ { orc_union64 tmp; tmp.f = p1; - ex->params[ORC_VAR_P1] = tmp.x2[0]; - ex->params[ORC_VAR_T1] = tmp.x2[1]; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; } func = c->exec; @@ -2269,18 +2227,13 @@ orc_int8 var35; #endif orc_int8 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var37; -#else orc_int8 var37; -#endif orc_int8 var38; orc_int8 var39; - orc_int8 var40; + orc_union16 var40; orc_union16 var41; - orc_union16 var42; + orc_int8 var42; orc_int8 var43; - orc_int8 var44; ptr0 = (orc_int8 *) d1; ptr4 = (orc_int8 *) s1; @@ -2289,28 +2242,26 @@ var35 = (int) 0x00000080; /* 128 or 6.32404e-322f */ /* 3: loadpb */ var36 = p1; - /* 7: loadpb */ - var37 = (int) 0x00000080; /* 128 or 6.32404e-322f */ for (i = 0; i < n; i++) { /* 0: loadb */ var34 = ptr4[i]; /* 2: xorb */ - var40 = var34 ^ var35; + var39 = var34 ^ var35; /* 4: mulsbw */ - var41.i = var40 * var36; + var40.i = var39 * var36; /* 5: shrsw */ - var42.i = var41.i >> 3; + var41.i = var40.i >> 3; /* 6: convssswb */ - var43 = ORC_CLAMP_SB (var42.i); - /* 8: xorb */ - var44 = var43 ^ var37; - /* 9: loadb */ - var38 = ptr0[i]; - /* 10: addusb */ - var39 = ORC_CLAMP_UB ((orc_uint8) var38 + (orc_uint8) var44); - /* 11: storeb */ - ptr0[i] = var39; + var42 = ORC_CLAMP_SB (var41.i); + /* 7: xorb */ + var43 = var42 ^ var35; + /* 8: loadb */ + var37 = ptr0[i]; + /* 9: addusb */ + var38 = ORC_CLAMP_UB ((orc_uint8) var37 + (orc_uint8) var43); + /* 10: storeb */ + ptr0[i] = var38; } } @@ -2330,18 +2281,13 @@ orc_int8 var35; #endif orc_int8 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var37; -#else orc_int8 var37; -#endif orc_int8 var38; orc_int8 var39; - orc_int8 var40; + orc_union16 var40; orc_union16 var41; - orc_union16 var42; + orc_int8 var42; orc_int8 var43; - orc_int8 var44; ptr0 = (orc_int8 *) ex->arrays[0]; ptr4 = (orc_int8 *) ex->arrays[4]; @@ -2350,28 +2296,26 @@ var35 = (int) 0x00000080; /* 128 or 6.32404e-322f */ /* 3: loadpb */ var36 = ex->params[24]; - /* 7: loadpb */ - var37 = (int) 0x00000080; /* 128 or 6.32404e-322f */ for (i = 0; i < n; i++) { /* 0: loadb */ var34 = ptr4[i]; /* 2: xorb */ - var40 = var34 ^ var35; + var39 = var34 ^ var35; /* 4: mulsbw */ - var41.i = var40 * var36; + var40.i = var39 * var36; /* 5: shrsw */ - var42.i = var41.i >> 3; + var41.i = var40.i >> 3; /* 6: convssswb */ - var43 = ORC_CLAMP_SB (var42.i); - /* 8: xorb */ - var44 = var43 ^ var37; - /* 9: loadb */ - var38 = ptr0[i]; - /* 10: addusb */ - var39 = ORC_CLAMP_UB ((orc_uint8) var38 + (orc_uint8) var44); - /* 11: storeb */ - ptr0[i] = var39; + var42 = ORC_CLAMP_SB (var41.i); + /* 7: xorb */ + var43 = var42 ^ var35; + /* 8: loadb */ + var37 = ptr0[i]; + /* 9: addusb */ + var38 = ORC_CLAMP_UB ((orc_uint8) var37 + (orc_uint8) var43); + /* 10: storeb */ + ptr0[i] = var38; } } @@ -2394,7 +2338,7 @@ static const orc_uint8 bc[] = { 1, 9, 23, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 97, 100, 100, 95, 118, 111, 108, 117, 109, 101, 95, 117, 56, 11, 1, 1, 12, 1, 1, - 14, 1, 128, 0, 0, 0, 14, 4, 3, 0, 0, 0, 16, 1, 20, 2, + 14, 1, 128, 0, 0, 0, 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 20, 1, 68, 33, 4, 16, 174, 32, 33, 24, 94, 32, 32, 17, 159, 33, 32, 68, 33, 33, 16, 35, 0, 0, 33, 2, 0, }; @@ -2407,7 +2351,7 @@ orc_program_add_destination (p, 1, "d1"); orc_program_add_source (p, 1, "s1"); orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_constant (p, 4, 0x00000003, "c2"); + orc_program_add_constant (p, 2, 0x00000003, "c2"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); orc_program_add_temporary (p, 1, "t2"); @@ -2548,7 +2492,7 @@ static const orc_uint8 bc[] = { 1, 9, 23, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 97, 100, 100, 95, 118, 111, 108, 117, 109, 101, 95, 115, 56, 11, 1, 1, 12, 1, 1, - 14, 4, 3, 0, 0, 0, 16, 1, 20, 2, 20, 1, 174, 32, 4, 24, + 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 20, 1, 174, 32, 4, 24, 94, 32, 32, 16, 159, 33, 32, 34, 0, 0, 33, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); @@ -2559,7 +2503,7 @@ orc_program_set_backup_function (p, _backup_adder_orc_add_volume_s8); orc_program_add_destination (p, 1, "d1"); orc_program_add_source (p, 1, "s1"); - orc_program_add_constant (p, 4, 0x00000003, "c1"); + orc_program_add_constant (p, 2, 0x00000003, "c1"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); orc_program_add_temporary (p, 1, "t2"); @@ -2611,18 +2555,13 @@ orc_union16 var35; #endif orc_union16 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else orc_union16 var37; -#endif orc_union16 var38; orc_union16 var39; - orc_union16 var40; + orc_union32 var40; orc_union32 var41; - orc_union32 var42; + orc_union16 var42; orc_union16 var43; - orc_union16 var44; ptr0 = (orc_union16 *) d1; ptr4 = (orc_union16 *) s1; @@ -2631,28 +2570,26 @@ var35.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ /* 3: loadpw */ var36.i = p1; - /* 7: loadpw */ - var37.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ for (i = 0; i < n; i++) { /* 0: loadw */ var34 = ptr4[i]; /* 2: xorw */ - var40.i = var34.i ^ var35.i; + var39.i = var34.i ^ var35.i; /* 4: mulswl */ - var41.i = var40.i * var36.i; + var40.i = var39.i * var36.i; /* 5: shrsl */ - var42.i = var41.i >> 11; + var41.i = var40.i >> 11; /* 6: convssslw */ - var43.i = ORC_CLAMP_SW (var42.i); - /* 8: xorw */ - var44.i = var43.i ^ var37.i; - /* 9: loadw */ - var38 = ptr0[i]; - /* 10: addusw */ - var39.i = ORC_CLAMP_UW ((orc_uint16) var38.i + (orc_uint16) var44.i); - /* 11: storew */ - ptr0[i] = var39; + var42.i = ORC_CLAMP_SW (var41.i); + /* 7: xorw */ + var43.i = var42.i ^ var35.i; + /* 8: loadw */ + var37 = ptr0[i]; + /* 9: addusw */ + var38.i = ORC_CLAMP_UW ((orc_uint16) var37.i + (orc_uint16) var43.i); + /* 10: storew */ + ptr0[i] = var38; } } @@ -2672,18 +2609,13 @@ orc_union16 var35; #endif orc_union16 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else orc_union16 var37; -#endif orc_union16 var38; orc_union16 var39; - orc_union16 var40; + orc_union32 var40; orc_union32 var41; - orc_union32 var42; + orc_union16 var42; orc_union16 var43; - orc_union16 var44; ptr0 = (orc_union16 *) ex->arrays[0]; ptr4 = (orc_union16 *) ex->arrays[4]; @@ -2692,28 +2624,26 @@ var35.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ /* 3: loadpw */ var36.i = ex->params[24]; - /* 7: loadpw */ - var37.i = (int) 0x00008000; /* 32768 or 1.61895e-319f */ for (i = 0; i < n; i++) { /* 0: loadw */ var34 = ptr4[i]; /* 2: xorw */ - var40.i = var34.i ^ var35.i; + var39.i = var34.i ^ var35.i; /* 4: mulswl */ - var41.i = var40.i * var36.i; + var40.i = var39.i * var36.i; /* 5: shrsl */ - var42.i = var41.i >> 11; + var41.i = var40.i >> 11; /* 6: convssslw */ - var43.i = ORC_CLAMP_SW (var42.i); - /* 8: xorw */ - var44.i = var43.i ^ var37.i; - /* 9: loadw */ - var38 = ptr0[i]; - /* 10: addusw */ - var39.i = ORC_CLAMP_UW ((orc_uint16) var38.i + (orc_uint16) var44.i); - /* 11: storew */ - ptr0[i] = var39; + var42.i = ORC_CLAMP_SW (var41.i); + /* 7: xorw */ + var43.i = var42.i ^ var35.i; + /* 8: loadw */ + var37 = ptr0[i]; + /* 9: addusw */ + var38.i = ORC_CLAMP_UW ((orc_uint16) var37.i + (orc_uint16) var43.i); + /* 10: storew */ + ptr0[i] = var38; } } @@ -2953,18 +2883,13 @@ orc_union32 var35; #endif orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var37; -#else orc_union32 var37; -#endif orc_union32 var38; orc_union32 var39; - orc_union32 var40; + orc_union64 var40; orc_union64 var41; - orc_union64 var42; + orc_union32 var42; orc_union32 var43; - orc_union32 var44; ptr0 = (orc_union32 *) d1; ptr4 = (orc_union32 *) s1; @@ -2973,30 +2898,28 @@ var35.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ /* 3: loadpl */ var36.i = p1; - /* 7: loadpl */ - var37.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ for (i = 0; i < n; i++) { /* 0: loadl */ var34 = ptr4[i]; /* 2: xorl */ - var40.i = var34.i ^ var35.i; + var39.i = var34.i ^ var35.i; /* 4: mulslq */ - var41.i = ((orc_int64) var40.i) * ((orc_int64) var36.i); + var40.i = ((orc_int64) var39.i) * ((orc_int64) var36.i); /* 5: shrsq */ - var42.i = var41.i >> 27; + var41.i = var40.i >> 27; /* 6: convsssql */ - var43.i = ORC_CLAMP_SL (var42.i); - /* 8: xorl */ - var44.i = var43.i ^ var37.i; - /* 9: loadl */ - var38 = ptr0[i]; - /* 10: addusl */ - var39.i = - ORC_CLAMP_UL ((orc_int64) (orc_uint32) var38.i + - (orc_int64) (orc_uint32) var44.i); - /* 11: storel */ - ptr0[i] = var39; + var42.i = ORC_CLAMP_SL (var41.i); + /* 7: xorl */ + var43.i = var42.i ^ var35.i; + /* 8: loadl */ + var37 = ptr0[i]; + /* 9: addusl */ + var38.i = + ORC_CLAMP_UL ((orc_int64) (orc_uint32) var37.i + + (orc_int64) (orc_uint32) var43.i); + /* 10: storel */ + ptr0[i] = var38; } } @@ -3016,18 +2939,13 @@ orc_union32 var35; #endif orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var37; -#else orc_union32 var37; -#endif orc_union32 var38; orc_union32 var39; - orc_union32 var40; + orc_union64 var40; orc_union64 var41; - orc_union64 var42; + orc_union32 var42; orc_union32 var43; - orc_union32 var44; ptr0 = (orc_union32 *) ex->arrays[0]; ptr4 = (orc_union32 *) ex->arrays[4]; @@ -3036,30 +2954,28 @@ var35.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ /* 3: loadpl */ var36.i = ex->params[24]; - /* 7: loadpl */ - var37.i = (int) 0x80000000; /* -2147483648 or 1.061e-314f */ for (i = 0; i < n; i++) { /* 0: loadl */ var34 = ptr4[i]; /* 2: xorl */ - var40.i = var34.i ^ var35.i; + var39.i = var34.i ^ var35.i; /* 4: mulslq */ - var41.i = ((orc_int64) var40.i) * ((orc_int64) var36.i); + var40.i = ((orc_int64) var39.i) * ((orc_int64) var36.i); /* 5: shrsq */ - var42.i = var41.i >> 27; + var41.i = var40.i >> 27; /* 6: convsssql */ - var43.i = ORC_CLAMP_SL (var42.i); - /* 8: xorl */ - var44.i = var43.i ^ var37.i; - /* 9: loadl */ - var38 = ptr0[i]; - /* 10: addusl */ - var39.i = - ORC_CLAMP_UL ((orc_int64) (orc_uint32) var38.i + - (orc_int64) (orc_uint32) var44.i); - /* 11: storel */ - ptr0[i] = var39; + var42.i = ORC_CLAMP_SL (var41.i); + /* 7: xorl */ + var43.i = var42.i ^ var35.i; + /* 8: loadl */ + var37 = ptr0[i]; + /* 9: addusl */ + var38.i = + ORC_CLAMP_UL ((orc_int64) (orc_uint32) var37.i + + (orc_int64) (orc_uint32) var43.i); + /* 10: storel */ + ptr0[i] = var38; } } @@ -3082,9 +2998,10 @@ static const orc_uint8 bc[] = { 1, 9, 24, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 97, 100, 100, 95, 118, 111, 108, 117, 109, 101, 95, 117, 51, 50, 11, 4, 4, 12, 4, - 4, 14, 4, 0, 0, 0, 128, 14, 4, 27, 0, 0, 0, 16, 4, 20, - 8, 20, 4, 132, 33, 4, 16, 178, 32, 33, 24, 147, 32, 32, 17, 170, - 33, 32, 132, 33, 33, 16, 105, 0, 0, 33, 2, 0, + 4, 14, 4, 0, 0, 0, 128, 15, 8, 27, 0, 0, 0, 0, 0, 0, + 0, 16, 4, 20, 8, 20, 4, 132, 33, 4, 16, 178, 32, 33, 24, 147, + 32, 32, 17, 170, 33, 32, 132, 33, 33, 16, 105, 0, 0, 33, 2, 0, + }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_adder_orc_add_volume_u32); @@ -3095,7 +3012,7 @@ orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); orc_program_add_constant (p, 4, 0x80000000, "c1"); - orc_program_add_constant (p, 4, 0x0000001b, "c2"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c2"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); orc_program_add_temporary (p, 4, "t2"); @@ -3236,8 +3153,9 @@ static const orc_uint8 bc[] = { 1, 9, 24, 97, 100, 100, 101, 114, 95, 111, 114, 99, 95, 97, 100, 100, 95, 118, 111, 108, 117, 109, 101, 95, 115, 51, 50, 11, 4, 4, 12, 4, - 4, 14, 4, 27, 0, 0, 0, 16, 4, 20, 8, 20, 4, 178, 32, 4, - 24, 147, 32, 32, 16, 170, 33, 32, 104, 0, 0, 33, 2, 0, + 4, 15, 8, 27, 0, 0, 0, 0, 0, 0, 0, 16, 4, 20, 8, 20, + 4, 178, 32, 4, 24, 147, 32, 32, 16, 170, 33, 32, 104, 0, 0, 33, + 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_adder_orc_add_volume_s32); @@ -3247,7 +3165,7 @@ orc_program_set_backup_function (p, _backup_adder_orc_add_volume_s32); orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 4, 0x0000001b, "c1"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c1"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); orc_program_add_temporary (p, 4, "t2"); @@ -3606,8 +3524,8 @@ { orc_union64 tmp; tmp.f = p1; - ex->params[ORC_VAR_P1] = tmp.x2[0]; - ex->params[ORC_VAR_T1] = tmp.x2[1]; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; } func = c->exec; diff -Nru gst-plugins-base1.0-1.4.3/gst/adder/Makefile.am gst-plugins-base1.0-1.6.1/gst/adder/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/adder/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/adder/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -14,18 +14,3 @@ libgstadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = gstadder.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstadder -:SHARED libgstadder \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstadder_la_SOURCES) \ - $(nodist_libgstadder_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \ - -:LDFLAGS $(libgstadder_la_LDFLAGS) \ - $(libgstadder_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/adder/Makefile.in gst-plugins-base1.0-1.6.1/gst/adder/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/adder/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/adder/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -38,7 +38,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,8 +112,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) subdir = gst/adder ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -125,7 +133,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -142,6 +149,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -253,6 +262,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -313,6 +324,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -342,6 +355,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -369,7 +384,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -384,6 +398,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -473,13 +488,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -532,6 +546,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -582,7 +597,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/adder/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/adder/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -591,7 +605,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: +$(top_srcdir)/common/orc.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -907,6 +921,8 @@ tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -944,21 +960,6 @@ cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstadder -:SHARED libgstadder \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstadder_la_SOURCES) \ - $(nodist_libgstadder_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \ - -:LDFLAGS $(libgstadder_la_LDFLAGS) \ - $(libgstadder_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst/app/Makefile.am gst-plugins-base1.0-1.6.1/gst/app/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/app/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/app/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -1,21 +1,7 @@ plugin_LTLIBRARIES = libgstapp.la libgstapp_la_SOURCES = gstapp.c -libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la +libgstapp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) +libgstapp_la_LIBADD = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la $(GST_BASE_LIBS) libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstapp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstapp -:SHARED libgstapp \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstapp_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \ - -:LDFLAGS $(libgstapp_la_LDFLAGS) \ - $(libgstapp_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/app/Makefile.in gst-plugins-base1.0-1.6.1/gst/app/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/app/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/app/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/app -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -102,7 +110,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -119,6 +126,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -153,8 +161,8 @@ am__installdirs = "$(DESTDIR)$(plugindir)" LTLIBRARIES = $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = -libgstapp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la +libgstapp_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ + $(am__DEPENDENCIES_1) am_libgstapp_la_OBJECTS = libgstapp_la-gstapp.lo libgstapp_la_OBJECTS = $(am_libgstapp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -225,6 +233,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -285,6 +294,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -314,6 +325,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -341,7 +354,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -356,6 +368,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -445,13 +458,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -504,6 +516,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -518,8 +531,8 @@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstapp.la libgstapp_la_SOURCES = gstapp.c -libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la +libgstapp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) +libgstapp_la_LIBADD = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la $(GST_BASE_LIBS) libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstapp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) all: all-am @@ -538,7 +551,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/app/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/app/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -847,20 +859,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstapp -:SHARED libgstapp \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstapp_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \ - -:LDFLAGS $(libgstapp_la_LDFLAGS) \ - $(libgstapp_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/audioconvert.c gst-plugins-base1.0-1.6.1/gst/audioconvert/audioconvert.c --- gst-plugins-base1.0-1.4.3/gst/audioconvert/audioconvert.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/audioconvert.c 2015-10-22 08:01:34.000000000 +0000 @@ -469,7 +469,7 @@ #define audio_convert_pack_double_hq_le MAKE_UNPACK_FUNC_NAME (double_hq_le) #define audio_convert_pack_double_hq_be MAKE_UNPACK_FUNC_NAME (double_hq_be) -static AudioConvertUnpack unpack_funcs[] = { +static const AudioConvertUnpack unpack_funcs[] = { (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8), (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8), (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8), @@ -512,7 +512,7 @@ (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be_float), }; -static AudioConvertPack pack_funcs[] = { +static const AudioConvertPack pack_funcs[] = { (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8), (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8), (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8), diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/audioconvert.h gst-plugins-base1.0-1.6.1/gst/audioconvert/audioconvert.h --- gst-plugins-base1.0-1.4.3/gst/audioconvert/audioconvert.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/audioconvert.h 2015-10-22 08:01:34.000000000 +0000 @@ -107,6 +107,11 @@ /* channel conversion matrix, m[in_channels][out_channels]. * If identity matrix, passthrough applies. */ gfloat **matrix; + + /* channel conversion matrix with int values, m[in_channels][out_channels]. + * this is matrix * (2^10) as integers */ + gint **matrix_int; + /* temp storage for channelmix */ gpointer tmp; diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioconvert.c gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioconvert.c --- gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioconvert.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioconvert.c 2015-10-22 08:01:34.000000000 +0000 @@ -26,18 +26,21 @@ * * Audioconvert converts raw audio buffers between various possible formats. * It supports integer to float conversion, width/depth conversion, - * signedness and endianness conversion and channel transformations. + * signedness and endianness conversion and channel transformations + * (ie. upmixing and downmixing), as well as dithering and noise-shaping. * * * Example launch line * |[ - * gst-launch -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE + * gst-launch-1.0 -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE * ]| This pipeline converts audio to 8-bit. The level element shows that * the output levels still match the one for a sine wave. * |[ - * gst-launch -v -m audiotestsrc ! audioconvert ! vorbisenc ! fakesink silent=TRUE + * gst-launch-1.0 -v -m uridecodebin uri=file:///path/to/audio.flac ! audioconvert ! vorbisenc ! oggmux ! filesink location=audio.ogg * ]| The vorbis encoder takes float audio data instead of the integer data - * generated by audiotestsrc. + * output by most other audio elements. This pipeline decodes a FLAC audio file + * (or any other audio file for which decoders are installed) and re-encodes + * it into an Ogg/Vorbis audio file. * */ @@ -83,6 +86,8 @@ GstCaps * incaps, GstCaps * outcaps); static GstFlowReturn gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf); +static gboolean gst_audio_convert_transform_meta (GstBaseTransform * trans, + GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); static void gst_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_audio_convert_get_property (GObject * object, guint prop_id, @@ -97,9 +102,9 @@ enum { - ARG_0, - ARG_DITHERING, - ARG_NOISE_SHAPING, + PROP_0, + PROP_DITHERING, + PROP_NOISE_SHAPING, }; #define DEBUG_INIT \ @@ -183,13 +188,13 @@ gobject_class->set_property = gst_audio_convert_set_property; gobject_class->get_property = gst_audio_convert_get_property; - g_object_class_install_property (gobject_class, ARG_DITHERING, + g_object_class_install_property (gobject_class, PROP_DITHERING, g_param_spec_enum ("dithering", "Dithering", "Selects between different dithering methods.", GST_TYPE_AUDIO_CONVERT_DITHERING, DITHER_TPDF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, ARG_NOISE_SHAPING, + g_object_class_install_property (gobject_class, PROP_NOISE_SHAPING, g_param_spec_enum ("noise-shaping", "Noise shaping", "Selects between different noise shaping methods.", GST_TYPE_AUDIO_CONVERT_NOISE_SHAPING, NOISE_SHAPING_NONE, @@ -213,6 +218,8 @@ GST_DEBUG_FUNCPTR (gst_audio_convert_set_caps); basetransform_class->transform = GST_DEBUG_FUNCPTR (gst_audio_convert_transform); + basetransform_class->transform_meta = + GST_DEBUG_FUNCPTR (gst_audio_convert_transform_meta); basetransform_class->passthrough_on_same_caps = TRUE; } @@ -860,6 +867,23 @@ } } +static gboolean +gst_audio_convert_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, + GstMeta * meta, GstBuffer * inbuf) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) + return TRUE; + + return FALSE; +} + static void gst_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) @@ -867,10 +891,10 @@ GstAudioConvert *this = GST_AUDIO_CONVERT (object); switch (prop_id) { - case ARG_DITHERING: + case PROP_DITHERING: this->dither = g_value_get_enum (value); break; - case ARG_NOISE_SHAPING: + case PROP_NOISE_SHAPING: this->ns = g_value_get_enum (value); break; default: @@ -886,10 +910,10 @@ GstAudioConvert *this = GST_AUDIO_CONVERT (object); switch (prop_id) { - case ARG_DITHERING: + case PROP_DITHERING: g_value_set_enum (value, this->dither); break; - case ARG_NOISE_SHAPING: + case PROP_NOISE_SHAPING: g_value_set_enum (value, this->ns); break; default: diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioconvertorc-dist.c gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioconvertorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioconvertorc-dist.c 2014-09-24 08:19:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioconvertorc-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -283,7 +283,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << p1; + var39.i = ((orc_uint32) var38.i) << p1; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -325,7 +325,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << ex->params[24]; + var39.i = ((orc_uint32) var38.i) << ex->params[24]; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -426,7 +426,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << p1; + var35.i = ((orc_uint32) var37.i) << p1; /* 4: storel */ ptr0[i] = var35; } @@ -458,7 +458,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << ex->params[24]; + var35.i = ((orc_uint32) var37.i) << ex->params[24]; /* 4: storel */ ptr0[i] = var35; } @@ -558,7 +558,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << p1; + var37.i = ((orc_uint32) var36.i) << p1; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -597,7 +597,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << ex->params[24]; + var37.i = ((orc_uint32) var36.i) << ex->params[24]; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -691,7 +691,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var34.i = var35.i << p1; + var34.i = ((orc_uint32) var35.i) << p1; /* 3: storel */ ptr0[i] = var34; } @@ -720,7 +720,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var34.i = var35.i << ex->params[24]; + var34.i = ((orc_uint32) var35.i) << ex->params[24]; /* 3: storel */ ptr0[i] = var34; } @@ -820,7 +820,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << p1; + var39.i = ((orc_uint32) var38.i) << p1; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -862,7 +862,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << ex->params[24]; + var39.i = ((orc_uint32) var38.i) << ex->params[24]; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -965,7 +965,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << p1; + var35.i = ((orc_uint32) var37.i) << p1; /* 4: storel */ ptr0[i] = var35; } @@ -997,7 +997,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << ex->params[24]; + var35.i = ((orc_uint32) var37.i) << ex->params[24]; /* 4: storel */ ptr0[i] = var35; } @@ -1096,7 +1096,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << p1; + var36.i = ((orc_uint32) var33.i) << p1; /* 3: xorl */ var35.i = var36.i ^ var34.i; /* 4: storel */ @@ -1132,7 +1132,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << ex->params[24]; + var36.i = ((orc_uint32) var33.i) << ex->params[24]; /* 3: xorl */ var35.i = var36.i ^ var34.i; /* 4: storel */ @@ -1221,7 +1221,7 @@ /* 0: loadl */ var32 = ptr4[i]; /* 1: shll */ - var33.i = var32.i << p1; + var33.i = ((orc_uint32) var32.i) << p1; /* 2: storel */ ptr0[i] = var33; } @@ -1247,7 +1247,7 @@ /* 0: loadl */ var32 = ptr4[i]; /* 1: shll */ - var33.i = var32.i << ex->params[24]; + var33.i = ((orc_uint32) var32.i) << ex->params[24]; /* 2: storel */ ptr0[i] = var33; } @@ -1340,7 +1340,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << p1; + var37.i = ((orc_uint32) var36.i) << p1; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -1379,7 +1379,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << ex->params[24]; + var37.i = ((orc_uint32) var36.i) << ex->params[24]; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -1476,7 +1476,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var34.i = var35.i << p1; + var34.i = ((orc_uint32) var35.i) << p1; /* 3: storel */ ptr0[i] = var34; } @@ -1505,7 +1505,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var34.i = var35.i << ex->params[24]; + var34.i = ((orc_uint32) var35.i) << ex->params[24]; /* 3: storel */ ptr0[i] = var34; } @@ -2897,7 +2897,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << p1; + var39.i = ((orc_uint32) var38.i) << p1; /* 5: xorl */ var40.i = var39.i ^ var35.i; /* 6: convld */ @@ -2942,7 +2942,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << ex->params[24]; + var39.i = ((orc_uint32) var38.i) << ex->params[24]; /* 5: xorl */ var40.i = var39.i ^ var35.i; /* 6: convld */ @@ -3050,7 +3050,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var38.i = var37.i << p1; + var38.i = ((orc_uint32) var37.i) << p1; /* 4: convld */ var35.f = var38.i; /* 5: storeq */ @@ -3085,7 +3085,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var38.i = var37.i << ex->params[24]; + var38.i = ((orc_uint32) var37.i) << ex->params[24]; /* 4: convld */ var35.f = var38.i; /* 5: storeq */ @@ -3193,7 +3193,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << p1; + var37.i = ((orc_uint32) var36.i) << p1; /* 4: xorl */ var38.i = var37.i ^ var34.i; /* 5: convld */ @@ -3235,7 +3235,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << ex->params[24]; + var37.i = ((orc_uint32) var36.i) << ex->params[24]; /* 4: xorl */ var38.i = var37.i ^ var34.i; /* 5: convld */ @@ -3337,7 +3337,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var36.i = var35.i << p1; + var36.i = ((orc_uint32) var35.i) << p1; /* 3: convld */ var34.f = var36.i; /* 4: storeq */ @@ -3369,7 +3369,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var36.i = var35.i << ex->params[24]; + var36.i = ((orc_uint32) var35.i) << ex->params[24]; /* 3: convld */ var34.f = var36.i; /* 4: storeq */ @@ -3476,7 +3476,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << p1; + var39.i = ((orc_uint32) var38.i) << p1; /* 5: xorl */ var40.i = var39.i ^ var35.i; /* 6: convld */ @@ -3521,7 +3521,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << ex->params[24]; + var39.i = ((orc_uint32) var38.i) << ex->params[24]; /* 5: xorl */ var40.i = var39.i ^ var35.i; /* 6: convld */ @@ -3630,7 +3630,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var38.i = var37.i << p1; + var38.i = ((orc_uint32) var37.i) << p1; /* 4: convld */ var35.f = var38.i; /* 5: storeq */ @@ -3665,7 +3665,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var38.i = var37.i << ex->params[24]; + var38.i = ((orc_uint32) var37.i) << ex->params[24]; /* 4: convld */ var35.f = var38.i; /* 5: storeq */ @@ -3770,7 +3770,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << p1; + var36.i = ((orc_uint32) var33.i) << p1; /* 3: xorl */ var37.i = var36.i ^ var34.i; /* 4: convld */ @@ -3809,7 +3809,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << ex->params[24]; + var36.i = ((orc_uint32) var33.i) << ex->params[24]; /* 3: xorl */ var37.i = var36.i ^ var34.i; /* 4: convld */ @@ -3906,7 +3906,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var35.i = var33.i << p1; + var35.i = ((orc_uint32) var33.i) << p1; /* 2: convld */ var34.f = var35.i; /* 3: storeq */ @@ -3935,7 +3935,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var35.i = var33.i << ex->params[24]; + var35.i = ((orc_uint32) var33.i) << ex->params[24]; /* 2: convld */ var34.f = var35.i; /* 3: storeq */ @@ -4037,7 +4037,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << p1; + var37.i = ((orc_uint32) var36.i) << p1; /* 4: xorl */ var38.i = var37.i ^ var34.i; /* 5: convld */ @@ -4079,7 +4079,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << ex->params[24]; + var37.i = ((orc_uint32) var36.i) << ex->params[24]; /* 4: xorl */ var38.i = var37.i ^ var34.i; /* 5: convld */ @@ -4181,7 +4181,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var36.i = var35.i << p1; + var36.i = ((orc_uint32) var35.i) << p1; /* 3: convld */ var34.f = var36.i; /* 4: storeq */ @@ -4213,7 +4213,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var36.i = var35.i << ex->params[24]; + var36.i = ((orc_uint32) var35.i) << ex->params[24]; /* 3: convld */ var34.f = var36.i; /* 4: storeq */ diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioquantize.c gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioquantize.c --- gst-plugins-base1.0-1.4.3/gst/audioconvert/gstaudioquantize.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/gstaudioquantize.c 2015-10-30 12:09:01.000000000 +0000 @@ -136,7 +136,7 @@ /* Dithering definitions * See http://en.wikipedia.org/wiki/Dithering or - * http://www.cadenzarecording.com/Dither.html for explainations. + * http://www.users.qwest.net/~volt42/cadenzarecording/DitherExplained.pdf for explainations. * * We already add the rounding offset to the dither noise here * to have only one overflow check instead of two. */ @@ -145,9 +145,14 @@ gint32 rand; \ gint32 dither = (1<<(scale)); +/* Assuming dither == 2^n, + * returns one of 2^(n+1) possible random values: + * -dither <= retval < dither */ +#define RANDOM_INT_DITHER(dither) \ + (- dither + (gst_fast_random_int32 () & ((dither << 1) - 1))) + #define ADD_DITHER_RPDF_I() \ - rand = gst_fast_random_int32_range (bias - dither, \ - bias + dither); \ + rand = bias + RANDOM_INT_DITHER(dither); \ if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand) \ tmp = G_MAXINT32; \ else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand) \ @@ -163,14 +168,11 @@ #define INIT_DITHER_TPDF_I() \ gint32 rand; \ - gint32 dither = (1<<(scale - 1)); \ - bias = bias >> 1; + gint32 dither = (1<<(scale - 1)); #define ADD_DITHER_TPDF_I() \ - rand = gst_fast_random_int32_range (bias - dither, \ - bias + dither - 1) \ - + gst_fast_random_int32_range (bias - dither, \ - bias + dither - 1); \ + rand = bias + RANDOM_INT_DITHER(dither) \ + + RANDOM_INT_DITHER(dither); \ if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand) \ tmp = G_MAXINT32; \ else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand) \ @@ -188,13 +190,11 @@ #define INIT_DITHER_TPDF_HF_I() \ gint32 rand; \ gint32 dither = (1<<(scale-1)); \ - gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand; \ - bias = bias >> 1; + gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand; #define ADD_DITHER_TPDF_HF_I() \ - tmp_rand = gst_fast_random_int32_range (bias - dither, \ - bias + dither); \ - rand = tmp_rand - last_random[chan_pos]; \ + tmp_rand = RANDOM_INT_DITHER(dither); \ + rand = bias + tmp_rand - last_random[chan_pos]; \ last_random[chan_pos] = tmp_rand; \ if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand) \ tmp = G_MAXINT32; \ @@ -296,30 +296,21 @@ #define ADD_NS_HIGH() \ cur_error = 0.0; \ for (j = 0; j < 8; j++) \ - cur_error += errors[chan_pos + j] * ns_high_coeffs[j]; \ + cur_error += errors[chan_pos*8 + j] * ns_high_coeffs[j]; \ tmp -= cur_error; \ orig = tmp; #define UPDATE_ERROR_HIGH() \ for (j = 7; j > 0; j--) \ - errors[chan_pos + j] = errors[chan_pos + j-1]; \ - errors[chan_pos] = (*dst)/factor - orig; - - -MAKE_QUANTIZE_FUNC_I (signed_none_none, NONE_FUNC, NONE_FUNC, ROUND); -MAKE_QUANTIZE_FUNC_I (signed_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I, - NONE_FUNC); -MAKE_QUANTIZE_FUNC_I (signed_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I, - NONE_FUNC); -MAKE_QUANTIZE_FUNC_I (signed_tpdf_hf_none, INIT_DITHER_TPDF_HF_I, - ADD_DITHER_TPDF_HF_I, NONE_FUNC); + errors[chan_pos*8 + j] = errors[chan_pos*8 + j-1]; \ + errors[chan_pos*8] = (*dst)/factor - orig; -MAKE_QUANTIZE_FUNC_I (unsigned_none_none, NONE_FUNC, NONE_FUNC, ROUND); -MAKE_QUANTIZE_FUNC_I (unsigned_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I, +MAKE_QUANTIZE_FUNC_I (int_none_none, NONE_FUNC, NONE_FUNC, ROUND); +MAKE_QUANTIZE_FUNC_I (int_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I, NONE_FUNC); -MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I, +MAKE_QUANTIZE_FUNC_I (int_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I, NONE_FUNC); -MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_hf_none, INIT_DITHER_TPDF_HF_I, +MAKE_QUANTIZE_FUNC_I (int_tpdf_hf_none, INIT_DITHER_TPDF_HF_I, ADD_DITHER_TPDF_HF_I, NONE_FUNC); MAKE_QUANTIZE_FUNC_F (float_none_error_feedback, NONE_FUNC, @@ -362,15 +353,11 @@ MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_high, INIT_DITHER_TPDF_HF_F, INIT_NS_HIGH, ADD_NS_HIGH, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_HIGH); -static AudioConvertQuantize quantize_funcs[] = { - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_none_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_rpdf_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_hf_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_none_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_rpdf_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_none), - (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_hf_none), +static const AudioConvertQuantize quantize_funcs[] = { + (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_none_none), + (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_rpdf_none), + (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_tpdf_none), + (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_tpdf_hf_none), (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_error_feedback), (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_simple), (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_medium), @@ -476,9 +463,8 @@ if (ctx->ns == NOISE_SHAPING_NONE) { index += ctx->dither; - index += GST_AUDIO_FORMAT_INFO_IS_SIGNED (ctx->out.finfo) ? 0 : 4; } else { - index += 8 + (4 * ctx->dither); + index += 4 + (4 * ctx->dither); index += ctx->ns - 1; } diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/gstchannelmix.c gst-plugins-base1.0-1.6.1/gst/audioconvert/gstchannelmix.c --- gst-plugins-base1.0-1.4.3/gst/audioconvert/gstchannelmix.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/gstchannelmix.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,6 +29,8 @@ #include "gstchannelmix.h" +#define INT_MATRIX_FACTOR_EXPONENT 10 + /* * Channel matrix functions. */ @@ -48,6 +50,13 @@ g_free (this->matrix); this->matrix = NULL; + + for (i = 0; i < this->in.channels; i++) + g_free (this->matrix_int[i]); + g_free (this->matrix_int); + + this->matrix_int = NULL; + g_free (this->tmp); this->tmp = NULL; } @@ -590,6 +599,26 @@ } } +/* only call this after this->matrix is fully set up and normalized */ +static void +gst_channel_mix_setup_matrix_int (AudioConvertCtx * this) +{ + gint i, j; + gfloat tmp; + gfloat factor = (1 << INT_MATRIX_FACTOR_EXPONENT); + + this->matrix_int = g_new0 (gint *, this->in.channels); + + for (i = 0; i < this->in.channels; i++) { + this->matrix_int[i] = g_new (gint, this->out.channels); + + for (j = 0; j < this->out.channels; j++) { + tmp = this->matrix[i][j] * factor; + this->matrix_int[i][j] = (gint)tmp; + } + } +} + /* only call after this->out and this->in are filled in */ void gst_channel_mix_setup_matrix (AudioConvertCtx * this) @@ -618,6 +647,8 @@ /* setup the matrix' internal values */ gst_channel_mix_fill_matrix (this); + gst_channel_mix_setup_matrix_int(this); + #ifndef GST_DISABLE_GST_DEBUG /* debug */ { @@ -694,9 +725,12 @@ /* convert */ res = 0; for (in = 0; in < inchannels; in++) { - res += in_data[n * inchannels + in] * this->matrix[in][out]; + res += in_data[n * inchannels + in] * (gint64)this->matrix_int[in][out]; } + /* remove factor from int matrix */ + res = res >> INT_MATRIX_FACTOR_EXPONENT; + /* clip (shouldn't we use doubles instead as intermediate format?) */ if (res < G_MININT32) res = G_MININT32; diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/gstfastrandom.h gst-plugins-base1.0-1.6.1/gst/audioconvert/gstfastrandom.h --- gst-plugins-base1.0-1.4.3/gst/audioconvert/gstfastrandom.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/gstfastrandom.h 2015-10-22 08:01:34.000000000 +0000 @@ -38,32 +38,12 @@ return (state = state * 1103515245 + 12345); } -static inline guint32 -gst_fast_random_uint32_range (gint32 start, gint32 end) -{ - guint64 tmp = gst_fast_random_uint32 (); - - tmp = (tmp * (end - start)) / G_MAXUINT32 + start; - - return (guint32) tmp; -} - static inline gint32 gst_fast_random_int32 (void) { return (gint32) gst_fast_random_uint32 (); } -static inline gint32 -gst_fast_random_int32_range (gint32 start, gint32 end) -{ - gint64 tmp = gst_fast_random_uint32 (); - - tmp = (tmp * (end - start)) / G_MAXUINT32 + start; - - return (gint32) tmp; -} - static inline gdouble gst_fast_random_double (void) { diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/Makefile.am gst-plugins-base1.0-1.6.1/gst/audioconvert/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/audioconvert/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -25,18 +25,3 @@ gstaudioquantize.h \ gstfastrandom.h \ plugin.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudioconvert_la_SOURCES) \ - $(nodist_libgstaudioconvert_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \ - -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \ - $(libgstaudioconvert_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/audioconvert/Makefile.in gst-plugins-base1.0-1.6.1/gst/audioconvert/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/audioconvert/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioconvert/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -38,7 +38,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,8 +112,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) subdir = gst/audioconvert ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -125,7 +133,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -142,6 +149,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -259,6 +268,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -319,6 +330,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -348,6 +361,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -375,7 +390,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -390,6 +404,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -479,13 +494,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -538,6 +552,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -601,7 +616,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioconvert/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/audioconvert/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -610,7 +624,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: +$(top_srcdir)/common/orc.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -958,6 +972,8 @@ tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -995,21 +1011,6 @@ cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudioconvert_la_SOURCES) \ - $(nodist_libgstaudioconvert_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \ - -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \ - $(libgstaudioconvert_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst/audiorate/gstaudiorate.c gst-plugins-base1.0-1.6.1/gst/audiorate/gstaudiorate.c --- gst-plugins-base1.0-1.4.3/gst/audiorate/gstaudiorate.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiorate/gstaudiorate.c 2015-10-22 08:01:34.000000000 +0000 @@ -51,9 +51,15 @@ * * Example pipelines * |[ - * gst-launch -v alsasrc ! audiorate ! wavenc ! filesink location=alsa.wav - * ]| Capture audio from an ALSA device, and turn it into a perfect stream + * gst-launch-1.0 -v autoaudiosrc ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav + * ]| Capture audio from the sound card and turn it into a perfect stream * for saving in a raw audio file. + * |[ + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav + * ]| Decodes an audio file and transforms it into a perfect stream for saving + * in a raw audio WAV file. Without the audio rate, the timing might not be + * preserved correctly in the WAV file in case the decoded stream is jittery + * or there are samples missing. * */ @@ -82,14 +88,14 @@ enum { - ARG_0, - ARG_IN, - ARG_OUT, - ARG_ADD, - ARG_DROP, - ARG_SILENT, - ARG_TOLERANCE, - ARG_SKIP_TO_FIRST + PROP_0, + PROP_IN, + PROP_OUT, + PROP_ADD, + PROP_DROP, + PROP_SILENT, + PROP_TOLERANCE, + PROP_SKIP_TO_FIRST }; static GstStaticPadTemplate gst_audio_rate_src_template = @@ -140,20 +146,20 @@ object_class->set_property = gst_audio_rate_set_property; object_class->get_property = gst_audio_rate_get_property; - g_object_class_install_property (object_class, ARG_IN, + g_object_class_install_property (object_class, PROP_IN, g_param_spec_uint64 ("in", "In", "Number of input samples", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, ARG_OUT, + g_object_class_install_property (object_class, PROP_OUT, g_param_spec_uint64 ("out", "Out", "Number of output samples", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); pspec_add = g_param_spec_uint64 ("add", "Add", "Number of added samples", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, ARG_ADD, pspec_add); + g_object_class_install_property (object_class, PROP_ADD, pspec_add); pspec_drop = g_param_spec_uint64 ("drop", "Drop", "Number of dropped samples", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, ARG_DROP, pspec_drop); - g_object_class_install_property (object_class, ARG_SILENT, + g_object_class_install_property (object_class, PROP_DROP, pspec_drop); + g_object_class_install_property (object_class, PROP_SILENT, g_param_spec_boolean ("silent", "silent", "Don't emit notify for dropped and duplicated frames", DEFAULT_SILENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -163,7 +169,7 @@ * The difference between incoming timestamp and next timestamp must exceed * the given value for audiorate to add or drop samples. */ - g_object_class_install_property (object_class, ARG_TOLERANCE, + g_object_class_install_property (object_class, PROP_TOLERANCE, g_param_spec_uint64 ("tolerance", "tolerance", "Only act if timestamp jitter/imperfection exceeds indicated tolerance (ns)", 0, G_MAXUINT64, DEFAULT_TOLERANCE, @@ -174,7 +180,7 @@ * * Don't produce buffers before the first one we receive. */ - g_object_class_install_property (object_class, ARG_SKIP_TO_FIRST, + g_object_class_install_property (object_class, PROP_SKIP_TO_FIRST, g_param_spec_boolean ("skip-to-first", "Skip to first buffer", "Don't produce buffers before the first one we receive", DEFAULT_SKIP_TO_FIRST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -337,10 +343,19 @@ res = gst_pad_push_event (audiorate->srcpad, event); break; case GST_EVENT_GAP: - /* no gaps after audiorate, ignore the event */ + { + /* Fill until end of gap */ + GstClockTime timestamp, duration; + gst_event_parse_gap (event, ×tamp, &duration); gst_event_unref (event); + if (GST_CLOCK_TIME_IS_VALID (timestamp)) { + if (GST_CLOCK_TIME_IS_VALID (duration)) + timestamp += duration; + gst_audio_rate_fill_to_time (audiorate, timestamp); + } res = TRUE; break; + } default: res = gst_pad_event_default (pad, parent, event); break; @@ -445,7 +460,7 @@ * buffer in that segment, which is the offset expressed in DEFAULT units. */ /* convert first timestamp of segment to sample position */ - pos = gst_util_uint64_scale_int (audiorate->src_segment.start, + pos = gst_util_uint64_scale_int_round (audiorate->src_segment.start, GST_AUDIO_INFO_RATE (&audiorate->info), GST_SECOND); GST_DEBUG_OBJECT (audiorate, "resync to offset %" G_GINT64_FORMAT, pos); @@ -454,12 +469,13 @@ audiorate->discont = TRUE; audiorate->next_offset = pos; - audiorate->next_ts = gst_util_uint64_scale_int (audiorate->next_offset, - GST_SECOND, GST_AUDIO_INFO_RATE (&audiorate->info)); + audiorate->next_ts = + gst_util_uint64_scale_int_round (audiorate->next_offset, GST_SECOND, + GST_AUDIO_INFO_RATE (&audiorate->info)); if (audiorate->skip_to_first && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { GST_DEBUG_OBJECT (audiorate, "but skipping to first buffer instead"); - pos = gst_util_uint64_scale_int (GST_BUFFER_TIMESTAMP (buf), + pos = gst_util_uint64_scale_int_round (GST_BUFFER_TIMESTAMP (buf), GST_AUDIO_INFO_RATE (&audiorate->info), GST_SECOND); GST_DEBUG_OBJECT (audiorate, "so resync to offset %" G_GINT64_FORMAT, pos); @@ -539,10 +555,11 @@ * offset to get duration. Necessary complexity to get 'perfect' * streams */ GST_BUFFER_TIMESTAMP (fill) = audiorate->next_ts; - audiorate->next_ts = gst_util_uint64_scale_int (audiorate->next_offset, - GST_SECOND, rate); - GST_BUFFER_DURATION (fill) = audiorate->next_ts - - GST_BUFFER_TIMESTAMP (fill); + audiorate->next_ts = + gst_util_uint64_scale_int_round (audiorate->next_offset, GST_SECOND, + rate); + GST_BUFFER_DURATION (fill) = + audiorate->next_ts - GST_BUFFER_TIMESTAMP (fill); /* we created this buffer to fill a gap */ GST_BUFFER_FLAG_SET (fill, GST_BUFFER_FLAG_GAP); @@ -621,7 +638,7 @@ GST_BUFFER_OFFSET_END (buf) = in_offset_end; GST_BUFFER_TIMESTAMP (buf) = audiorate->next_ts; - audiorate->next_ts = gst_util_uint64_scale_int (in_offset_end, + audiorate->next_ts = gst_util_uint64_scale_int_round (in_offset_end, GST_SECOND, rate); GST_BUFFER_DURATION (buf) = audiorate->next_ts - GST_BUFFER_TIMESTAMP (buf); @@ -675,13 +692,13 @@ GstAudioRate *audiorate = GST_AUDIO_RATE (object); switch (prop_id) { - case ARG_SILENT: + case PROP_SILENT: audiorate->silent = g_value_get_boolean (value); break; - case ARG_TOLERANCE: + case PROP_TOLERANCE: audiorate->tolerance = g_value_get_uint64 (value); break; - case ARG_SKIP_TO_FIRST: + case PROP_SKIP_TO_FIRST: audiorate->skip_to_first = g_value_get_boolean (value); break; default: @@ -697,25 +714,25 @@ GstAudioRate *audiorate = GST_AUDIO_RATE (object); switch (prop_id) { - case ARG_IN: + case PROP_IN: g_value_set_uint64 (value, audiorate->in); break; - case ARG_OUT: + case PROP_OUT: g_value_set_uint64 (value, audiorate->out); break; - case ARG_ADD: + case PROP_ADD: g_value_set_uint64 (value, audiorate->add); break; - case ARG_DROP: + case PROP_DROP: g_value_set_uint64 (value, audiorate->drop); break; - case ARG_SILENT: + case PROP_SILENT: g_value_set_boolean (value, audiorate->silent); break; - case ARG_TOLERANCE: + case PROP_TOLERANCE: g_value_set_uint64 (value, audiorate->tolerance); break; - case ARG_SKIP_TO_FIRST: + case PROP_SKIP_TO_FIRST: g_value_set_boolean (value, audiorate->skip_to_first); break; default: diff -Nru gst-plugins-base1.0-1.4.3/gst/audiorate/Makefile.am gst-plugins-base1.0-1.6.1/gst/audiorate/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/audiorate/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiorate/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -9,17 +9,3 @@ $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la libgstaudiorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudiorate -:SHARED libgstaudiorate \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudiorate_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \ - -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \ - $(libgstaudiorate_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/audiorate/Makefile.in gst-plugins-base1.0-1.6.1/gst/audiorate/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/audiorate/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiorate/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/audiorate -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -227,6 +236,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -287,6 +297,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -316,6 +328,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -343,7 +357,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -358,6 +371,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -447,13 +461,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -506,6 +519,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -543,7 +557,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiorate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/audiorate/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -852,20 +865,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudiorate -:SHARED libgstaudiorate \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudiorate_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \ - -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \ - $(libgstaudiorate_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/audioresample/gstaudioresample.c gst-plugins-base1.0-1.6.1/gst/audioresample/gstaudioresample.c --- gst-plugins-base1.0-1.4.3/gst/audioresample/gstaudioresample.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioresample/gstaudioresample.c 2015-10-22 08:01:34.000000000 +0000 @@ -36,9 +36,10 @@ * * Example launch line * |[ - * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! alsasink - * ]| Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa. + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! autoaudiosink + * ]| Decode an audio file and downsample it to 8Khz and play sound. * To create the Ogg/Vorbis file refer to the documentation of vorbisenc. + * This assumes there is an audio sink that will accept/handle 8kHz audio. * */ @@ -132,6 +133,8 @@ GstCaps * incaps, GstCaps * outcaps); static GstFlowReturn gst_audio_resample_transform (GstBaseTransform * base, GstBuffer * inbuf, GstBuffer * outbuf); +static gboolean gst_audio_resample_transform_meta (GstBaseTransform * trans, + GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); static gboolean gst_audio_resample_sink_event (GstBaseTransform * base, GstEvent * event); static gboolean gst_audio_resample_start (GstBaseTransform * base); @@ -200,6 +203,8 @@ GST_DEBUG_FUNCPTR (gst_audio_resample_transform); GST_BASE_TRANSFORM_CLASS (klass)->sink_event = GST_DEBUG_FUNCPTR (gst_audio_resample_sink_event); + GST_BASE_TRANSFORM_CLASS (klass)->transform_meta = + GST_DEBUG_FUNCPTR (gst_audio_resample_transform_meta); GST_BASE_TRANSFORM_CLASS (klass)->passthrough_on_same_caps = TRUE; } @@ -1246,6 +1251,23 @@ } static gboolean +gst_audio_resample_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf, + GstMeta * meta, GstBuffer * inbuf) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) + return TRUE; + + return FALSE; +} + +static gboolean gst_audio_resample_query (GstPad * pad, GstObject * parent, GstQuery * query) { GstAudioResample *resample = GST_AUDIO_RESAMPLE (parent); @@ -1388,7 +1410,7 @@ static GType speex_resampler_sinc_filter_mode_type = 0; if (!speex_resampler_sinc_filter_mode_type) { - static GEnumValue sinc_filter_modes[] = { + static const GEnumValue sinc_filter_modes[] = { {SPEEX_RESAMPLER_SINC_FILTER_INTERPOLATED, "Use interpolated sinc table", "interpolated"}, {SPEEX_RESAMPLER_SINC_FILTER_FULL, "Use full sinc table", "full"}, diff -Nru gst-plugins-base1.0-1.4.3/gst/audioresample/gstaudioresample.h gst-plugins-base1.0-1.6.1/gst/audioresample/gstaudioresample.h --- gst-plugins-base1.0-1.4.3/gst/audioresample/gstaudioresample.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioresample/gstaudioresample.h 2015-10-22 08:01:34.000000000 +0000 @@ -64,9 +64,6 @@ guint64 num_gap_samples; guint64 num_nongap_samples; - GstAudioInfo in; - GstAudioInfo out; - /* properties */ gint quality; diff -Nru gst-plugins-base1.0-1.4.3/gst/audioresample/Makefile.am gst-plugins-base1.0-1.6.1/gst/audioresample/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/audioresample/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioresample/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -42,17 +42,3 @@ resample_neon.h \ speex_resampler.h \ speex_resampler_wrapper.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudioresample -:SHARED libgstaudioresample \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudioresample_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \ - -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \ - $(libgstaudioresample_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/audioresample/Makefile.in gst-plugins-base1.0-1.6.1/gst/audioresample/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/audioresample/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioresample/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/audioresample -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -233,6 +242,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -293,6 +303,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -322,6 +334,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -349,7 +363,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -364,6 +377,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -453,13 +467,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -512,6 +525,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -580,7 +594,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioresample/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/audioresample/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -913,20 +926,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudioresample -:SHARED libgstaudioresample \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudioresample_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \ - -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \ - $(libgstaudioresample_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/audioresample/resample.c gst-plugins-base1.0-1.6.1/gst/audioresample/resample.c --- gst-plugins-base1.0-1.4.3/gst/audioresample/resample.c 2014-09-11 14:09:19.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audioresample/resample.c 2015-10-22 08:01:34.000000000 +0000 @@ -224,7 +224,7 @@ int use_neon:1; }; -static double kaiser12_table[68] = { +static const double kaiser12_table[68] = { 0.99859849, 1.00000000, 0.99859849, 0.99440475, 0.98745105, 0.97779076, 0.96549770, 0.95066529, 0.93340547, 0.91384741, 0.89213598, 0.86843014, 0.84290116, 0.81573067, 0.78710866, 0.75723148, 0.72629970, 0.69451601, @@ -240,7 +240,7 @@ }; /* -static double kaiser12_table[36] = { +static const double kaiser12_table[36] = { 0.99440475, 1.00000000, 0.99440475, 0.97779076, 0.95066529, 0.91384741, 0.86843014, 0.81573067, 0.75723148, 0.69451601, 0.62920216, 0.56287762, 0.49704014, 0.43304576, 0.37206735, 0.31506490, 0.26276832, 0.21567274, @@ -248,7 +248,7 @@ 0.03111947, 0.02127838, 0.01402878, 0.00886058, 0.00531256, 0.00298291, 0.00153438, 0.00069463, 0.00025272, 0.0000527734, 0.00000500, 0.00000000}; */ -static double kaiser10_table[36] = { +static const double kaiser10_table[36] = { 0.99537781, 1.00000000, 0.99537781, 0.98162644, 0.95908712, 0.92831446, 0.89005583, 0.84522401, 0.79486424, 0.74011713, 0.68217934, 0.62226347, 0.56155915, 0.50119680, 0.44221549, 0.38553619, 0.33194107, 0.28205962, @@ -257,7 +257,7 @@ 0.00488951, 0.00257636, 0.00115101, 0.00035515, 0.00000000, 0.00000000 }; -static double kaiser8_table[36] = { +static const double kaiser8_table[36] = { 0.99635258, 1.00000000, 0.99635258, 0.98548012, 0.96759014, 0.94302200, 0.91223751, 0.87580811, 0.83439927, 0.78875245, 0.73966538, 0.68797126, 0.63451750, 0.58014482, 0.52566725, 0.47185369, 0.41941150, 0.36897272, @@ -266,7 +266,7 @@ 0.01563093, 0.00959968, 0.00527363, 0.00233883, 0.00050000, 0.00000000 }; -static double kaiser6_table[36] = { +static const double kaiser6_table[36] = { 0.99733006, 1.00000000, 0.99733006, 0.98935595, 0.97618418, 0.95799003, 0.93501423, 0.90755855, 0.87598009, 0.84068475, 0.80211977, 0.76076565, 0.71712752, 0.67172623, 0.62508937, 0.57774224, 0.53019925, 0.48295561, @@ -277,7 +277,7 @@ struct FuncDef { - double *table; + const double *table; int oversample; }; @@ -1200,6 +1200,8 @@ out += ochunk * st->out_stride; if (in) in += ichunk * istride; + if (olen == 0 && ichunk == 0) + break; } } *in_len -= ilen; @@ -1280,6 +1282,8 @@ out += (ochunk + omagic) * ostride_save; if (in) in += ichunk * istride_save; + if (olen == 0 && ichunk == 0) + break; } st->out_stride = ostride_save; *in_len -= ilen; diff -Nru gst-plugins-base1.0-1.4.3/gst/audiotestsrc/gstaudiotestsrc.c gst-plugins-base1.0-1.6.1/gst/audiotestsrc/gstaudiotestsrc.c --- gst-plugins-base1.0-1.4.3/gst/audiotestsrc/gstaudiotestsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiotestsrc/gstaudiotestsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -25,11 +25,11 @@ * * Example launch line * |[ - * gst-launch audiotestsrc ! audioconvert ! alsasink + * gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink * ]| This pipeline produces a sine with default frequency, 440 Hz, and the * default volume, 0.8 (relative to a maximum 1.0). * |[ - * gst-launch audiotestsrc wave=2 freq=200 ! audioconvert ! tee name=t ! queue ! alsasink t. ! queue ! libvisual_lv_scope ! videoconvert ! xvimagesink + * gst-launch-1.0 audiotestsrc wave=2 freq=200 ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! audioconvert ! libvisual_lv_scope ! videoconvert ! autovideosink * ]| In this example a saw wave is generated. The wave is shown using a * scope visualizer from libvisual, allowing you to visually verify that * the saw wave is correct. @@ -71,8 +71,7 @@ PROP_IS_LIVE, PROP_TIMESTAMP_OFFSET, PROP_CAN_ACTIVATE_PUSH, - PROP_CAN_ACTIVATE_PULL, - PROP_LAST + PROP_CAN_ACTIVATE_PULL }; #if G_BYTE_ORDER == G_LITTLE_ENDIAN @@ -341,6 +340,23 @@ res = TRUE; break; } + case GST_QUERY_LATENCY: + { + if (src->info.rate > 0) { + GstClockTime latency; + + latency = + gst_util_uint64_scale (src->generate_samples_per_buffer, GST_SECOND, + src->info.rate); + gst_query_set_latency (query, + gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency, + GST_CLOCK_TIME_NONE); + GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT, + GST_TIME_ARGS (latency)); + res = TRUE; + } + break; + } default: res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); break; diff -Nru gst-plugins-base1.0-1.4.3/gst/audiotestsrc/Makefile.am gst-plugins-base1.0-1.6.1/gst/audiotestsrc/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/audiotestsrc/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiotestsrc/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -9,17 +9,3 @@ libgstaudiotestsrc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = gstaudiotestsrc.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \ - -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \ - $(libgstaudiotestsrc_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/audiotestsrc/Makefile.in gst-plugins-base1.0-1.6.1/gst/audiotestsrc/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/audiotestsrc/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/audiotestsrc/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/audiotestsrc -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -229,6 +238,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -289,6 +299,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -318,6 +330,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -345,7 +359,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -360,6 +373,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -449,13 +463,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -508,6 +521,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -546,7 +560,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -855,20 +868,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \ - -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \ - $(libgstaudiotestsrc_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/encoding/gstencodebin.c gst-plugins-base1.0-1.6.1/gst/encoding/gstencodebin.c --- gst-plugins-base1.0-1.4.3/gst/encoding/gstencodebin.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/encoding/gstencodebin.c 2015-10-22 08:01:34.000000000 +0000 @@ -215,10 +215,12 @@ GList *converters; /* List of conversion GstElement */ GstElement *capsfilter; /* profile->restriction (if non-NULL/ANY) */ GstElement *encoder; /* Encoder (can be NULL) */ + GstElement *fakesink; /* Fakesink (can be NULL) */ GstElement *combiner; GstElement *parser; GstElement *smartencoder; GstElement *outfilter; /* Output capsfilter (streamprofile.format) */ + gulong outputfilter_caps_sid; GstElement *formatter; GstElement *outqueue; /* Queue just before the muxer */ gulong restriction_sid; @@ -249,8 +251,7 @@ PROP_QUEUE_TIME_MAX, PROP_AUDIO_JITTER_TOLERANCE, PROP_AVOID_REENCODING, - PROP_FLAGS, - PROP_LAST + PROP_FLAGS }; /* Signals */ @@ -316,6 +317,7 @@ static StreamGroup *_create_stream_group (GstEncodeBin * ebin, GstEncodingProfile * sprof, const gchar * sinkpadname, GstCaps * sinkcaps); static void stream_group_remove (GstEncodeBin * ebin, StreamGroup * sgroup); +static void stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup); static GstPad *gst_encode_bin_request_pad_signal (GstEncodeBin * encodebin, GstCaps * caps); static GstPad *gst_encode_bin_request_profile_pad_signal (GstEncodeBin * @@ -657,8 +659,15 @@ if (profilename && !strcmp (name, profilename)) { guint presence = gst_encoding_profile_get_presence (sprof); + GST_DEBUG ("Found profile matching the requested name"); + if (!gst_encoding_profile_is_enabled (sprof)) { + GST_INFO_OBJECT (ebin, "%p is disabled, not using it", sprof); + + return NULL; + } + if (presence == 0 || presence > stream_profile_used_count (ebin, sprof)) return sprof; @@ -684,7 +693,9 @@ if (G_TYPE_FROM_INSTANCE (sprof) == ptype) { guint presence = gst_encoding_profile_get_presence (sprof); GST_DEBUG ("Found a stream profile with the same type"); - if (presence == 0 + if (!gst_encoding_profile_is_enabled (sprof)) { + GST_INFO_OBJECT (ebin, "%p is disabled, not using it", sprof); + } else if (presence == 0 || (presence > stream_profile_used_count (ebin, sprof))) return sprof; } else if (caps && ptype == G_TYPE_NONE) { @@ -1076,7 +1087,73 @@ g_object_set (group->capsfilter, "caps", restriction, NULL); } -/* FIXME : Add handling of streams that don't need encoding */ +static void +_outfilter_caps_set_cb (GstPad * outfilter_sinkpad, + GParamSpec * arg G_GNUC_UNUSED, StreamGroup * group) +{ + GstCaps *caps; + + g_object_get (outfilter_sinkpad, "caps", &caps, NULL); + GST_INFO_OBJECT (group->ebin, "Forcing caps to %" GST_PTR_FORMAT, caps); + g_object_set (group->outfilter, "caps", caps, NULL); + g_signal_handler_disconnect (outfilter_sinkpad, group->outputfilter_caps_sid); + group->outputfilter_caps_sid = 0; +} + +static void +_set_group_caps_format (StreamGroup * sgroup, GstEncodingProfile * prof, + GstCaps * format) +{ + g_object_set (sgroup->outfilter, "caps", format, NULL); + + if (!gst_encoding_profile_get_allow_dynamic_output (prof)) { + if (!sgroup->outputfilter_caps_sid) { + sgroup->outputfilter_caps_sid = + g_signal_connect (sgroup->outfilter->sinkpads->data, + "notify::caps", G_CALLBACK (_outfilter_caps_set_cb), sgroup); + } + } +} + +static void +_post_missing_plugin_message (GstEncodeBin * ebin, GstEncodingProfile * prof) +{ + GstCaps *format; + format = gst_encoding_profile_get_format (prof); + + GST_ERROR_OBJECT (ebin, "Couldn't create encoder for format %" GST_PTR_FORMAT, + format); + /* missing plugin support */ + gst_element_post_message (GST_ELEMENT_CAST (ebin), + gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin), format)); + GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL), + ("Couldn't create encoder for format %" GST_PTR_FORMAT, format)); + + gst_caps_unref (format); +} + +static GstPadProbeReturn +_missing_plugin_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata) +{ + StreamGroup *sgroup = udata; + GstEncodeBin *ebin = sgroup->ebin; + + _post_missing_plugin_message (ebin, sgroup->profile); + + return GST_PAD_PROBE_OK; +} + +static void +_set_up_fake_encoder_pad_probe (GstEncodeBin * ebin, StreamGroup * sgroup) +{ + GstPad *pad = gst_element_get_static_pad (sgroup->fakesink, "sink"); + + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, _missing_plugin_probe, + sgroup, NULL); + + gst_object_unref (pad); +} + /* FIXME : Add handling of streams that don't require conversion elements */ /* * Create the elements, StreamGroup, add the sink pad, link it to the muxer @@ -1091,6 +1168,7 @@ GstPad *sinkpad, *srcpad, *muxerpad = NULL; /* Element we will link to the encoder */ GstElement *last = NULL; + GstElement *encoder = NULL; GList *tmp, *tosync = NULL; GstCaps *format, *restriction; const gchar *missing_element_name; @@ -1116,14 +1194,6 @@ * * One for already encoded data */ - /* Exception to the rule above: - * We check if we have an available encoder so we can abort early */ - /* FIXME : What if we only want to do passthrough ??? */ - GST_LOG ("Checking for encoder availability"); - sgroup->encoder = _get_encoder (ebin, sprof); - if (G_UNLIKELY (sgroup->encoder == NULL)) - goto no_encoder; - /* Muxer. * If we are handling a container profile, figure out if the muxer has a * sinkpad compatible with the selected profile */ @@ -1178,7 +1248,7 @@ * This will receive the format caps from the streamprofile */ GST_DEBUG ("Adding output capsfilter for %" GST_PTR_FORMAT, format); sgroup->outfilter = gst_element_factory_make ("capsfilter", NULL); - g_object_set (sgroup->outfilter, "caps", format, NULL); + _set_group_caps_format (sgroup, sprof, format); gst_bin_add (GST_BIN (ebin), sgroup->outfilter); tosync = g_list_append (tosync, sgroup->outfilter); @@ -1287,19 +1357,29 @@ /* 1. Create the encoder */ GST_LOG ("Adding encoder"); - last = sgroup->encoder; - gst_bin_add ((GstBin *) ebin, sgroup->encoder); - tosync = g_list_append (tosync, sgroup->encoder); - - sinkpad = - local_element_request_pad (sgroup->combiner, NULL, "encodingsink", NULL); - if (G_UNLIKELY (sinkpad == NULL)) - goto no_combiner_sinkpad; - srcpad = gst_element_get_static_pad (sgroup->encoder, "src"); - if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK)) - goto encoder_link_failure; - g_object_unref (sinkpad); - g_object_unref (srcpad); + sgroup->encoder = _get_encoder (ebin, sprof); + if (sgroup->encoder != NULL) { + gst_bin_add ((GstBin *) ebin, sgroup->encoder); + tosync = g_list_append (tosync, sgroup->encoder); + + sinkpad = + local_element_request_pad (sgroup->combiner, NULL, "encodingsink", + NULL); + if (G_UNLIKELY (sinkpad == NULL)) + goto no_combiner_sinkpad; + srcpad = gst_element_get_static_pad (sgroup->encoder, "src"); + if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK)) + goto encoder_link_failure; + g_object_unref (sinkpad); + g_object_unref (srcpad); + } else if (gst_encoding_profile_get_preset (sgroup->profile) + || gst_encoding_profile_get_preset_name (sgroup->profile)) { + _post_missing_plugin_message (ebin, sprof); + goto cleanup; + } else { + /* passthrough can still work, if we discover that * + * encoding is required we post a missing plugin message */ + } /* 3. Create the conversion/restriction elements */ @@ -1312,7 +1392,21 @@ g_object_set (sgroup->capsfilter, "caps", restriction, NULL); gst_bin_add ((GstBin *) ebin, sgroup->capsfilter); tosync = g_list_append (tosync, sgroup->capsfilter); - fast_element_link (sgroup->capsfilter, sgroup->encoder); + if (sgroup->encoder == NULL) { + /* no encoder available but it might be possible to just do passthrough, so + * let's just set up a fake pad to detect that encoding was attempted and + * if so it posts the missing plugin message */ + sgroup->fakesink = gst_element_factory_make ("fakesink", NULL); + g_object_set (sgroup->fakesink, "async", FALSE, NULL); + gst_bin_add (GST_BIN_CAST (ebin), sgroup->fakesink); + tosync = g_list_append (tosync, sgroup->fakesink); + encoder = sgroup->fakesink; + + _set_up_fake_encoder_pad_probe (ebin, sgroup); + } else { + encoder = sgroup->encoder; + } + fast_element_link (sgroup->capsfilter, encoder); sgroup->restriction_sid = g_signal_connect (sprof, "notify::restriction-caps", G_CALLBACK (_profile_restriction_caps_cb), sgroup); @@ -1464,16 +1558,6 @@ GST_ERROR_OBJECT (ebin, "Error linking splitter to encoding stream"); goto cleanup; -no_encoder: - GST_ERROR_OBJECT (ebin, "Couldn't create encoder for format %" GST_PTR_FORMAT, - format); - /* missing plugin support */ - gst_element_post_message (GST_ELEMENT_CAST (ebin), - gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin), format)); - GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL), - ("Couldn't create encoder for format %" GST_PTR_FORMAT, format)); - goto cleanup; - no_muxer_pad: GST_ERROR_OBJECT (ebin, "Couldn't find a compatible muxer pad to link encoder to"); @@ -1539,7 +1623,8 @@ gst_caps_unref (format); if (restriction) gst_caps_unref (restriction); - g_slice_free (StreamGroup, sgroup); + stream_group_free (ebin, sgroup); + g_list_free (tosync); return NULL; } @@ -1797,7 +1882,8 @@ GST_DEBUG ("Trying stream profile with presence %d", gst_encoding_profile_get_presence (sprof)); - if (gst_encoding_profile_get_presence (sprof) != 0) { + if (gst_encoding_profile_get_presence (sprof) != 0 && + gst_encoding_profile_is_enabled (sprof)) { if (G_UNLIKELY (_create_stream_group (ebin, sprof, NULL, NULL) == NULL)) goto stream_error; } @@ -1874,7 +1960,7 @@ gst_element_release_request_pad (elt, pad); } -static void inline +static void stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup) { GList *tmp; @@ -1883,7 +1969,8 @@ GST_DEBUG_OBJECT (ebin, "Freeing StreamGroup %p", sgroup); - g_signal_handler_disconnect (sgroup->profile, sgroup->restriction_sid); + if (sgroup->restriction_sid != 0) + g_signal_handler_disconnect (sgroup->profile, sgroup->restriction_sid); if (ebin->muxer) { /* outqueue - Muxer */ @@ -1926,22 +2013,38 @@ } /* Sink Ghostpad */ - if (sgroup->ghostpad) - gst_element_remove_pad (GST_ELEMENT_CAST (ebin), sgroup->ghostpad); + if (sgroup->ghostpad) { + if (GST_PAD_PARENT (sgroup->ghostpad) != NULL) + gst_element_remove_pad (GST_ELEMENT_CAST (ebin), sgroup->ghostpad); + else + gst_object_unref (sgroup->ghostpad); + } if (sgroup->inqueue) gst_element_set_state (sgroup->inqueue, GST_STATE_NULL); if (sgroup->encoder) gst_element_set_state (sgroup->encoder, GST_STATE_NULL); - if (sgroup->outfilter) + if (sgroup->fakesink) + gst_element_set_state (sgroup->fakesink, GST_STATE_NULL); + if (sgroup->outfilter) { gst_element_set_state (sgroup->outfilter, GST_STATE_NULL); + + if (sgroup->outputfilter_caps_sid) { + g_signal_handler_disconnect (sgroup->outfilter->sinkpads->data, + sgroup->outputfilter_caps_sid); + sgroup->outputfilter_caps_sid = 0; + } + } if (sgroup->smartencoder) gst_element_set_state (sgroup->smartencoder, GST_STATE_NULL); if (sgroup->capsfilter) { gst_element_set_state (sgroup->capsfilter, GST_STATE_NULL); - gst_element_unlink (sgroup->capsfilter, sgroup->encoder); + if (sgroup->encoder) + gst_element_unlink (sgroup->capsfilter, sgroup->encoder); + else + gst_element_unlink (sgroup->capsfilter, sgroup->fakesink); gst_bin_remove ((GstBin *) ebin, sgroup->capsfilter); } @@ -1990,6 +2093,9 @@ if (sgroup->encoder) gst_bin_remove ((GstBin *) ebin, sgroup->encoder); + if (sgroup->fakesink) + gst_bin_remove ((GstBin *) ebin, sgroup->fakesink); + if (sgroup->smartencoder) gst_bin_remove ((GstBin *) ebin, sgroup->smartencoder); @@ -2050,7 +2156,7 @@ /* Create elements */ res = create_elements_and_pads (ebin); - if (res == FALSE) + if (!res) gst_encode_bin_tear_down_profile (ebin); return res; @@ -2087,6 +2193,18 @@ static void gst_encode_bin_deactivate (GstEncodeBin * ebin) { + GList *tmp; + + for (tmp = ebin->streams; tmp; tmp = tmp->next) { + StreamGroup *sgroup = tmp->data; + GstCaps *format = gst_encoding_profile_get_format (sgroup->profile); + + _set_group_caps_format (sgroup, sgroup->profile, format); + + if (format) + gst_caps_unref (format); + } + ebin->active = FALSE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/encoding/gstsmartencoder.c gst-plugins-base1.0-1.6.1/gst/encoding/gstsmartencoder.c --- gst-plugins-base1.0-1.4.3/gst/encoding/gstsmartencoder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/encoding/gstsmartencoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -61,7 +61,7 @@ enum { - ARG_0 + PROP_0 /* FILL ME */ }; diff -Nru gst-plugins-base1.0-1.4.3/gst/encoding/Makefile.am gst-plugins-base1.0-1.6.1/gst/encoding/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/encoding/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/encoding/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -21,18 +21,3 @@ gststreamcombinerpad.h include $(top_srcdir)/common/gst-glib-gen.mak - -Android.mk: Makefile.am - androgenizer \ - -:PROJECT libgstencodebin -:SHARED libgstencodebin \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstencodebin_la_SOURCES) \ - $(nodist_libgstencodebin_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \ - -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \ - $(libgstencodebin_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/encoding/Makefile.in gst-plugins-base1.0-1.6.1/gst/encoding/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/encoding/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/encoding/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -24,7 +24,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -88,9 +98,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) subdir = gst/encoding ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -112,7 +119,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -129,6 +135,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -239,6 +247,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -299,6 +309,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -328,6 +340,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -355,7 +369,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -370,6 +383,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -459,13 +473,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -518,6 +531,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -568,7 +582,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/encoding/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/encoding/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -577,7 +590,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -902,6 +915,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # these are all the rules generating the relevant files $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list @@ -939,21 +954,6 @@ .deps/%-enumtypes.Plo: @touch $@ -Android.mk: Makefile.am - androgenizer \ - -:PROJECT libgstencodebin -:SHARED libgstencodebin \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstencodebin_la_SOURCES) \ - $(nodist_libgstencodebin_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \ - -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \ - $(libgstencodebin_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiobasesink.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiobasesink.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiobasesink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiobasesink.c 2015-10-22 08:01:34.000000000 +0000 @@ -191,7 +191,8 @@ GST_LOG_OBJECT (sink, "resetting cancellable"); - g_cancellable_reset (sink->cancel); + g_object_unref (sink->cancel); + sink->cancel = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiobasesrc.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiobasesrc.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiobasesrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiobasesrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -286,7 +286,8 @@ GST_LOG_OBJECT (src, "resetting cancellable"); - g_cancellable_reset (src->cancel); + g_object_unref (src->cancel); + src->cancel = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgio.c gst-plugins-base1.0-1.6.1/gst/gio/gstgio.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgio.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgio.c 2015-10-22 08:01:34.000000000 +0000 @@ -231,6 +231,11 @@ g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &uri_handler_info); } +#define GIO_GVFS_MOUNTS_DIR GIO_PREFIX \ + G_DIR_SEPARATOR_S "share" \ + G_DIR_SEPARATOR_S "gvfs" \ + G_DIR_SEPARATOR_S "mounts" + static gboolean plugin_init (GstPlugin * plugin) { @@ -240,8 +245,8 @@ gst_plugin_add_dependency_simple (plugin, NULL, GIO_MODULE_DIR, NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE); - gst_plugin_add_dependency_simple (plugin, "LD_LIBRARY_PATH", GIO_LIBDIR, - "gvfsd", GST_PLUGIN_DEPENDENCY_FLAG_NONE); + gst_plugin_add_dependency_simple (plugin, NULL, GIO_GVFS_MOUNTS_DIR, NULL, + GST_PLUGIN_DEPENDENCY_FLAG_NONE); /* FIXME: Rank is MARGINAL for now, should be at least SECONDARY+1 in the future * to replace gnomevfssink/src. For testing purposes PRIMARY+1 one makes sense diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiosink.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiosink.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiosink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiosink.c 2015-10-22 08:01:34.000000000 +0000 @@ -48,15 +48,15 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz + * gst-launch-1.0 -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz * ]| The above pipeline will simply copy a local file. Instead of giosink, * we could just as well have used the filesink element here. * |[ - * gst-launch -v filesrc location=foo.mp3 ! mad ! flacenc ! giosink location=smb://othercomputer/foo.flac - * ]| The above pipeline will re-encode an mp3 file into FLAC format and store + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audioconvert ! flacenc ! giosink location=smb://othercomputer/foo.flac + * ]| The above pipeline will re-encode an audio file into FLAC format and store * it on a remote host using the Samba protocol. * |[ - * gst-launch -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg + * gst-launch-1.0 -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg * ]| The above pipeline will encode a 440Hz sine wave to Ogg Vorbis and stores * it in the home directory of user foo. * @@ -65,7 +65,7 @@ /* FIXME: We would like to mount the enclosing volume of an URL * if it isn't mounted yet but this is possible async-only. * Unfortunately this requires a running main loop from the - * default context and we can't guarantuee this! + * default context and we can't guarantee this! * * We would also like to do authentication while mounting. */ diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiosrc.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiosrc.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiosrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiosrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -43,18 +43,18 @@ * * Example launch lines * |[ - * gst-launch -v giosrc location=file:///home/joe/foo.xyz ! fakesink + * gst-launch-1.0 -v giosrc location=file:///home/joe/foo.xyz ! fakesink * ]| The above pipeline will simply read a local file and do nothing with the * data read. Instead of giosrc, we could just as well have used the * filesrc element here. * |[ - * gst-launch -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz + * gst-launch-1.0 -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz * ]| The above pipeline will copy a file from a remote host to the local file * system using the Samba protocol. * |[ - * gst-launch -v giosrc location=http://music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioresample ! alsasink + * gst-launch-1.0 -v giosrc location=smb://othercomputer/demo.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink * ]| The above pipeline will read and decode and play an mp3 file from a - * web server using the http protocol. + * SAMBA server. * */ diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiostreamsink.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiostreamsink.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiostreamsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiostreamsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -33,8 +33,8 @@ * The following example writes the received data to a #GMemoryOutputStream. * |[ -#include <gst/gst.h> -#include <gio/gio.h> +#include +#include ... diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/gstgiostreamsrc.c gst-plugins-base1.0-1.6.1/gst/gio/gstgiostreamsrc.c --- gst-plugins-base1.0-1.4.3/gst/gio/gstgiostreamsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/gstgiostreamsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -34,8 +34,8 @@ * The following example reads data from a #GMemoryInputStream. * |[ -#include <gst/gst.h> -#include <gio/gio.h> +#include +#include ... diff -Nru gst-plugins-base1.0-1.4.3/gst/gio/Makefile.in gst-plugins-base1.0-1.6.1/gst/gio/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/gio/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/gio/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -18,7 +18,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/gio -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -105,7 +113,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -122,6 +129,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -233,6 +242,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -293,6 +303,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -322,6 +334,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -349,7 +363,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -364,6 +377,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -453,13 +467,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -512,6 +525,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -567,7 +581,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/gio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/gio/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -924,6 +937,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/Makefile.in gst-plugins-base1.0-1.6.1/gst/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -19,7 +19,17 @@ # descending into all subdirectories a second time, but only after the first # (parallel) run has finished, so it should go right through the second time. VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = gst ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -181,6 +189,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/parallel-subdirs.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -266,6 +276,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -295,6 +307,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -322,7 +336,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -337,6 +350,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -426,13 +440,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -485,6 +498,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -514,7 +528,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -523,7 +536,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/parallel-subdirs.mak: +$(top_srcdir)/common/parallel-subdirs.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -810,6 +823,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + .PHONY: independent-subdirs $(SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstdecodebin2.c gst-plugins-base1.0-1.6.1/gst/playback/gstdecodebin2.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstdecodebin2.c 2014-09-13 13:49:22.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstdecodebin2.c 2015-10-27 15:14:33.000000000 +0000 @@ -183,6 +183,7 @@ gboolean expose_allstreams; /* Whether to expose unknow type streams or not */ GList *filtered; /* elements for which error messages are filtered */ + GList *filtered_errors; /* filtered error messages */ GList *buffering_status; /* element currently buffering messages */ }; @@ -239,7 +240,6 @@ * as low as possible (try to aim for 5 buffers) */ #define AUTO_PLAY_SIZE_BYTES 2 * 1024 * 1024 #define AUTO_PLAY_SIZE_BUFFERS 5 -#define AUTO_PLAY_ADAPTIVE_SIZE_BUFFERS 2 #define AUTO_PLAY_SIZE_TIME 0 #define DEFAULT_SUBTITLE_ENCODING NULL @@ -269,8 +269,7 @@ PROP_MAX_SIZE_TIME, PROP_POST_STREAM_TOPOLOGY, PROP_EXPOSE_ALL_STREAMS, - PROP_CONNECTION_SPEED, - PROP_LAST + PROP_CONNECTION_SPEED }; static GstBinClass *parent_class; @@ -285,8 +284,10 @@ GstCaps * caps, GstDecodeBin * decode_bin); static void decodebin_set_queue_size (GstDecodeBin * dbin, - GstElement * multiqueue, gboolean preroll, gboolean seekable, - gboolean adaptive_streaming); + GstElement * multiqueue, gboolean preroll, gboolean seekable); +static void decodebin_set_queue_size_full (GstDecodeBin * dbin, + GstElement * multiqueue, gboolean use_buffering, gboolean preroll, + gboolean seekable); static gboolean gst_decode_bin_autoplug_continue (GstElement * element, GstPad * pad, GstCaps * caps); @@ -308,6 +309,8 @@ static void caps_notify_cb (GstPad * pad, GParamSpec * unused, GstDecodeChain * chain); +static void flush_chain (GstDecodeChain * chain, gboolean flushing); +static void flush_group (GstDecodeGroup * group, gboolean flushing); static GstPad *find_sink_pad (GstElement * element); static GstStateChangeReturn gst_decode_bin_change_state (GstElement * element, GstStateChange transition); @@ -315,6 +318,8 @@ static gboolean check_upstream_seekable (GstDecodeBin * dbin, GstPad * pad); +static GstCaps *get_pad_caps (GstPad * pad); + #define EXPOSE_LOCK(dbin) G_STMT_START { \ GST_LOG_OBJECT (dbin, \ "expose locking from thread %p", \ @@ -445,6 +450,7 @@ e.g. no suitable decoder could be found e.g. stream got EOS without buffers */ + gchar *deadend_details; GstCaps *endcaps; /* Caps that were used when linking to the endpad or that resulted in the deadend */ @@ -462,7 +468,8 @@ GstDecodeChain * chain); static gboolean gst_decode_chain_is_complete (GstDecodeChain * chain); static gboolean gst_decode_chain_expose (GstDecodeChain * chain, - GList ** endpads, gboolean * missing_plugin); + GList ** endpads, gboolean * missing_plugin, + GString * missing_plugin_details, gboolean * last_group); static gboolean gst_decode_chain_is_drained (GstDecodeChain * chain); static gboolean gst_decode_chain_reset_buffering (GstDecodeChain * chain); static gboolean gst_decode_group_is_complete (GstDecodeGroup * group); @@ -1419,8 +1426,8 @@ static gboolean connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GValueArray * factories, - GstDecodeChain * chain); -static gboolean connect_element (GstDecodeBin * dbin, GstDecodeElement * delem, + GstDecodeChain * chain, gchar ** deadend_details); +static GList *connect_element (GstDecodeBin * dbin, GstDecodeElement * delem, GstDecodeChain * chain); static void expose_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GstDecodeChain * chain); @@ -1488,6 +1495,7 @@ const gchar *classification; gboolean is_parser_converter = FALSE; gboolean res; + gchar *deadend_details = NULL; GST_DEBUG_OBJECT (dbin, "Pad %s:%s caps:%" GST_PTR_FORMAT, GST_DEBUG_PAD_NAME (pad), caps); @@ -1534,6 +1542,12 @@ group->no_more_pads = TRUE; } + /* From here on we own a reference to the caps as + * we might create new caps below and would need + * to unref them later */ + if (caps) + gst_caps_ref (caps); + if ((caps == NULL) || gst_caps_is_empty (caps)) goto unknown_type; @@ -1550,7 +1564,7 @@ /* 1. Emit 'autoplug-continue' the result will tell us if this pads needs * further autoplugging. Only do this for fixed caps, for unfixed caps * we will later come here again from the notify::caps handler. The - * problem with unfixed caps is that we can reliably tell if the output + * problem with unfixed caps is that, we can't reliably tell if the output * is e.g. accepted by a sink because only parts of the possible final * caps might be accepted by the sink. */ if (gst_caps_is_fixed (caps)) @@ -1575,8 +1589,17 @@ /* 1.c when the caps are not fixed yet, we can't be sure what element to * connect. We delay autoplugging until the caps are fixed */ - if (!is_parser_converter && !gst_caps_is_fixed (caps)) + if (!is_parser_converter && !gst_caps_is_fixed (caps)) { goto non_fixed; + } else if (!is_parser_converter) { + gst_caps_unref (caps); + caps = gst_pad_get_current_caps (pad); + if (!caps) { + GST_DEBUG_OBJECT (dbin, "No final caps set yet, delaying autoplugging"); + gst_object_unref (dpad); + goto setup_caps_delay; + } + } /* 1.d else get the factories and if there's no compatible factory goto * unknown_type */ @@ -1696,7 +1719,9 @@ GST_DEBUG ("Trying factory %s", gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory))); - if (gst_element_get_factory (src) == factory) { + if (gst_element_get_factory (src) == factory || + gst_element_factory_list_is_type (factory, + GST_ELEMENT_FACTORY_TYPE_PARSER)) { GST_DEBUG ("Skipping factory"); continue; } @@ -1731,15 +1756,22 @@ decode_pad_set_target (dpad, p); pad = p; - if (!gst_caps_is_fixed (caps)) { + gst_caps_unref (caps); + + caps = gst_pad_get_current_caps (pad); + if (!caps) { + GST_DEBUG_OBJECT (dbin, "No final caps set yet, delaying autoplugging"); + gst_object_unref (dpad); g_value_array_free (factories); - goto non_fixed; + goto setup_caps_delay; } } /* 1.h else continue autoplugging something from the list. */ GST_LOG_OBJECT (pad, "Let's continue discovery on this pad"); - res = connect_pad (dbin, src, dpad, pad, caps, factories, chain); + res = + connect_pad (dbin, src, dpad, pad, caps, factories, chain, + &deadend_details); /* Need to unref the capsfilter srcpad here if * we inserted a capsfilter */ @@ -1752,6 +1784,8 @@ if (!res) goto unknown_type; + gst_caps_unref (caps); + return; expose_pad: @@ -1759,6 +1793,7 @@ GST_LOG_OBJECT (dbin, "Pad is final. autoplug-continue:%d", apcontinue); expose_pad (dbin, src, dpad, pad, caps, chain); gst_object_unref (dpad); + gst_caps_unref (caps); return; } @@ -1766,13 +1801,15 @@ { GST_LOG_OBJECT (pad, "Known type, but discarded because not final caps"); chain->deadend = TRUE; - chain->endcaps = gst_caps_ref (caps); + chain->endcaps = caps; gst_object_replace ((GstObject **) & chain->current_pad, NULL); /* Try to expose anything */ EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - gst_decode_bin_expose (dbin); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + gst_decode_bin_expose (dbin); + } } EXPOSE_UNLOCK (dbin); do_async_done (dbin); @@ -1784,8 +1821,9 @@ { GST_LOG_OBJECT (pad, "Unknown type, posting message and firing signal"); + chain->deadend_details = deadend_details; chain->deadend = TRUE; - chain->endcaps = gst_caps_ref (caps); + chain->endcaps = caps; gst_object_replace ((GstObject **) & chain->current_pad, NULL); gst_element_post_message (GST_ELEMENT_CAST (dbin), @@ -1796,26 +1834,17 @@ /* Try to expose anything */ EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - gst_decode_bin_expose (dbin); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + gst_decode_bin_expose (dbin); + } } EXPOSE_UNLOCK (dbin); if (src == dbin->typefind) { - gchar *desc; - - if (caps && !gst_caps_is_empty (caps)) { - desc = gst_pb_utils_get_decoder_description (caps); - GST_ELEMENT_ERROR (dbin, STREAM, CODEC_NOT_FOUND, - (_("A %s plugin is required to play this stream, " - "but not installed."), desc), - ("No decoder to handle media type '%s'", - gst_structure_get_name (gst_caps_get_structure (caps, 0)))); - g_free (desc); - } else { + if (!caps || gst_caps_is_empty (caps)) { GST_ELEMENT_ERROR (dbin, STREAM, TYPE_NOT_FOUND, - (_("Could not determine type of stream")), - ("Stream caps %" GST_PTR_FORMAT, caps)); + (_("Could not determine type of stream")), (NULL)); } do_async_done (dbin); } @@ -1855,6 +1884,8 @@ * we have to unref the pad */ if (is_parser_converter) gst_object_unref (pad); + if (caps) + gst_caps_unref (caps); return; } @@ -1869,13 +1900,171 @@ } static void -remove_error_filter (GstDecodeBin * dbin, GstElement * element) +remove_error_filter (GstDecodeBin * dbin, GstElement * element, + GstMessage ** error) { + GList *l; + GST_OBJECT_LOCK (dbin); dbin->filtered = g_list_remove (dbin->filtered, element); + + if (error) + *error = NULL; + + l = dbin->filtered_errors; + while (l) { + GstMessage *msg = l->data; + + if (GST_MESSAGE_SRC (msg) == GST_OBJECT_CAST (element)) { + /* Get the last error of this element, i.e. the earliest */ + if (error) + gst_message_replace (error, msg); + gst_message_unref (msg); + l = dbin->filtered_errors = g_list_delete_link (dbin->filtered_errors, l); + } else { + l = l->next; + } + } GST_OBJECT_UNLOCK (dbin); } +typedef struct +{ + gboolean ret; + GstPad *peer; +} SendStickyEventsData; + +static gboolean +send_sticky_event (GstPad * pad, GstEvent ** event, gpointer user_data) +{ + SendStickyEventsData *data = user_data; + gboolean ret; + + ret = gst_pad_send_event (data->peer, gst_event_ref (*event)); + if (!ret) + data->ret = FALSE; + + return data->ret; +} + +static gboolean +send_sticky_events (GstDecodeBin * dbin, GstPad * pad) +{ + SendStickyEventsData data; + + data.ret = TRUE; + data.peer = gst_pad_get_peer (pad); + + gst_pad_sticky_events_foreach (pad, send_sticky_event, &data); + + gst_object_unref (data.peer); + + return data.ret; +} + +static gchar * +error_message_to_string (GstMessage * msg) +{ + GError *err; + gchar *debug, *message, *full_message; + + gst_message_parse_error (msg, &err, &debug); + + message = gst_error_get_message (err->domain, err->code); + + if (debug) + full_message = g_strdup_printf ("%s\n%s\n%s", message, err->message, debug); + else + full_message = g_strdup_printf ("%s\n%s", message, err->message); + + g_free (message); + g_free (debug); + g_clear_error (&err); + + return full_message; +} + +/* We consider elements as "simple demuxer" when they are a demuxer + * with one and only one ALWAYS source pad. + */ +static gboolean +is_simple_demuxer_factory (GstElementFactory * factory) +{ + if (strstr (gst_element_factory_get_metadata (factory, + GST_ELEMENT_METADATA_KLASS), "Demuxer")) { + const GList *tmp; + gint num_alway_srcpads = 0; + + for (tmp = gst_element_factory_get_static_pad_templates (factory); + tmp; tmp = tmp->next) { + GstStaticPadTemplate *template = tmp->data; + + if (template->direction == GST_PAD_SRC) { + if (template->presence == GST_PAD_ALWAYS) { + if (num_alway_srcpads >= 0) + num_alway_srcpads++; + } else { + num_alway_srcpads = -1; + } + } + + } + + if (num_alway_srcpads == 1) + return TRUE; + } + + return FALSE; +} + +static GstPadProbeReturn +demuxer_source_pad_probe (GstPad * pad, GstPadProbeInfo * info, + gpointer user_data) +{ + GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info); + GstDecodeGroup *group = (GstDecodeGroup *) user_data; + GstDecodeChain *parent_chain = group->parent; + + GST_DEBUG_OBJECT (pad, "Saw event %s", GST_EVENT_TYPE_NAME (event)); + /* Check if we are the active group, if not we need to proxy the flush + * events to the other groups (of which at least one is exposed, ensuring + * flushing properly propagates downstream of decodebin */ + if (parent_chain->active_group == group) + return GST_PAD_PROBE_OK; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_FLUSH_START: + case GST_EVENT_FLUSH_STOP: + { + GList *tmp; + GST_DEBUG_OBJECT (pad, "Proxying flush events to inactive groups"); + /* Proxy to active group */ + for (tmp = parent_chain->active_group->reqpads; tmp; tmp = tmp->next) { + GstPad *reqpad = (GstPad *) tmp->data; + gst_pad_send_event (reqpad, gst_event_ref (event)); + } + /* Proxy to other non-active groups (except ourself) */ + for (tmp = parent_chain->next_groups; tmp; tmp = tmp->next) { + GList *tmp2; + GstDecodeGroup *tmpgroup = (GstDecodeGroup *) tmp->data; + if (tmpgroup != group) { + for (tmp2 = tmpgroup->reqpads; tmp2; tmp2 = tmp2->next) { + GstPad *reqpad = (GstPad *) tmp2->data; + gst_pad_send_event (reqpad, gst_event_ref (event)); + } + } + } + flush_chain (parent_chain, + GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_START); + } + break; + default: + break; + } + + return GST_PAD_PROBE_OK; +} + /* connect_pad: * * Try to connect the given pad to an element created from one of the factories, @@ -1889,11 +2078,12 @@ static gboolean connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GValueArray * factories, - GstDecodeChain * chain) + GstDecodeChain * chain, gchar ** deadend_details) { gboolean res = FALSE; GstPad *mqpad = NULL; gboolean is_demuxer = chain->parent && !chain->elements; /* First pad after the demuxer */ + GString *error_details = NULL; g_return_val_if_fail (factories != NULL, FALSE); g_return_val_if_fail (factories->n_values > 0, FALSE); @@ -1908,6 +2098,10 @@ "is a demuxer, connecting the pad through multiqueue '%s'", GST_OBJECT_NAME (chain->parent->multiqueue)); + /* Set a flush-start/-stop probe on the downstream events */ + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_FLUSH, + demuxer_source_pad_probe, chain->parent, NULL); + decode_pad_set_target (dpad, NULL); if (!(mqpad = gst_decode_group_control_demuxer_pad (chain->parent, pad))) goto beach; @@ -1916,6 +2110,8 @@ decode_pad_set_target (dpad, pad); } + error_details = g_string_new (""); + /* 2. Try to create an element and link to it */ while (factories->n_values > 0) { GstAutoplugSelectResult ret; @@ -1925,6 +2121,8 @@ GstPad *sinkpad; GParamSpec *pspec; gboolean subtitle; + GList *to_connect = NULL; + gboolean is_parser_converter = FALSE, is_simple_demuxer = FALSE; /* Set dpad target to pad again, it might've been unset * below but we came back here because something failed @@ -1990,8 +2188,11 @@ * parser is the only one that does not change the data. A * valid example for this would be multiple id3demux in a row. */ - if (strstr (gst_element_factory_get_metadata (factory, - GST_ELEMENT_METADATA_KLASS), "Parser")) { + is_parser_converter = strstr (gst_element_factory_get_metadata (factory, + GST_ELEMENT_METADATA_KLASS), "Parser") != NULL; + is_simple_demuxer = is_simple_demuxer_factory (factory); + + if (is_parser_converter) { gboolean skip = FALSE; GList *l; @@ -2021,6 +2222,7 @@ gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory))); continue; } + } /* emit autoplug-select to see what we should do with it. */ @@ -2053,6 +2255,9 @@ if ((element = gst_element_factory_create (factory, NULL)) == NULL) { GST_WARNING_OBJECT (dbin, "Could not create an element from %s", gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory))); + g_string_append_printf (error_details, + "Could not create an element from %s\n", + gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory))); continue; } @@ -2067,7 +2272,9 @@ if (!(gst_bin_add (GST_BIN_CAST (dbin), element))) { GST_WARNING_OBJECT (dbin, "Couldn't add %s to the bin", GST_ELEMENT_NAME (element)); - remove_error_filter (dbin, element); + remove_error_filter (dbin, element, NULL); + g_string_append_printf (error_details, "Couldn't add %s to the bin\n", + GST_ELEMENT_NAME (element)); gst_object_unref (element); continue; } @@ -2076,16 +2283,21 @@ if (!(sinkpad = find_sink_pad (element))) { GST_WARNING_OBJECT (dbin, "Element %s doesn't have a sink pad", GST_ELEMENT_NAME (element)); - remove_error_filter (dbin, element); + remove_error_filter (dbin, element, NULL); + g_string_append_printf (error_details, + "Element %s doesn't have a sink pad", GST_ELEMENT_NAME (element)); gst_bin_remove (GST_BIN (dbin), element); continue; } /* ... and try to link */ - if ((gst_pad_link (pad, sinkpad)) != GST_PAD_LINK_OK) { + if ((gst_pad_link_full (pad, sinkpad, + GST_PAD_LINK_CHECK_NOTHING)) != GST_PAD_LINK_OK) { GST_WARNING_OBJECT (dbin, "Link failed on pad %s:%s", GST_DEBUG_PAD_NAME (sinkpad)); - remove_error_filter (dbin, element); + remove_error_filter (dbin, element, NULL); + g_string_append_printf (error_details, "Link failed on pad %s:%s", + GST_DEBUG_PAD_NAME (sinkpad)); gst_object_unref (sinkpad); gst_bin_remove (GST_BIN (dbin), element); continue; @@ -2094,22 +2306,49 @@ /* ... activate it ... */ if ((gst_element_set_state (element, GST_STATE_READY)) == GST_STATE_CHANGE_FAILURE) { + GstMessage *error_msg; + GST_WARNING_OBJECT (dbin, "Couldn't set %s to READY", GST_ELEMENT_NAME (element)); - remove_error_filter (dbin, element); + remove_error_filter (dbin, element, &error_msg); + + if (error_msg) { + gchar *error_string = error_message_to_string (error_msg); + g_string_append_printf (error_details, "Couldn't set %s to READY:\n%s", + GST_ELEMENT_NAME (element), error_string); + gst_message_unref (error_msg); + g_free (error_string); + } else { + g_string_append_printf (error_details, "Couldn't set %s to READY", + GST_ELEMENT_NAME (element)); + } gst_object_unref (sinkpad); gst_bin_remove (GST_BIN (dbin), element); continue; } - /* Stop filtering errors. */ - remove_error_filter (dbin, element); - /* check if we still accept the caps on the pad after setting * the element to READY */ if (!gst_pad_query_accept_caps (sinkpad, caps)) { + GstMessage *error_msg; + GST_WARNING_OBJECT (dbin, "Element %s does not accept caps", GST_ELEMENT_NAME (element)); + + remove_error_filter (dbin, element, &error_msg); + + if (error_msg) { + gchar *error_string = error_message_to_string (error_msg); + g_string_append_printf (error_details, + "Element %s does not accept caps:\n%s", GST_ELEMENT_NAME (element), + error_string); + gst_message_unref (error_msg); + g_free (error_string); + } else { + g_string_append_printf (error_details, + "Element %s does not accept caps", GST_ELEMENT_NAME (element)); + } + gst_element_set_state (element, GST_STATE_NULL); gst_object_unref (sinkpad); gst_bin_remove (GST_BIN (dbin), element); @@ -2128,7 +2367,7 @@ chain->adaptive_demuxer = is_adaptive_demuxer_element (element); /* For adaptive streaming demuxer we insert a multiqueue after - * this demuxer. This multiqueue will get one fragment per buffer. + * this demuxer. * Now for the case where we have a container stream inside these * buffers, another demuxer will be plugged and after this second * demuxer there will be a second multiqueue. This second multiqueue @@ -2149,7 +2388,7 @@ CHAIN_MUTEX_UNLOCK (chain); /* Set connection-speed property if needed */ - if (chain->demuxer == TRUE) { + if (chain->demuxer) { GParamSpec *pspec; if ((pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element), @@ -2181,7 +2420,7 @@ wrong_type = TRUE; } - if (wrong_type == FALSE) { + if (!wrong_type) { GST_DEBUG_OBJECT (dbin, "setting connection-speed=%" G_GUINT64_FORMAT " to demuxer element", speed); @@ -2190,9 +2429,6 @@ } } - /* link this element further */ - connect_element (dbin, delem, chain); - /* try to configure the subtitle encoding property when we can */ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element), "subtitle-encoding"); @@ -2208,15 +2444,62 @@ subtitle = FALSE; } + /* link this element further */ + to_connect = connect_element (dbin, delem, chain); + + if ((is_simple_demuxer || is_parser_converter) && to_connect) { + GList *l; + for (l = to_connect; l; l = g_list_next (l)) { + GstPad *opad = GST_PAD_CAST (l->data); + GstCaps *ocaps; + + ocaps = get_pad_caps (opad); + analyze_new_pad (dbin, delem->element, opad, ocaps, chain); + if (ocaps) + gst_caps_unref (ocaps); + + gst_object_unref (opad); + } + g_list_free (to_connect); + to_connect = NULL; + } + /* Bring the element to the state of the parent */ + + /* First lock element's sinkpad stream lock so no data reaches + * the possible new element added when caps are sent by element + * while we're still sending sticky events */ + GST_PAD_STREAM_LOCK (sinkpad); + if ((gst_element_set_state (element, - GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE) { + GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE || + !send_sticky_events (dbin, pad)) { GstDecodeElement *dtmp = NULL; GstElement *tmp = NULL; + GstMessage *error_msg; + + GST_PAD_STREAM_UNLOCK (sinkpad); GST_WARNING_OBJECT (dbin, "Couldn't set %s to PAUSED", GST_ELEMENT_NAME (element)); + g_list_foreach (to_connect, (GFunc) gst_object_unref, NULL); + g_list_free (to_connect); + to_connect = NULL; + + remove_error_filter (dbin, element, &error_msg); + + if (error_msg) { + gchar *error_string = error_message_to_string (error_msg); + g_string_append_printf (error_details, "Couldn't set %s to PAUSED:\n%s", + GST_ELEMENT_NAME (element), error_string); + gst_message_unref (error_msg); + g_free (error_string); + } else { + g_string_append_printf (error_details, "Couldn't set %s to PAUSED", + GST_ELEMENT_NAME (element)); + } + /* Remove all elements in this chain that were just added. No * other thread could've added elements in the meantime */ CHAIN_MUTEX_LOCK (chain); @@ -2270,8 +2553,15 @@ CHAIN_MUTEX_UNLOCK (chain); continue; + } else { + /* Everything went well, the spice must flow now */ + GST_PAD_STREAM_UNLOCK (sinkpad); } + /* Remove error filter now, from now on we can't gracefully + * handle errors of the element anymore */ + remove_error_filter (dbin, element, NULL); + /* Now let the bin handle the state */ gst_element_set_locked_state (element, FALSE); @@ -2283,6 +2573,23 @@ SUBTITLE_UNLOCK (dbin); } + if (to_connect) { + GList *l; + for (l = to_connect; l; l = g_list_next (l)) { + GstPad *opad = GST_PAD_CAST (l->data); + GstCaps *ocaps; + + ocaps = get_pad_caps (opad); + analyze_new_pad (dbin, delem->element, opad, ocaps, chain); + if (ocaps) + gst_caps_unref (ocaps); + + gst_object_unref (opad); + } + g_list_free (to_connect); + to_connect = NULL; + } + res = TRUE; break; } @@ -2291,6 +2598,12 @@ if (mqpad) gst_object_unref (mqpad); + if (error_details) + *deadend_details = g_string_free (error_details, (error_details->len == 0 + || res)); + else + *deadend_details = NULL; + return res; } @@ -2312,13 +2625,14 @@ return caps; } -static gboolean +/* Returns a list of pads that can be connected to already and + * connects to pad-added and related signals */ +static GList * connect_element (GstDecodeBin * dbin, GstDecodeElement * delem, GstDecodeChain * chain) { GstElement *element = delem->element; GList *pads; - gboolean res = TRUE; gboolean dynamic = FALSE; GList *to_connect = NULL; @@ -2396,21 +2710,9 @@ G_CALLBACK (no_more_pads_cb), chain); } - /* 3. for every available pad, connect it */ - for (pads = to_connect; pads; pads = g_list_next (pads)) { - GstPad *pad = GST_PAD_CAST (pads->data); - GstCaps *caps; - - caps = get_pad_caps (pad); - analyze_new_pad (dbin, element, pad, caps, chain); - if (caps) - gst_caps_unref (caps); - - gst_object_unref (pad); - } - g_list_free (to_connect); + /* 3. return all pads that can be connected to already */ - return res; + return to_connect; } /* expose_pad: @@ -2447,8 +2749,10 @@ chain->endcaps = gst_caps_ref (caps); EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - gst_decode_bin_expose (dbin); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + gst_decode_bin_expose (dbin); + } } EXPOSE_UNLOCK (dbin); @@ -2555,14 +2859,17 @@ g_assert (dbin); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: - GST_DEBUG_OBJECT (dbin, "Received EOS on a non final pad, this stream " + GST_DEBUG_OBJECT (pad, "Received EOS on a non final pad, this stream " "ended too early"); chain->deadend = TRUE; + chain->drained = TRUE; gst_object_replace ((GstObject **) & chain->current_pad, NULL); /* we don't set the endcaps because NULL endcaps means early EOS */ + EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) - gst_decode_bin_expose (dbin); + if (dbin->decode_chain) + if (gst_decode_chain_is_complete (dbin->decode_chain)) + gst_decode_bin_expose (dbin); EXPOSE_UNLOCK (dbin); break; default: @@ -2587,15 +2894,97 @@ gst_caps_unref (caps); EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - GST_LOG_OBJECT (dbin, - "That was the last dynamic object, now attempting to expose the group"); - if (!gst_decode_bin_expose (dbin)) - GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + GST_LOG_OBJECT (dbin, + "That was the last dynamic object, now attempting to expose the group"); + if (!gst_decode_bin_expose (dbin)) + GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + } + } else { + GST_DEBUG_OBJECT (dbin, "No decode chain, new pad ignored"); } EXPOSE_UNLOCK (dbin); } +static GstPadProbeReturn +sink_pad_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) +{ + GstDecodeGroup *group = (GstDecodeGroup *) user_data; + GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info); + GstPad *peer = gst_pad_get_peer (pad); + GstPadProbeReturn proberet = GST_PAD_PROBE_OK; + + GST_DEBUG_OBJECT (pad, "Got upstream event %s", GST_EVENT_TYPE_NAME (event)); + + if (peer == NULL) { + GST_DEBUG_OBJECT (pad, "We are unlinked !"); + if (group->parent && group->parent->next_groups) { + GstDecodeGroup *last_group = + g_list_last (group->parent->next_groups)->data; + GST_DEBUG_OBJECT (pad, "We could send the event to another group (%p)", + last_group); + /* Grab another sinkpad for that last group through which we will forward this event */ + if (last_group->reqpads) { + GstPad *sinkpad = (GstPad *) last_group->reqpads->data; + GstPad *otherpeer = gst_pad_get_peer (sinkpad); + if (otherpeer) { + GST_DEBUG_OBJECT (otherpeer, "Attempting to forward event"); + if (gst_pad_send_event (otherpeer, gst_event_ref (event))) { + gst_event_unref (event); + proberet = GST_PAD_PROBE_HANDLED; + } + gst_object_unref (otherpeer); + } + } else { + GST_DEBUG_OBJECT (pad, "No request pads, can't forward event"); + } + } + } else { + gst_object_unref (peer); + } + + return proberet; +} + +static GstPadProbeReturn +sink_pad_query_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) +{ + GstDecodeGroup *group = (GstDecodeGroup *) user_data; + GstPad *peer = gst_pad_get_peer (pad); + GstQuery *query = GST_PAD_PROBE_INFO_QUERY (info); + GstPadProbeReturn proberet = GST_PAD_PROBE_OK; + + GST_DEBUG_OBJECT (pad, "Got upstream query %s", GST_QUERY_TYPE_NAME (query)); + + if (peer == NULL) { + GST_DEBUG_OBJECT (pad, "We are unlinked !"); + if (group->parent && group->parent->next_groups) { + GstDecodeGroup *last_group = + g_list_last (group->parent->next_groups)->data; + GST_DEBUG_OBJECT (pad, "We could send the query to another group"); + /* Grab another sinkpad for that last group through which we will forward this event */ + if (last_group->reqpads) { + GstPad *sinkpad = (GstPad *) last_group->reqpads->data; + GstPad *otherpeer = gst_pad_get_peer (sinkpad); + if (otherpeer) { + GST_DEBUG_OBJECT (otherpeer, "Attempting to forward query"); + if (gst_pad_query (otherpeer, query)) { + proberet = GST_PAD_PROBE_HANDLED; + } else + GST_DEBUG ("FAILURE"); + gst_object_unref (otherpeer); + } else + GST_DEBUG_OBJECT (sinkpad, "request pad not connected ??"); + } else + GST_DEBUG_OBJECT (pad, "No request pads ???"); + } + } else + gst_object_unref (peer); + + return proberet; +} + static void pad_removed_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain) { @@ -2660,11 +3049,19 @@ GST_DEBUG_OBJECT (element, "Setting group %p to complete", group); group->no_more_pads = TRUE; + /* this group has prerolled enough to not need more pads, + * we can probably set its buffering state to playing now */ + GST_DEBUG_OBJECT (group->dbin, "Setting group %p multiqueue to " + "'playing' buffering mode", group); + decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE, + (group->parent ? group->parent->seekable : TRUE)); CHAIN_MUTEX_UNLOCK (chain); EXPOSE_LOCK (chain->dbin); - if (gst_decode_chain_is_complete (chain->dbin->decode_chain)) { - gst_decode_bin_expose (chain->dbin); + if (chain->dbin->decode_chain) { + if (gst_decode_chain_is_complete (chain->dbin->decode_chain)) { + gst_decode_bin_expose (chain->dbin); + } } EXPOSE_UNLOCK (chain->dbin); } @@ -2800,9 +3197,11 @@ return; GST_DEBUG_OBJECT (dbin, "Reseting multiqueues buffering"); - CHAIN_MUTEX_LOCK (dbin->decode_chain); - gst_decode_chain_reset_buffering (dbin->decode_chain); - CHAIN_MUTEX_UNLOCK (dbin->decode_chain); + if (dbin->decode_chain) { + CHAIN_MUTEX_LOCK (dbin->decode_chain); + gst_decode_chain_reset_buffering (dbin->decode_chain); + CHAIN_MUTEX_UNLOCK (dbin->decode_chain); + } } /**** @@ -2885,7 +3284,7 @@ static void gst_decode_chain_free_internal (GstDecodeChain * chain, gboolean hide) { - GList *l; + GList *l, *set_to_null = NULL; CHAIN_MUTEX_LOCK (chain); @@ -2945,14 +3344,15 @@ GST_OBJECT_CAST (chain->dbin)) gst_bin_remove (GST_BIN_CAST (chain->dbin), delem->capsfilter); if (!hide) { - gst_element_set_state (delem->capsfilter, GST_STATE_NULL); + set_to_null = + g_list_append (set_to_null, gst_object_ref (delem->capsfilter)); } } if (GST_OBJECT_PARENT (element) == GST_OBJECT_CAST (chain->dbin)) gst_bin_remove (GST_BIN_CAST (chain->dbin), element); if (!hide) { - gst_element_set_state (element, GST_STATE_NULL); + set_to_null = g_list_append (set_to_null, gst_object_ref (element)); } SUBTITLE_LOCK (chain->dbin); @@ -2979,8 +3379,10 @@ if (chain->endpad) { if (chain->endpad->exposed) { - gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin), - GST_PAD_CAST (chain->endpad)); + GstPad *endpad = GST_PAD_CAST (chain->endpad); + gst_pad_push_event (endpad, gst_event_new_flush_start ()); + gst_pad_push_event (endpad, gst_event_new_flush_stop (FALSE)); + gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin), endpad); } decode_pad_set_target (chain->endpad, NULL); @@ -3005,10 +3407,20 @@ gst_caps_unref (chain->endcaps); chain->endcaps = NULL; } + g_free (chain->deadend_details); + chain->deadend_details = NULL; GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hidden" : "Freed"), chain); CHAIN_MUTEX_UNLOCK (chain); + + while (set_to_null) { + GstElement *element = set_to_null->data; + set_to_null = g_list_delete_link (set_to_null, set_to_null); + gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (element); + } + if (!hide) { g_mutex_clear (&chain->lock); g_slice_free (GstDecodeChain, chain); @@ -3073,6 +3485,12 @@ queue); group->overrun = TRUE; + /* this group has prerolled enough to not need more pads, + * we can probably set its buffering state to playing now */ + GST_DEBUG_OBJECT (group->dbin, "Setting group %p multiqueue to " + "'playing' buffering mode", group); + decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE, + (group->parent ? group->parent->seekable : TRUE)); /* FIXME: We should make sure that everything gets exposed now * even if child chains are not complete because the will never @@ -3081,11 +3499,13 @@ */ EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - if (!gst_decode_bin_expose (dbin)) - GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + if (!gst_decode_bin_expose (dbin)) + GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + } } - EXPOSE_UNLOCK (group->dbin); + EXPOSE_UNLOCK (dbin); } static void @@ -3134,7 +3554,7 @@ } } - GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hided" : "Freed"), + GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hid" : "Freed"), group); if (!hide) g_slice_free (GstDecodeGroup, group); @@ -3174,19 +3594,79 @@ gst_decode_group_free_internal (group, TRUE); } -/* configure queue sizes, this depends on the buffering method and if we are - * playing or prerolling. */ +/* gst_decode_chain_free_hidden_groups: + * + * Frees any decode groups that were hidden previously. + * This allows keeping memory use from ballooning when + * switching chains repeatedly. + * + * A new throwaway thread will be created to free the + * groups, so any delay does not block the setup of a + * new group. + * + * Not MT-safe, call with parent's chain lock! + */ +static void +gst_decode_chain_free_hidden_groups (GList * old_groups) +{ + GList *l; + + for (l = old_groups; l; l = l->next) { + GstDecodeGroup *group = l->data; + + gst_decode_group_free (group); + } + g_list_free (old_groups); +} + +static void +gst_decode_chain_start_free_hidden_groups_thread (GstDecodeChain * chain) +{ + GThread *thread; + GError *error = NULL; + GList *old_groups; + + old_groups = chain->old_groups; + if (!old_groups) + return; + + chain->old_groups = NULL; + thread = g_thread_try_new ("free-hidden-groups", + (GThreadFunc) gst_decode_chain_free_hidden_groups, old_groups, &error); + if (!thread || error) { + GST_ERROR ("Failed to start free-hidden-groups thread: %s", + error ? error->message : "unknown reason"); + g_clear_error (&error); + chain->old_groups = old_groups; + return; + } + GST_DEBUG_OBJECT (chain->dbin, "Started free-hidden-groups thread"); + /* We do not need to wait for it or get any results from it */ + g_thread_unref (thread); +} + static void decodebin_set_queue_size (GstDecodeBin * dbin, GstElement * multiqueue, - gboolean preroll, gboolean seekable, gboolean adaptive_streaming) + gboolean preroll, gboolean seekable) { - guint max_bytes, max_buffers; - guint64 max_time; gboolean use_buffering; /* get the current config from the multiqueue */ g_object_get (multiqueue, "use-buffering", &use_buffering, NULL); + decodebin_set_queue_size_full (dbin, multiqueue, use_buffering, preroll, + seekable); +} + +/* configure queue sizes, this depends on the buffering method and if we are + * playing or prerolling. */ +static void +decodebin_set_queue_size_full (GstDecodeBin * dbin, GstElement * multiqueue, + gboolean use_buffering, gboolean preroll, gboolean seekable) +{ + guint max_bytes, max_buffers; + guint64 max_time; + GST_DEBUG_OBJECT (multiqueue, "use buffering %d", use_buffering); if (preroll || use_buffering) { @@ -3203,14 +3683,6 @@ max_time = seekable ? AUTO_PREROLL_SEEKABLE_SIZE_TIME : AUTO_PREROLL_NOT_SEEKABLE_SIZE_TIME; } - } else if (adaptive_streaming && dbin->use_buffering) { - /* If we're doing adaptive streaming and this is *not* - * the multiqueue doing the buffering messages, we only - * want a buffers limit here - */ - max_buffers = AUTO_PLAY_ADAPTIVE_SIZE_BUFFERS; - max_time = 0; - max_bytes = 0; } else { /* update runtime limits. At runtime, we try to keep the amount of buffers * in the queues as low as possible (but at least 5 buffers). */ @@ -3218,9 +3690,6 @@ max_bytes = 0; else if ((max_bytes = dbin->max_size_bytes) == 0) max_bytes = AUTO_PLAY_SIZE_BYTES; - /* if we're after an adaptive streaming demuxer keep - * a lower number of buffers as they are usually very - * large */ if ((max_buffers = dbin->max_size_buffers) == 0) max_buffers = AUTO_PLAY_SIZE_BUFFERS; /* this is a multiqueue with disabled buffering, don't limit max_time */ @@ -3231,7 +3700,7 @@ } GST_DEBUG_OBJECT (multiqueue, "setting limits %u bytes, %u buffers, " - "%" G_GUINT64_FORMAT, max_bytes, max_buffers, max_time); + "%" G_GUINT64_FORMAT " time", max_bytes, max_buffers, max_time); g_object_set (multiqueue, "max-size-bytes", max_bytes, "max-size-time", max_time, "max-size-buffers", max_buffers, NULL); @@ -3272,8 +3741,7 @@ gst_object_unref (pad); } } - decodebin_set_queue_size (dbin, mq, TRUE, seekable, - (parent ? parent->adaptive_demuxer : FALSE)); + decodebin_set_queue_size_full (dbin, mq, FALSE, TRUE, seekable); group->overrunsig = g_signal_connect (mq, "overrun", G_CALLBACK (multi_queue_overrun_cb), group); @@ -3324,7 +3792,8 @@ return NULL; } - if ((gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) { + if ((gst_pad_link_full (pad, sinkpad, + GST_PAD_LINK_CHECK_NOTHING) != GST_PAD_LINK_OK)) { GST_ERROR_OBJECT (dbin, "Couldn't link demuxer and multiqueue"); goto error; } @@ -3338,6 +3807,11 @@ sinkpad); goto error; } + gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, + sink_pad_event_probe, group, NULL); + gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_QUERY_UPSTREAM, + sink_pad_query_probe, group, NULL); + CHAIN_MUTEX_LOCK (group->parent); group->reqpads = g_list_prepend (group->reqpads, gst_object_ref (sinkpad)); CHAIN_MUTEX_UNLOCK (group->parent); @@ -3429,6 +3903,68 @@ return complete; } +/* Flushing group/chains */ +static void +flush_group (GstDecodeGroup * group, gboolean flushing) +{ + GList *tmp; + + GST_DEBUG ("group %p flushing:%d", group, flushing); + + if (group->drained == flushing) + return; + for (tmp = group->children; tmp; tmp = tmp->next) { + GstDecodeChain *chain = (GstDecodeChain *) tmp->data; + flush_chain (chain, flushing); + } + GST_DEBUG ("Setting group %p to drained:%d", group, flushing); + group->drained = flushing; +} + +static void +flush_chain (GstDecodeChain * chain, gboolean flushing) +{ + GList *tmp; + GstDecodeBin *dbin = chain->dbin; + + GST_DEBUG_OBJECT (dbin, "chain %p (pad %s:%s) flushing:%d", chain, + GST_DEBUG_PAD_NAME (chain->pad), flushing); + if (chain->drained == flushing) + return; + /* if unflushing, check if we should switch to last group */ + if (flushing == FALSE && chain->next_groups) { + GstDecodeGroup *target_group = + (GstDecodeGroup *) g_list_last (chain->next_groups)->data; + gst_decode_chain_start_free_hidden_groups_thread (chain); + /* Hide active group (we're sure it's not that one we'll be using) */ + GST_DEBUG_OBJECT (dbin, "Switching from active group %p to group %p", + chain->active_group, target_group); + gst_decode_group_hide (chain->active_group); + chain->old_groups = g_list_prepend (chain->old_groups, chain->active_group); + chain->active_group = target_group; + /* Hide all groups but the target_group */ + for (tmp = chain->next_groups; tmp; tmp = tmp->next) { + GstDecodeGroup *group = (GstDecodeGroup *) tmp->data; + if (group != target_group) { + gst_decode_group_hide (group); + chain->old_groups = g_list_prepend (chain->old_groups, group); + } + } + /* Clear next groups */ + g_list_free (chain->next_groups); + chain->next_groups = NULL; + } + /* Mark all groups as flushing */ + if (chain->active_group) + flush_group (chain->active_group, flushing); + for (tmp = chain->next_groups; tmp; tmp = tmp->next) { + GstDecodeGroup *group = (GstDecodeGroup *) tmp->data; + flush_group (group, flushing); + } + GST_DEBUG ("Setting chain %p to drained:%d", chain, flushing); + chain->drained = flushing; +} + static gboolean drain_and_switch_chains (GstDecodeChain * chain, GstDecodePad * drainpad, gboolean * last_group, gboolean * drained, gboolean * switched); @@ -3491,8 +4027,8 @@ gboolean handled = FALSE; GstDecodeBin *dbin = chain->dbin; - GST_DEBUG ("Checking chain %p (target pad %s:%s)", - chain, GST_DEBUG_PAD_NAME (drainpad)); + GST_DEBUG ("Checking chain %p %s:%s (target pad %s:%s)", + chain, GST_DEBUG_PAD_NAME (chain->pad), GST_DEBUG_PAD_NAME (drainpad)); CHAIN_MUTEX_LOCK (chain); @@ -3503,7 +4039,7 @@ if (chain->endpad) { /* Check if we're reached the target endchain */ - if (chain == drainpad->chain) { + if (drainpad != NULL && chain == drainpad->chain) { GST_DEBUG ("Found the target chain"); drainpad->drained = TRUE; handled = TRUE; @@ -3524,7 +4060,7 @@ last_group, &subdrained, switched); /* The group is drained, see if we can switch to another */ - if (handled && subdrained && !*switched) { + if ((handled || drainpad == NULL) && subdrained && !*switched) { if (chain->next_groups) { /* Switch to next group */ GST_DEBUG_OBJECT (dbin, "Hiding current group %p", chain->active_group); @@ -3536,6 +4072,7 @@ chain->active_group = chain->next_groups->data; chain->next_groups = g_list_delete_link (chain->next_groups, chain->next_groups); + gst_decode_chain_start_free_hidden_groups_thread (chain); *switched = TRUE; chain->drained = FALSE; } else { @@ -3576,16 +4113,18 @@ GstDecodeBin *dbin = chain->dbin; GST_LOG_OBJECT (dbin, "pad %p", pad); - drain_and_switch_chains (dbin->decode_chain, pad, &last_group, &drained, - &switched); + EXPOSE_LOCK (dbin); + if (dbin->decode_chain) { + drain_and_switch_chains (dbin->decode_chain, pad, &last_group, &drained, + &switched); - if (switched) { - /* If we resulted in a group switch, expose what's needed */ - EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) - gst_decode_bin_expose (dbin); - EXPOSE_UNLOCK (dbin); + if (switched) { + /* If we resulted in a group switch, expose what's needed */ + if (gst_decode_chain_is_complete (dbin->decode_chain)) + gst_decode_bin_expose (dbin); + } } + EXPOSE_UNLOCK (dbin); return last_group; } @@ -3679,6 +4218,9 @@ CHAIN_MUTEX_UNLOCK (chain); } + decodebin_set_queue_size_full (group->dbin, group->multiqueue, !ret, + FALSE, (group->parent ? group->parent->seekable : TRUE)); + if (ret) { /* all chains are buffering already, no need to do it here */ g_object_set (group->multiqueue, "use-buffering", FALSE, NULL); @@ -3687,9 +4229,6 @@ "low-percent", group->dbin->low_percent, "high-percent", group->dbin->high_percent, NULL); } - decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE, - (group->parent ? group->parent->seekable : TRUE), - (group->parent ? group->parent->adaptive_demuxer : FALSE)); GST_DEBUG_OBJECT (group->dbin, "Setting %s buffering to %d", GST_ELEMENT_NAME (group->multiqueue), !ret); @@ -3937,7 +4476,8 @@ static gboolean debug_sticky_event (GstPad * pad, GstEvent ** event, gpointer user_data) { - GST_DEBUG_OBJECT (pad, "sticky event %s", GST_EVENT_TYPE_NAME (*event)); + GST_DEBUG_OBJECT (pad, "sticky event %s (%p)", GST_EVENT_TYPE_NAME (*event), + *event); return TRUE; } @@ -3947,15 +4487,25 @@ static gboolean gst_decode_bin_expose (GstDecodeBin * dbin) { - GList *tmp, *endpads = NULL; - gboolean missing_plugin = FALSE; - gboolean already_exposed = TRUE; + GList *tmp, *endpads; + gboolean missing_plugin; + GString *missing_plugin_details; + gboolean already_exposed; + gboolean last_group; + +retry: + endpads = NULL; + missing_plugin = FALSE; + already_exposed = TRUE; + last_group = TRUE; + + missing_plugin_details = g_string_new (""); GST_DEBUG_OBJECT (dbin, "Exposing currently active chains/groups"); /* Don't expose if we're currently shutting down */ DYN_LOCK (dbin); - if (G_UNLIKELY (dbin->shutdown == TRUE)) { + if (G_UNLIKELY (dbin->shutdown)) { GST_WARNING_OBJECT (dbin, "Currently, shutting down, aborting exposing"); DYN_UNLOCK (dbin); return FALSE; @@ -3963,30 +4513,60 @@ DYN_UNLOCK (dbin); /* Get the pads that we're going to expose and mark things as exposed */ - if (!gst_decode_chain_expose (dbin->decode_chain, &endpads, &missing_plugin)) { + if (!gst_decode_chain_expose (dbin->decode_chain, &endpads, &missing_plugin, + missing_plugin_details, &last_group)) { g_list_foreach (endpads, (GFunc) gst_object_unref, NULL); g_list_free (endpads); + g_string_free (missing_plugin_details, TRUE); GST_ERROR_OBJECT (dbin, "Broken chain/group tree"); g_return_val_if_reached (FALSE); return FALSE; } if (endpads == NULL) { if (missing_plugin) { - GST_WARNING_OBJECT (dbin, "No suitable plugins found"); - GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL), - ("no suitable plugins found")); + if (missing_plugin_details->len > 0) { + gchar *details = g_string_free (missing_plugin_details, FALSE); + GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL), + ("no suitable plugins found:\n%s", details)); + g_free (details); + } else { + g_string_free (missing_plugin_details, TRUE); + GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL), + ("no suitable plugins found")); + } } else { /* in this case, the stream ended without buffers, * just post a warning */ - GST_WARNING_OBJECT (dbin, "All streams finished without buffers"); - GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL), - ("all streams without buffers")); + g_string_free (missing_plugin_details, TRUE); + + GST_WARNING_OBJECT (dbin, "All streams finished without buffers. " + "Last group: %d", last_group); + if (last_group) { + GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL), + ("all streams without buffers")); + } else { + gboolean switched = FALSE; + gboolean drained = FALSE; + + drain_and_switch_chains (dbin->decode_chain, NULL, &last_group, + &drained, &switched); + GST_ELEMENT_WARNING (dbin, STREAM, FAILED, (NULL), + ("all streams without buffers")); + if (switched) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) + goto retry; + else + return FALSE; + } + } } do_async_done (dbin); return FALSE; } + g_string_free (missing_plugin_details, TRUE); + /* Check if this was called when everything was exposed already */ for (tmp = endpads; tmp && already_exposed; tmp = tmp->next) { GstDecodePad *dpad = tmp->data; @@ -4087,15 +4667,28 @@ */ static gboolean gst_decode_chain_expose (GstDecodeChain * chain, GList ** endpads, - gboolean * missing_plugin) + gboolean * missing_plugin, GString * missing_plugin_details, + gboolean * last_group) { GstDecodeGroup *group; GList *l; GstDecodeBin *dbin; if (chain->deadend) { - if (chain->endcaps) + if (chain->endcaps) { + if (chain->deadend_details) { + g_string_append (missing_plugin_details, chain->deadend_details); + g_string_append_c (missing_plugin_details, '\n'); + } else { + gchar *desc = gst_pb_utils_get_codec_description (chain->endcaps); + gchar *caps_str = gst_caps_to_string (chain->endcaps); + g_string_append_printf (missing_plugin_details, + "Missing decoder: %s (%s)\n", desc, caps_str); + g_free (caps_str); + g_free (desc); + } *missing_plugin = TRUE; + } return TRUE; } @@ -4106,6 +4699,9 @@ return TRUE; } + if (chain->next_groups) + *last_group = FALSE; + group = chain->active_group; if (!group) return FALSE; @@ -4125,7 +4721,8 @@ for (l = group->children; l; l = l->next) { GstDecodeChain *childchain = l->data; - if (!gst_decode_chain_expose (childchain, endpads, missing_plugin)) + if (!gst_decode_chain_expose (childchain, endpads, missing_plugin, + missing_plugin_details, last_group)) return FALSE; } @@ -4214,9 +4811,11 @@ dpad->blocked = TRUE; EXPOSE_LOCK (dbin); - if (gst_decode_chain_is_complete (dbin->decode_chain)) { - if (!gst_decode_bin_expose (dbin)) - GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + if (dbin->decode_chain) { + if (gst_decode_chain_is_complete (dbin->decode_chain)) { + if (!gst_decode_bin_expose (dbin)) + GST_WARNING_OBJECT (dbin, "Couldn't expose group"); + } } EXPOSE_UNLOCK (dbin); @@ -4334,6 +4933,39 @@ } static gboolean +gst_decode_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstDecodeBin *dbin = GST_DECODE_BIN (parent); + + if (GST_EVENT_TYPE (event) == GST_EVENT_SEEK && dbin && dbin->decode_chain) { + GstElement *demuxer = NULL; + + /* For adaptive demuxers we send the seek event directly to the demuxer. + * See https://bugzilla.gnome.org/show_bug.cgi?id=606382 + */ + CHAIN_MUTEX_LOCK (dbin->decode_chain); + if (dbin->decode_chain->adaptive_demuxer) { + GstDecodeElement *delem = dbin->decode_chain->elements->data; + demuxer = gst_object_ref (delem->element); + } + CHAIN_MUTEX_UNLOCK (dbin->decode_chain); + + if (demuxer) { + gboolean ret; + + GST_DEBUG_OBJECT (dbin, + "Sending SEEK event directly to adaptive streaming demuxer %s", + GST_OBJECT_NAME (demuxer)); + ret = gst_element_send_event (demuxer, event); + gst_object_unref (demuxer); + return ret; + } + } + + return gst_pad_event_default (pad, parent, event); +} + +static gboolean gst_decode_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) { GstDecodePad *dpad = GST_DECODE_PAD (parent); @@ -4390,6 +5022,7 @@ ppad = gst_proxy_pad_get_internal (GST_PROXY_PAD (dpad)); gst_pad_set_query_function (GST_PAD_CAST (ppad), gst_decode_pad_query); + gst_pad_set_event_function (GST_PAD_CAST (dpad), gst_decode_pad_event); gst_object_unref (ppad); return dpad; @@ -4505,6 +5138,7 @@ { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstDecodeBin *dbin = GST_DECODE_BIN (element); + GstDecodeChain *chain_to_free = NULL; switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: @@ -4563,10 +5197,13 @@ do_async_done (dbin); EXPOSE_LOCK (dbin); if (dbin->decode_chain) { - gst_decode_chain_free (dbin->decode_chain); + chain_to_free = dbin->decode_chain; + gst_decode_chain_free_internal (dbin->decode_chain, TRUE); dbin->decode_chain = NULL; } EXPOSE_UNLOCK (dbin); + if (chain_to_free) + gst_decode_chain_free (chain_to_free); g_list_free_full (dbin->buffering_status, (GDestroyNotify) gst_message_unref); dbin->buffering_status = NULL; @@ -4590,6 +5227,7 @@ { GST_DEBUG_OBJECT (element, "element failed to change states -- activation problem?"); + do_async_done (dbin); return GST_STATE_CHANGE_FAILURE; } } @@ -4603,6 +5241,9 @@ if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) { GST_OBJECT_LOCK (dbin); drop = (g_list_find (dbin->filtered, GST_MESSAGE_SRC (msg)) != NULL); + if (drop) + dbin->filtered_errors = + g_list_prepend (dbin->filtered_errors, gst_message_ref (msg)); GST_OBJECT_UNLOCK (dbin); } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_BUFFERING) { gint perc, msg_perc; diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplaybackutils.c gst-plugins-base1.0-1.6.1/gst/playback/gstplaybackutils.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstplaybackutils.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplaybackutils.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,133 @@ +/* Copyright (C) <2014> Intel Corporation + * Copyright (C) <2014> Sreerenj Balachandran + * + * Author: Sreerenj Balachandran + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "gstplaybackutils.h" + +static GstStaticCaps raw_audio_caps = GST_STATIC_CAPS ("audio/x-raw(ANY)"); +static GstStaticCaps raw_video_caps = GST_STATIC_CAPS ("video/x-raw(ANY)"); + +/* unref the caps after usage */ +static GstCaps * +get_template_caps (GstElementFactory * factory, GstPadDirection direction) +{ + const GList *templates; + GstStaticPadTemplate *templ = NULL; + GList *walk; + + templates = gst_element_factory_get_static_pad_templates (factory); + for (walk = (GList *) templates; walk; walk = g_list_next (walk)) { + templ = walk->data; + if (templ->direction == direction) + break; + } + if (templ) + return gst_static_caps_get (&templ->static_caps); + else + return NULL; +} + +static gboolean +is_included (GList * list, GstCapsFeatures * cf) +{ + for (; list; list = list->next) { + if (gst_caps_features_is_equal ((GstCapsFeatures *) list->data, cf)) + return TRUE; + } + return FALSE; +} + +/* compute the number of common caps features */ +guint +gst_playback_utils_get_n_common_capsfeatures (GstElementFactory * fact1, + GstElementFactory * fact2, GstPlayFlags flags, gboolean isaudioelement) +{ + GstCaps *fact1_tmpl_caps, *fact2_tmpl_caps; + GstCapsFeatures *fact1_features, *fact2_features; + GstStructure *fact1_struct, *fact2_struct; + GList *cf_list = NULL; + guint fact1_caps_size, fact2_caps_size; + guint i, j, n_common_cf = 0; + GstCaps *raw_caps = + (isaudioelement) ? gst_static_caps_get (&raw_audio_caps) : + gst_static_caps_get (&raw_video_caps); + GstStructure *raw_struct = gst_caps_get_structure (raw_caps, 0); + gboolean native_raw = + (isaudioelement ? ! !(flags & GST_PLAY_FLAG_NATIVE_AUDIO) : ! !(flags & + GST_PLAY_FLAG_NATIVE_VIDEO)); + + fact1_tmpl_caps = get_template_caps (fact1, GST_PAD_SRC); + fact2_tmpl_caps = get_template_caps (fact2, GST_PAD_SINK); + if (!fact1_tmpl_caps || !fact2_tmpl_caps) { + GST_ERROR ("Failed to get template caps from decoder or sink"); + return 0; + } + + fact1_caps_size = gst_caps_get_size (fact1_tmpl_caps); + fact2_caps_size = gst_caps_get_size (fact2_tmpl_caps); + + for (i = 0; i < fact1_caps_size; i++) { + fact1_features = + gst_caps_get_features ((const GstCaps *) fact1_tmpl_caps, i); + if (gst_caps_features_is_any (fact1_features)) + continue; + fact1_struct = + gst_caps_get_structure ((const GstCaps *) fact1_tmpl_caps, i); + for (j = 0; j < fact2_caps_size; j++) { + + fact2_features = + gst_caps_get_features ((const GstCaps *) fact2_tmpl_caps, j); + if (gst_caps_features_is_any (fact2_features)) + continue; + fact2_struct = + gst_caps_get_structure ((const GstCaps *) fact2_tmpl_caps, j); + + /* A common caps feature is given if the caps features are equal + * and the structures can intersect. If the NATIVE_AUDIO/NATIVE_VIDEO + * flags are not set we also allow if both structures are raw caps with + * system memory caps features, because in that case we have converters in + * place. + */ + if (gst_caps_features_is_equal (fact1_features, fact2_features) && + (gst_structure_can_intersect (fact1_struct, fact2_struct) || + (!native_raw + && gst_caps_features_is_equal (fact1_features, + GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY) + && gst_structure_can_intersect (raw_struct, fact1_struct) + && gst_structure_can_intersect (raw_struct, fact2_struct))) + && !is_included (cf_list, fact2_features)) { + cf_list = g_list_prepend (cf_list, fact2_features); + n_common_cf++; + } + } + } + if (cf_list) + g_list_free (cf_list); + + gst_caps_unref (fact1_tmpl_caps); + gst_caps_unref (fact2_tmpl_caps); + + return n_common_cf; +} diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplaybackutils.h gst-plugins-base1.0-1.6.1/gst/playback/gstplaybackutils.h --- gst-plugins-base1.0-1.4.3/gst/playback/gstplaybackutils.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplaybackutils.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,37 @@ +/* Copyright (C) <2014> Intel Corporation + * Copyright (C) <2014> Sreerenj Balachandran + * + * Author: Sreerenj Balachandran + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_PLAYBACK_UTILS_H__ +#define __GST_PLAYBACK_UTILS_H__ + +G_BEGIN_DECLS + +#include +#include "gstplay-enum.h" + +guint +gst_playback_utils_get_n_common_capsfeatures (GstElementFactory * fact1, + GstElementFactory * fact2, + GstPlayFlags flags, + gboolean isaudioelement); +G_END_DECLS + +#endif /* __GST_PLAYBACK_UTILS_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplaybin2.c gst-plugins-base1.0-1.6.1/gst/playback/gstplaybin2.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstplaybin2.c 2014-09-19 06:38:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplaybin2.c 2015-10-27 15:14:33.000000000 +0000 @@ -154,8 +154,8 @@ * switch (GST_MESSAGE_TYPE (msg)) { * case GST_MESSAGE_BUFFERING: { * gint percent = 0; - * gst_message_parse_buffering (msg, &percent); - * g_print ("Buffering (%%u percent done)", percent); + * gst_message_parse_buffering (msg, &percent); + * g_print ("Buffering (%u percent done)", percent); * break; * } * ... @@ -199,18 +199,18 @@ * * Examples * |[ - * gst-launch -v playbin uri=file:///path/to/somefile.avi + * gst-launch-1.0 -v playbin uri=file:///path/to/somefile.mp4 * ]| This will play back the given AVI video file, given that the video and * audio decoders required to decode the content are installed. Since no - * special audio sink or video sink is supplied (not possible via gst-launch), - * playbin will try to find a suitable audio and video sink automatically - * using the autoaudiosink and autovideosink elements. + * special audio sink or video sink is supplied (via playbin's audio-sink or + * video-sink properties) playbin will try to find a suitable audio and + * video sink automatically using the autoaudiosink and autovideosink elements. * |[ - * gst-launch -v playbin uri=cdda://4 + * gst-launch-1.0 -v playbin uri=cdda://4 * ]| This will play back track 4 on an audio CD in your disc drive (assuming * the drive is detected automatically by the plugin). * |[ - * gst-launch -v playbin uri=dvd:// + * gst-launch-1.0 -v playbin uri=dvd:// * ]| This will play back the DVD in your disc drive (assuming * the drive is detected automatically by the plugin). * @@ -230,6 +230,8 @@ #include #include #include +#include +#include #include #include #include @@ -237,6 +239,7 @@ #include "gstplayback.h" #include "gstplaysink.h" #include "gstsubtitleoverlay.h" +#include "gstplaybackutils.h" GST_DEBUG_CATEGORY_STATIC (gst_play_bin_debug); #define GST_CAT_DEFAULT gst_play_bin_debug @@ -247,6 +250,9 @@ #define GST_IS_PLAY_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAY_BIN)) #define GST_IS_PLAY_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAY_BIN)) +#define ULONG_TO_POINTER(number) ((gpointer) (guintptr) (number)) +#define POINTER_TO_ULONG(number) ((guintptr) (number)) + #define VOLUME_MAX_DOUBLE 10.0 typedef struct _GstPlayBin GstPlayBin; @@ -424,6 +430,10 @@ guint buffer_size; /* When buffering, the max buffer size (bytes) */ gboolean force_aspect_ratio; + /* Multiview/stereoscopic overrides */ + GstVideoMultiviewFramePacking multiview_mode; + GstVideoMultiviewFlags multiview_flags; + /* our play sink */ GstPlaySink *playsink; @@ -434,6 +444,7 @@ GMutex dyn_lock; /* if we are shutting down or not */ gint shutdown; + gboolean async_pending; /* async-start has been emitted */ GMutex elements_lock; guint32 elements_cookie; @@ -570,7 +581,8 @@ PROP_FORCE_ASPECT_RATIO, PROP_AUDIO_FILTER, PROP_VIDEO_FILTER, - PROP_LAST + PROP_MULTIVIEW_MODE, + PROP_MULTIVIEW_FLAGS }; /* signals */ @@ -613,6 +625,8 @@ static gboolean gst_play_bin_query (GstElement * element, GstQuery * query); static void gst_play_bin_set_context (GstElement * element, GstContext * context); +static gboolean gst_play_bin_send_event (GstElement * element, + GstEvent * event); static GstTagList *gst_play_bin_get_video_tags (GstPlayBin * playbin, gint stream); @@ -628,7 +642,8 @@ static GstPad *gst_play_bin_get_audio_pad (GstPlayBin * playbin, gint stream); static GstPad *gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream); -static gboolean setup_next_source (GstPlayBin * playbin, GstState target); +static GstStateChangeReturn setup_next_source (GstPlayBin * playbin, + GstState target); static void no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group); static void pad_removed_cb (GstElement * decodebin, GstPad * pad, @@ -985,6 +1000,41 @@ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** + * GstPlayBin::video-multiview-mode: + * + * Set the stereoscopic mode for video streams that don't contain + * any information in the stream, so they can be correctly played + * as 3D streams. If a video already has multiview information + * encoded, this property can override other modes in the set, + * but cannot be used to re-interpret MVC or mixed-mono streams. + * + * See Also: The #GstPlayBin::video-multiview-flags property + * + */ + g_object_class_install_property (gobject_klass, PROP_MULTIVIEW_MODE, + g_param_spec_enum ("video-multiview-mode", + "Multiview Mode Override", + "Re-interpret a video stream as one of several frame-packed stereoscopic modes.", + GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * GstPlayBin::video-multiview-flags: + * + * When overriding the multiview mode of an input stream, + * these flags modify details of the view layout. + * + * See Also: The #GstPlayBin::video-multiview-mode property + */ + g_object_class_install_property (gobject_klass, PROP_MULTIVIEW_FLAGS, + g_param_spec_flags ("video-multiview-flags", + "Multiview Flags Override", + "Override details of the multiview frame layout", + GST_TYPE_VIDEO_MULTIVIEW_FLAGS, GST_VIDEO_MULTIVIEW_FLAGS_NONE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** * GstPlayBin::about-to-finish * @playbin: a #GstPlayBin * @@ -1267,12 +1317,42 @@ GST_DEBUG_FUNCPTR (gst_play_bin_change_state); gstelement_klass->query = GST_DEBUG_FUNCPTR (gst_play_bin_query); gstelement_klass->set_context = GST_DEBUG_FUNCPTR (gst_play_bin_set_context); + gstelement_klass->send_event = GST_DEBUG_FUNCPTR (gst_play_bin_send_event); gstbin_klass->handle_message = GST_DEBUG_FUNCPTR (gst_play_bin_handle_message); } static void +do_async_start (GstPlayBin * playbin) +{ + GstMessage *message; + + playbin->async_pending = TRUE; + + message = gst_message_new_async_start (GST_OBJECT_CAST (playbin)); + GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (playbin), + message); +} + +static void +do_async_done (GstPlayBin * playbin) +{ + GstMessage *message; + + if (playbin->async_pending) { + GST_DEBUG_OBJECT (playbin, "posting ASYNC_DONE"); + message = + gst_message_new_async_done (GST_OBJECT_CAST (playbin), + GST_CLOCK_TIME_NONE); + GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (playbin), + message); + + playbin->async_pending = FALSE; + } +} + +static void init_group (GstPlayBin * playbin, GstSourceGroup * group) { /* store the array for the different channels */ @@ -1480,6 +1560,9 @@ playbin->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE; playbin->force_aspect_ratio = TRUE; + + playbin->multiview_mode = GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE; + playbin->multiview_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE; } static void @@ -1627,8 +1710,13 @@ static void gst_play_bin_set_flags (GstPlayBin * playbin, GstPlayFlags flags) { - gst_play_sink_set_flags (playbin->playsink, flags); - gst_play_sink_reconfigure (playbin->playsink); + GstPlayFlags old_flags; + old_flags = gst_play_sink_get_flags (playbin->playsink); + + if (flags != old_flags) { + gst_play_sink_set_flags (playbin->playsink, flags); + gst_play_sink_reconfigure (playbin->playsink); + } } static GstPlayFlags @@ -2032,6 +2120,22 @@ gst_iterator_free (it); } +static void +source_combine_remove_pads (GstPlayBin * playbin, GstSourceCombine * combine) +{ + if (combine->sinkpad) { + GST_LOG_OBJECT (playbin, "unlinking from sink"); + gst_pad_unlink (combine->srcpad, combine->sinkpad); + + /* release back */ + GST_LOG_OBJECT (playbin, "release sink pad"); + gst_play_sink_release_pad (playbin->playsink, combine->sinkpad); + gst_object_unref (combine->sinkpad); + combine->sinkpad = NULL; + } + gst_object_unref (combine->srcpad); + combine->srcpad = NULL; +} static GstPadProbeReturn block_serialized_data_cb (GstPad * pad, GstPadProbeInfo * info, @@ -2277,6 +2381,14 @@ break; case PROP_FLAGS: gst_play_bin_set_flags (playbin, g_value_get_flags (value)); + if (playbin->curr_group) { + GST_SOURCE_GROUP_LOCK (playbin->curr_group); + if (playbin->curr_group->uridecodebin) { + g_object_set (playbin->curr_group->uridecodebin, "download", + (g_value_get_flags (value) & GST_PLAY_FLAG_DOWNLOAD) != 0, NULL); + } + GST_SOURCE_GROUP_UNLOCK (playbin->curr_group); + } break; case PROP_CURRENT_VIDEO: gst_play_bin_set_current_video_stream (playbin, g_value_get_int (value)); @@ -2353,11 +2465,29 @@ break; case PROP_RING_BUFFER_MAX_SIZE: playbin->ring_buffer_max_size = g_value_get_uint64 (value); + if (playbin->curr_group) { + GST_SOURCE_GROUP_LOCK (playbin->curr_group); + if (playbin->curr_group->uridecodebin) { + g_object_set (playbin->curr_group->uridecodebin, + "ring-buffer-max-size", playbin->ring_buffer_max_size, NULL); + } + GST_SOURCE_GROUP_UNLOCK (playbin->curr_group); + } break; case PROP_FORCE_ASPECT_RATIO: g_object_set (playbin->playsink, "force-aspect-ratio", g_value_get_boolean (value), NULL); break; + case PROP_MULTIVIEW_MODE: + GST_PLAY_BIN_LOCK (playbin); + playbin->multiview_mode = g_value_get_enum (value); + GST_PLAY_BIN_UNLOCK (playbin); + break; + case PROP_MULTIVIEW_FLAGS: + GST_PLAY_BIN_LOCK (playbin); + playbin->multiview_flags = g_value_get_flags (value); + GST_PLAY_BIN_UNLOCK (playbin); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2416,7 +2546,6 @@ g_value_set_string (value, group->uri); GST_PLAY_BIN_UNLOCK (playbin); break; - break; } case PROP_CURRENT_URI: { @@ -2552,12 +2681,12 @@ case PROP_AUDIO_STREAM_COMBINER: g_value_take_object (value, gst_play_bin_get_current_stream_combiner (playbin, - &playbin->audio_stream_combiner, "audio", PLAYBIN_STREAM_VIDEO)); + &playbin->audio_stream_combiner, "audio", PLAYBIN_STREAM_AUDIO)); break; case PROP_TEXT_STREAM_COMBINER: g_value_take_object (value, gst_play_bin_get_current_stream_combiner (playbin, - &playbin->text_stream_combiner, "text", PLAYBIN_STREAM_VIDEO)); + &playbin->text_stream_combiner, "text", PLAYBIN_STREAM_TEXT)); break; case PROP_VOLUME: g_value_set_double (value, gst_play_sink_get_volume (playbin->playsink)); @@ -2602,6 +2731,16 @@ g_value_set_boolean (value, v); break; } + case PROP_MULTIVIEW_MODE: + GST_OBJECT_LOCK (playbin); + g_value_set_enum (value, playbin->multiview_mode); + GST_OBJECT_UNLOCK (playbin); + break; + case PROP_MULTIVIEW_FLAGS: + GST_OBJECT_LOCK (playbin); + g_value_set_flags (value, playbin->multiview_flags); + GST_OBJECT_UNLOCK (playbin); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2797,7 +2936,7 @@ * them into warnings and disable the subtitles */ group = playbin->curr_group; if (group && group->suburidecodebin) { - if (G_UNLIKELY (gst_object_has_ancestor (msg->src, GST_OBJECT_CAST + if (G_UNLIKELY (gst_object_has_as_ancestor (msg->src, GST_OBJECT_CAST (group->suburidecodebin)))) { GError *err; gchar *debug = NULL; @@ -2853,6 +2992,11 @@ gst_bin_remove (bin, group->suburidecodebin); gst_element_set_locked_state (group->suburidecodebin, FALSE); + GST_SOURCE_GROUP_LOCK (group); + g_free (group->suburi); + group->suburi = NULL; + GST_SOURCE_GROUP_UNLOCK (group); + if (group->sub_pending) { group->sub_pending = FALSE; no_more_pads_cb (NULL, group); @@ -2941,6 +3085,52 @@ g_object_notify (G_OBJECT (playbin), property); } +static GstCaps * +update_video_multiview_caps (GstPlayBin * playbin, GstCaps * caps) +{ + GstVideoMultiviewMode mv_mode; + GstVideoMultiviewMode cur_mv_mode; + GstVideoMultiviewFlags mv_flags, cur_mv_flags; + GstStructure *s; + const gchar *mview_mode_str; + GstCaps *out_caps; + + GST_OBJECT_LOCK (playbin); + mv_mode = (GstVideoMultiviewMode) playbin->multiview_mode; + mv_flags = playbin->multiview_flags; + GST_OBJECT_UNLOCK (playbin); + + if (mv_mode == GST_VIDEO_MULTIVIEW_MODE_NONE) + return NULL; + + cur_mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE; + cur_mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE; + + s = gst_caps_get_structure (caps, 0); + + gst_structure_get_flagset (s, "multiview-flags", &cur_mv_flags, NULL); + if ((mview_mode_str = gst_structure_get_string (s, "multiview-mode"))) + cur_mv_mode = gst_video_multiview_mode_from_caps_string (mview_mode_str); + + /* We can't override an existing annotated multiview mode, except + * maybe (in the future) we could change some flags. */ + if ((gint) cur_mv_mode > GST_VIDEO_MULTIVIEW_MAX_FRAME_PACKING) { + GST_INFO_OBJECT (playbin, "Cannot override existing multiview mode"); + return NULL; + } + + mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode); + g_assert (mview_mode_str != NULL); + out_caps = gst_caps_copy (caps); + s = gst_caps_get_structure (out_caps, 0); + + gst_structure_set (s, "multiview-mode", G_TYPE_STRING, mview_mode_str, + "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags, + GST_FLAG_SET_MASK_EXACT, NULL); + + return out_caps; +} + static GstPadProbeReturn _uridecodebin_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata) { @@ -3004,6 +3194,26 @@ GST_SOURCE_GROUP_UNLOCK (group); break; } + case GST_EVENT_CAPS:{ + GstCaps *caps = NULL; + const GstStructure *s; + const gchar *name; + + gst_event_parse_caps (event, &caps); + /* If video caps, check if we should override multiview flags */ + s = gst_caps_get_structure (caps, 0); + name = gst_structure_get_name (s); + if (g_str_has_prefix (name, "video/")) { + caps = update_video_multiview_caps (group->playbin, caps); + if (caps) { + gst_event_unref (event); + event = gst_event_new_caps (caps); + GST_PAD_PROBE_INFO_DATA (info) = event; + gst_caps_unref (caps); + } + } + break; + } default: break; } @@ -3085,6 +3295,8 @@ playbin = group->playbin; + GST_PLAY_BIN_SHUTDOWN_LOCK (playbin, shutdown); + caps = gst_pad_get_current_caps (pad); if (!caps) caps = gst_pad_query_caps (pad, NULL); @@ -3126,8 +3338,10 @@ } /* no combiner found for the media type, don't bother linking it to a * combiner. This will leave the pad unlinked and thus ignored. */ - if (combine == NULL) + if (combine == NULL) { + GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin); goto unknown_type; + } GST_SOURCE_GROUP_LOCK (group); if (combine->combiner == NULL && playbin->have_selector) { @@ -3173,6 +3387,8 @@ } } + GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin); + if (combine->srcpad == NULL) { if (combine->combiner) { /* save source pad of the combiner */ @@ -3227,7 +3443,7 @@ G_CALLBACK (notify_tags_cb), ntdata, (GClosureNotify) g_free, (GConnectFlags) 0); g_object_set_data (G_OBJECT (sinkpad), "playbin.notify_tags_handler", - (gpointer) (guintptr) notify_tags_handler); + ULONG_TO_POINTER (notify_tags_handler)); } /* store the pad in the array */ @@ -3262,7 +3478,7 @@ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, _uridecodebin_event_probe, group, NULL); g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id", - (gpointer) group_id_probe_handler); + ULONG_TO_POINTER (group_id_probe_handler)); if (changed) { int signal; @@ -3311,8 +3527,8 @@ link_failed: { GST_ERROR_OBJECT (playbin, - "failed to link pad %s:%s to combiner, reason %d", - GST_DEBUG_PAD_NAME (pad), res); + "failed to link pad %s:%s to combiner, reason %s (%d)", + GST_DEBUG_PAD_NAME (pad), gst_pad_link_get_name (res), res); GST_SOURCE_GROUP_UNLOCK (group); goto done; } @@ -3322,6 +3538,12 @@ ("Failed to get request pad from combiner %p.", combine->combiner)); GST_SOURCE_GROUP_UNLOCK (group); goto done; +shutdown: + { + GST_DEBUG ("ignoring, we are shutting down. Pad will be left unlinked"); + /* not going to done as we didn't request the caps */ + return; + } } /* called when a pad is removed from the uridecodebin. We unlink the pad from @@ -3344,17 +3566,16 @@ GST_SOURCE_GROUP_LOCK (group); if ((group_id_probe_handler = - (guintptr) g_object_get_data (G_OBJECT (pad), - "playbin.event_probe_id"))) { + POINTER_TO_ULONG (g_object_get_data (G_OBJECT (pad), + "playbin.event_probe_id")))) { gst_pad_remove_probe (pad, group_id_probe_handler); - g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id", 0); + g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id", NULL); } if ((combine = g_object_get_data (G_OBJECT (pad), "playbin.combine"))) { g_assert (combine->combiner == NULL); g_assert (combine->srcpad == pad); - gst_object_unref (pad); - combine->srcpad = NULL; + source_combine_remove_pads (playbin, combine); goto exit; } @@ -3374,8 +3595,8 @@ gulong notify_tags_handler; notify_tags_handler = - (guintptr) g_object_get_data (G_OBJECT (peer), - "playbin.notify_tags_handler"); + POINTER_TO_ULONG (g_object_get_data (G_OBJECT (peer), + "playbin.notify_tags_handler")); if (notify_tags_handler != 0) g_signal_handler_disconnect (G_OBJECT (peer), notify_tags_handler); g_object_set_data (G_OBJECT (peer), "playbin.notify_tags_handler", NULL); @@ -3405,8 +3626,7 @@ if (!combine->channels->len && combine->combiner) { GST_DEBUG_OBJECT (playbin, "all combiner sinkpads removed"); GST_DEBUG_OBJECT (playbin, "removing combiner %p", combine->combiner); - gst_object_unref (combine->srcpad); - combine->srcpad = NULL; + source_combine_remove_pads (playbin, combine); gst_element_set_state (combine->combiner, GST_STATE_NULL); gst_bin_remove (GST_BIN_CAST (playbin), combine->combiner); combine->combiner = NULL; @@ -3561,6 +3781,10 @@ GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin); + if (configure) { + do_async_done (playbin); + } + return; shutdown: @@ -3730,103 +3954,6 @@ return strcmp (GST_OBJECT_NAME (fd1), GST_OBJECT_NAME (fd2)); } -/* unref the caps after usage */ -static GstCaps * -get_template_caps (GstElementFactory * factory, GstPadDirection direction) -{ - const GList *templates; - GstStaticPadTemplate *templ = NULL; - GList *walk; - - templates = gst_element_factory_get_static_pad_templates (factory); - for (walk = (GList *) templates; walk; walk = g_list_next (walk)) { - templ = walk->data; - if (templ->direction == direction) - break; - } - if (templ) - return gst_static_caps_get (&templ->static_caps); - else - return NULL; -} - -static gboolean -is_included (GList * list, GstCapsFeatures * cf) -{ - for (; list; list = list->next) { - if (gst_caps_features_is_equal ((GstCapsFeatures *) list->data, cf)) - return TRUE; - } - return FALSE; -} - -/* compute the number of common caps features */ -static guint -get_n_common_capsfeatures (GstPlayBin * playbin, GstElementFactory * dec, - GstElementFactory * sink, gboolean isaudioelement) -{ - GstCaps *d_tmpl_caps, *s_tmpl_caps; - GstCapsFeatures *d_features, *s_features; - GstStructure *d_struct, *s_struct; - GList *cf_list = NULL; - guint d_caps_size, s_caps_size; - guint i, j, n_common_cf = 0; - GstCaps *raw_caps = - (isaudioelement) ? gst_static_caps_get (&raw_audio_caps) : - gst_static_caps_get (&raw_video_caps); - GstStructure *raw_struct = gst_caps_get_structure (raw_caps, 0); - GstPlayFlags flags = gst_play_bin_get_flags (playbin); - gboolean native_raw = - (isaudioelement ? ! !(flags & GST_PLAY_FLAG_NATIVE_AUDIO) : ! !(flags & - GST_PLAY_FLAG_NATIVE_VIDEO)); - - d_tmpl_caps = get_template_caps (dec, GST_PAD_SRC); - s_tmpl_caps = get_template_caps (sink, GST_PAD_SINK); - - if (!d_tmpl_caps || !s_tmpl_caps) { - GST_ERROR ("Failed to get template caps from decoder or sink"); - return 0; - } - - d_caps_size = gst_caps_get_size (d_tmpl_caps); - s_caps_size = gst_caps_get_size (s_tmpl_caps); - - for (i = 0; i < d_caps_size; i++) { - d_features = gst_caps_get_features ((const GstCaps *) d_tmpl_caps, i); - d_struct = gst_caps_get_structure ((const GstCaps *) d_tmpl_caps, i); - for (j = 0; j < s_caps_size; j++) { - - s_features = gst_caps_get_features ((const GstCaps *) s_tmpl_caps, j); - s_struct = gst_caps_get_structure ((const GstCaps *) s_tmpl_caps, j); - - /* A common caps feature is given if the caps features are equal - * and the structures can intersect. If the NATIVE_AUDIO/NATIVE_VIDEO - * flags are not set we also allow if both structures are raw caps with - * system memory caps features, because in that case we have converters in - * place. - */ - if (gst_caps_features_is_equal (d_features, s_features) && - (gst_structure_can_intersect (d_struct, s_struct) || - (!native_raw - && gst_caps_features_is_equal (d_features, - GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY) - && gst_structure_can_intersect (raw_struct, d_struct) - && gst_structure_can_intersect (raw_struct, s_struct))) - && !is_included (cf_list, s_features)) { - cf_list = g_list_prepend (cf_list, s_features); - n_common_cf++; - } - } - } - if (cf_list) - g_list_free (cf_list); - - gst_caps_unref (d_tmpl_caps); - gst_caps_unref (s_tmpl_caps); - - return n_common_cf; -} - static GSequence * avelements_create (GstPlayBin * playbin, gboolean isaudioelement) { @@ -3870,8 +3997,8 @@ s_factory = (GstElementFactory *) sl->data; n_common_cf = - get_n_common_capsfeatures (playbin, d_factory, s_factory, - isaudioelement); + gst_playback_utils_get_n_common_capsfeatures (d_factory, s_factory, + gst_play_bin_get_flags (playbin), isaudioelement); if (n_common_cf < 1) continue; @@ -4118,6 +4245,27 @@ return result; } +static gboolean +gst_play_bin_send_event (GstElement * element, GstEvent * event) +{ + GstPlayBin *playbin = GST_PLAY_BIN (element); + + /* Send event directly to playsink instead of letting GstBin iterate + * over all sink elements. The latter might send the event multiple times + * in case the SEEK causes a reconfiguration of the pipeline, as can easily + * happen with adaptive streaming demuxers. + * + * What would then happen is that the iterator would be reset, we send the + * event again, and on the second time it will fail in the majority of cases + * because the pipeline is still being reconfigured + */ + if (GST_EVENT_IS_UPSTREAM (event)) { + return gst_element_send_event (GST_ELEMENT_CAST (playbin->playsink), event); + } + + return GST_ELEMENT_CLASS (parent_class)->send_event (element, event); +} + static void gst_play_bin_set_context (GstElement * element, GstContext * context) { @@ -4183,15 +4331,15 @@ /* Only proxy errors from a fixed sink. If that fails we can just error out * early as stuff will fail later anyway */ if (playbin->audio_sink - && gst_object_has_ancestor (GST_MESSAGE_SRC (msg), + && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg), GST_OBJECT_CAST (playbin->audio_sink))) gst_element_post_message (GST_ELEMENT_CAST (playbin), msg); else if (playbin->video_sink - && gst_object_has_ancestor (GST_MESSAGE_SRC (msg), + && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg), GST_OBJECT_CAST (playbin->video_sink))) gst_element_post_message (GST_ELEMENT_CAST (playbin), msg); else if (playbin->text_sink - && gst_object_has_ancestor (GST_MESSAGE_SRC (msg), + && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg), GST_OBJECT_CAST (playbin->text_sink))) gst_element_post_message (GST_ELEMENT_CAST (playbin), msg); else @@ -4290,21 +4438,25 @@ GstSourceGroup * group) { gboolean ret = TRUE; - GstElement *sink; GstPad *sinkpad = NULL; + gboolean activated_sink; GST_SOURCE_GROUP_LOCK (group); - if ((sink = group->text_sink)) - sinkpad = gst_element_get_static_pad (sink, "sink"); - if (sinkpad) { - GstCaps *sinkcaps; + if (group->text_sink && + activate_sink (group->playbin, group->text_sink, &activated_sink)) { + sinkpad = gst_element_get_static_pad (group->text_sink, "sink"); + if (sinkpad) { + GstCaps *sinkcaps; - sinkcaps = gst_pad_query_caps (sinkpad, NULL); - if (!gst_caps_is_any (sinkcaps)) - ret = !gst_pad_query_accept_caps (sinkpad, caps); - gst_caps_unref (sinkcaps); - gst_object_unref (sinkpad); + sinkcaps = gst_pad_query_caps (sinkpad, NULL); + if (!gst_caps_is_any (sinkcaps)) + ret = !gst_pad_query_accept_caps (sinkpad, caps); + gst_caps_unref (sinkcaps); + gst_object_unref (sinkpad); + } + if (activated_sink) + gst_element_set_state (group->text_sink, GST_STATE_NULL); } else { GstCaps *subcaps = gst_subtitle_overlay_create_factory_caps (); ret = !gst_caps_is_subset (caps, subcaps); @@ -4317,12 +4469,14 @@ /* If this is from the subtitle uridecodebin we don't need to * check the audio and video sink */ if (group->suburidecodebin - && gst_object_has_ancestor (GST_OBJECT_CAST (element), + && gst_object_has_as_ancestor (GST_OBJECT_CAST (element), GST_OBJECT_CAST (group->suburidecodebin))) goto done; - if ((sink = group->audio_sink)) { - sinkpad = gst_element_get_static_pad (sink, "sink"); + if (group->audio_sink && + activate_sink (group->playbin, group->audio_sink, &activated_sink)) { + + sinkpad = gst_element_get_static_pad (group->audio_sink, "sink"); if (sinkpad) { GstCaps *sinkcaps; @@ -4332,12 +4486,15 @@ gst_caps_unref (sinkcaps); gst_object_unref (sinkpad); } + if (activated_sink) + gst_element_set_state (group->audio_sink, GST_STATE_NULL); } if (!ret) goto done; - if ((sink = group->video_sink)) { - sinkpad = gst_element_get_static_pad (sink, "sink"); + if (group->video_sink + && activate_sink (group->playbin, group->video_sink, &activated_sink)) { + sinkpad = gst_element_get_static_pad (group->video_sink, "sink"); if (sinkpad) { GstCaps *sinkcaps; @@ -4347,6 +4504,8 @@ gst_caps_unref (sinkcaps); gst_object_unref (sinkpad); } + if (activated_sink) + gst_element_set_state (group->video_sink, GST_STATE_NULL); } done: @@ -4593,7 +4752,7 @@ /* now see if we already have a sink element */ GST_SOURCE_GROUP_LOCK (group); - if (*sinkp) { + if (*sinkp && GST_STATE (*sinkp) >= GST_STATE_READY) { GstElement *sink = gst_object_ref (*sinkp); if (sink_accepts_caps (playbin, sink, caps)) { @@ -4696,7 +4855,7 @@ /* If this is from the subtitle uridecodebin we don't need to * check the audio and video sink */ if (group->suburidecodebin - && gst_object_has_ancestor (GST_OBJECT_CAST (pad), + && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad), GST_OBJECT_CAST (group->suburidecodebin))) { goto done; } @@ -4726,7 +4885,7 @@ /* If this is from the subtitle uridecodebin we don't need to * check the audio and video sink */ if (group->suburidecodebin - && gst_object_has_ancestor (GST_OBJECT_CAST (pad), + && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad), GST_OBJECT_CAST (group->suburidecodebin))) { goto done; } @@ -4867,7 +5026,7 @@ /* If this is from the subtitle uridecodebin we don't need to * check the audio and video sink */ if (group->suburidecodebin - && gst_object_has_ancestor (GST_OBJECT_CAST (pad), + && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad), GST_OBJECT_CAST (group->suburidecodebin))) { goto done; } @@ -4884,7 +5043,7 @@ /* If this is from the subtitle uridecodebin we don't need to * check the audio and video sink */ if (group->suburidecodebin - && gst_object_has_ancestor (GST_OBJECT_CAST (pad), + && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad), GST_OBJECT_CAST (group->suburidecodebin))) { goto done; } @@ -4969,7 +5128,7 @@ } /* must be called with PLAY_BIN_LOCK */ -static gboolean +static GstStateChangeReturn activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target) { GstElement *uridecodebin = NULL; @@ -4978,9 +5137,10 @@ gboolean audio_sink_activated = FALSE; gboolean video_sink_activated = FALSE; gboolean text_sink_activated = FALSE; + GstStateChangeReturn state_ret; - g_return_val_if_fail (group->valid, FALSE); - g_return_val_if_fail (!group->active, FALSE); + g_return_val_if_fail (group->valid, GST_STATE_CHANGE_FAILURE); + g_return_val_if_fail (!group->active, GST_STATE_CHANGE_FAILURE); GST_DEBUG_OBJECT (playbin, "activating group %p", group); @@ -5184,19 +5344,23 @@ group->sub_pending = FALSE; } gst_element_set_state (suburidecodebin, GST_STATE_READY); + g_free (group->suburi); + group->suburi = NULL; GST_SOURCE_GROUP_UNLOCK (group); } } - if (gst_element_set_state (uridecodebin, target) == GST_STATE_CHANGE_FAILURE) + if ((state_ret = + gst_element_set_state (uridecodebin, + target)) == GST_STATE_CHANGE_FAILURE) goto uridecodebin_failure; GST_SOURCE_GROUP_LOCK (group); - /* alow state changes of the playbin affect the group elements now */ + /* allow state changes of the playbin affect the group elements now */ group_set_locked_state_unlocked (playbin, group, FALSE); group->active = TRUE; GST_SOURCE_GROUP_UNLOCK (group); - return TRUE; + return state_ret; /* ERRORS */ no_decodebin: @@ -5219,6 +5383,7 @@ uridecodebin_failure: { GST_DEBUG_OBJECT (playbin, "failed state change of uridecodebin"); + GST_SOURCE_GROUP_LOCK (group); goto error_cleanup; } sink_failure: @@ -5255,13 +5420,23 @@ group->text_sink = NULL; if (uridecodebin) { + REMOVE_SIGNAL (group->uridecodebin, group->pad_added_id); + REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id); + REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id); + REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id); + REMOVE_SIGNAL (group->uridecodebin, group->drained_id); + REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id); + REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id); + REMOVE_SIGNAL (group->uridecodebin, group->autoplug_continue_id); + REMOVE_SIGNAL (group->uridecodebin, group->autoplug_query_id); + gst_element_set_state (uridecodebin, GST_STATE_NULL); gst_bin_remove (GST_BIN_CAST (playbin), uridecodebin); } GST_SOURCE_GROUP_UNLOCK (group); - return FALSE; + return GST_STATE_CHANGE_FAILURE; } } @@ -5272,8 +5447,8 @@ { gint i; - g_return_val_if_fail (group->valid, FALSE); g_return_val_if_fail (group->active, FALSE); + g_return_val_if_fail (group->valid, FALSE); GST_DEBUG_OBJECT (playbin, "unlinking group %p", group); @@ -5285,19 +5460,7 @@ GST_DEBUG_OBJECT (playbin, "unlinking combiner %s", combine->media_list[0]); if (combine->srcpad) { - if (combine->sinkpad) { - GST_LOG_OBJECT (playbin, "unlinking from sink"); - gst_pad_unlink (combine->srcpad, combine->sinkpad); - - /* release back */ - GST_LOG_OBJECT (playbin, "release sink pad"); - gst_play_sink_release_pad (playbin->playsink, combine->sinkpad); - gst_object_unref (combine->sinkpad); - combine->sinkpad = NULL; - } - - gst_object_unref (combine->srcpad); - combine->srcpad = NULL; + source_combine_remove_pads (playbin, combine); } if (combine->combiner) { @@ -5320,7 +5483,7 @@ /* delete any custom sinks we might have. * conditionally set them to null if they aren't inside playsink yet */ if (group->audio_sink) { - if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->audio_sink), + if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->audio_sink), GST_OBJECT_CAST (playbin->playsink))) { gst_element_set_state (group->audio_sink, GST_STATE_NULL); } @@ -5328,7 +5491,7 @@ } group->audio_sink = NULL; if (group->video_sink) { - if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->video_sink), + if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->video_sink), GST_OBJECT_CAST (playbin->playsink))) { gst_element_set_state (group->video_sink, GST_STATE_NULL); } @@ -5336,7 +5499,7 @@ } group->video_sink = NULL; if (group->text_sink) { - if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->text_sink), + if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->text_sink), GST_OBJECT_CAST (playbin->playsink))) { gst_element_set_state (group->text_sink, GST_STATE_NULL); } @@ -5379,10 +5542,11 @@ /* setup the next group to play, this assumes the next_group is valid and * configured. It swaps out the current_group and activates the valid * next_group. */ -static gboolean +static GstStateChangeReturn setup_next_source (GstPlayBin * playbin, GstState target) { GstSourceGroup *new_group, *old_group; + GstStateChangeReturn state_ret; GST_DEBUG_OBJECT (playbin, "setup sources"); @@ -5408,12 +5572,14 @@ playbin->next_group = old_group; /* activate the new group */ - if (!activate_group (playbin, new_group, target)) + if ((state_ret = + activate_group (playbin, new_group, + target)) == GST_STATE_CHANGE_FAILURE) goto activate_failed; GST_PLAY_BIN_UNLOCK (playbin); - return TRUE; + return state_ret; /* ERRORS */ no_next_group: @@ -5422,14 +5588,15 @@ if (target == GST_STATE_READY && new_group && new_group->uri == NULL) GST_ELEMENT_ERROR (playbin, RESOURCE, NOT_FOUND, ("No URI set"), (NULL)); GST_PLAY_BIN_UNLOCK (playbin); - return FALSE; + return GST_STATE_CHANGE_FAILURE; } activate_failed: { new_group->stream_changed_pending = FALSE; GST_DEBUG_OBJECT (playbin, "activate failed"); + new_group->valid = FALSE; GST_PLAY_BIN_UNLOCK (playbin); - return FALSE; + return GST_STATE_CHANGE_FAILURE; } } @@ -5495,11 +5662,7 @@ GST_LOG_OBJECT (playbin, "clearing shutdown flag"); memset (&playbin->duration, 0, sizeof (playbin->duration)); g_atomic_int_set (&playbin->shutdown, 0); - - if (!setup_next_source (playbin, GST_STATE_READY)) { - ret = GST_STATE_CHANGE_FAILURE; - goto failure; - } + do_async_start (playbin); break; case GST_STATE_CHANGE_PAUSED_TO_READY: async_down: @@ -5518,7 +5681,7 @@ break; case GST_STATE_CHANGE_READY_TO_NULL: /* we go async to PAUSED, so if that fails, we never make it to PAUSED - * an no state change PAUSED to READY passes here, + * and no state change PAUSED to READY passes here, * though it is a nice-to-have ... */ if (!g_atomic_int_get (&playbin->shutdown)) { do_save = TRUE; @@ -5539,8 +5702,16 @@ switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: + if ((ret = + setup_next_source (playbin, + GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE) + goto failure; + if (ret == GST_STATE_CHANGE_SUCCESS) + ret = GST_STATE_CHANGE_ASYNC; + break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: + do_async_done (playbin); /* FIXME Release audio device when we implement that */ break; case GST_STATE_CHANGE_PAUSED_TO_READY: @@ -5627,18 +5798,25 @@ break; } + if (ret == GST_STATE_CHANGE_NO_PREROLL) + do_async_done (playbin); + return ret; /* ERRORS */ failure: { + do_async_done (playbin); + if (transition == GST_STATE_CHANGE_READY_TO_PAUSED) { GstSourceGroup *curr_group; curr_group = playbin->curr_group; - if (curr_group && curr_group->active && curr_group->valid) { - /* unlink our pads with the sink */ - deactivate_group (playbin, curr_group); + if (curr_group) { + if (curr_group->active && curr_group->valid) { + /* unlink our pads with the sink */ + deactivate_group (playbin, curr_group); + } curr_group->valid = FALSE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplay-enum.h gst-plugins-base1.0-1.6.1/gst/playback/gstplay-enum.h --- gst-plugins-base1.0-1.4.3/gst/playback/gstplay-enum.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplay-enum.h 2015-10-22 08:01:34.000000000 +0000 @@ -57,6 +57,7 @@ * formats. * @GST_PLAY_FLAG_BUFFERING: enable buffering of the demuxed or parsed data. * @GST_PLAY_FLAG_DEINTERLACE: deinterlace raw video (if native not forced). + * @GST_PLAY_FLAG_SOFT_COLORBALANCE: Use a software filter for colour balance * @GST_PLAY_FLAG_FORCE_FILTERS: force audio/video filters to be applied if * set. * diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplaysink.c gst-plugins-base1.0-1.6.1/gst/playback/gstplaysink.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstplaysink.c 2014-09-16 18:46:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplaysink.c 2015-10-22 08:01:34.000000000 +0000 @@ -105,7 +105,6 @@ GstElement *volume; /* element with the volume property */ gboolean sink_volume; /* if the volume was provided by the sink */ gulong notify_volume_id; - GstElement *mute; /* element with the mute property */ gulong notify_mute_id; GstElement *sink; GstElement *ts_offset; @@ -212,6 +211,8 @@ gboolean audio_pad_blocked; GstPad *audio_srcpad_stream_synchronizer; GstPad *audio_sinkpad_stream_synchronizer; + GstElement *audio_ssync_queue; + GstPad *audio_ssync_queue_sinkpad; gulong audio_block_id; gulong audio_notify_caps_id; /* audio tee */ @@ -345,8 +346,7 @@ PROP_SEND_EVENT_MODE, PROP_FORCE_ASPECT_RATIO, PROP_VIDEO_FILTER, - PROP_AUDIO_FILTER, - PROP_LAST + PROP_AUDIO_FILTER }; /* signals */ @@ -525,7 +525,7 @@ * unless GST_PLAY_FLAG_FORCE_FILTERS is set. playsink must be in * %GST_STATE_NULL */ - g_object_class_install_property (gobject_klass, PROP_VIDEO_SINK, + g_object_class_install_property (gobject_klass, PROP_VIDEO_FILTER, g_param_spec_object ("video-filter", "Video filter", "the video filter(s) to apply, if possible", GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -729,7 +729,7 @@ if (chain->notify_volume_id) g_signal_handler_disconnect (chain->volume, chain->notify_volume_id); if (chain->notify_mute_id) - g_signal_handler_disconnect (chain->mute, chain->notify_mute_id); + g_signal_handler_disconnect (chain->volume, chain->notify_mute_id); chain->notify_volume_id = chain->notify_mute_id = 0; } } @@ -745,6 +745,18 @@ } static void +gst_play_sink_remove_audio_ssync_queue (GstPlaySink * playsink) +{ + if (playsink->audio_ssync_queue) { + gst_element_set_state (playsink->audio_ssync_queue, GST_STATE_NULL); + gst_object_unref (playsink->audio_ssync_queue_sinkpad); + gst_bin_remove (GST_BIN_CAST (playsink), playsink->audio_ssync_queue); + playsink->audio_ssync_queue = NULL; + playsink->audio_ssync_queue_sinkpad = NULL; + } +} + +static void gst_play_sink_dispose (GObject * object) { GstPlaySink *playsink; @@ -1135,12 +1147,10 @@ playsink->volume = volume; chain = (GstPlayAudioChain *) playsink->audiochain; if (chain && chain->volume) { - GST_LOG_OBJECT (playsink, "elements: volume=%" GST_PTR_FORMAT ", mute=%" - GST_PTR_FORMAT "; new volume=%.03f, mute=%d", chain->volume, - chain->mute, volume, playsink->mute); - /* if there is a mute element or we are not muted, set the volume */ - if (chain->mute || !playsink->mute) - g_object_set (chain->volume, "volume", volume, NULL); + GST_LOG_OBJECT (playsink, + "elements: volume=%" GST_PTR_FORMAT "; new volume=%.03f, mute=%d", + chain->volume, volume, playsink->mute); + g_object_set (chain->volume, "volume", volume, NULL); } else { GST_LOG_OBJECT (playsink, "no volume element"); playsink->volume_changed = TRUE; @@ -1158,10 +1168,8 @@ chain = (GstPlayAudioChain *) playsink->audiochain; result = playsink->volume; if (chain && chain->volume) { - if (chain->mute || !playsink->mute) { - g_object_get (chain->volume, "volume", &result, NULL); - playsink->volume = result; - } + g_object_get (chain->volume, "volume", &result, NULL); + playsink->volume = result; } GST_PLAY_SINK_UNLOCK (playsink); @@ -1176,16 +1184,8 @@ GST_PLAY_SINK_LOCK (playsink); playsink->mute = mute; chain = (GstPlayAudioChain *) playsink->audiochain; - if (chain) { - if (chain->mute) { - g_object_set (chain->mute, "mute", mute, NULL); - } else if (chain->volume) { - if (mute) - g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL); - else - g_object_set (chain->volume, "volume", (gdouble) playsink->volume, - NULL); - } + if (chain && chain->volume) { + g_object_set (chain->volume, "mute", mute, NULL); } else { playsink->mute_changed = TRUE; } @@ -1200,8 +1200,8 @@ GST_PLAY_SINK_LOCK (playsink); chain = (GstPlayAudioChain *) playsink->audiochain; - if (chain && chain->mute) { - g_object_get (chain->mute, "mute", &result, NULL); + if (chain && chain->volume) { + g_object_get (chain->volume, "mute", &result, NULL); playsink->mute = result; } else { result = playsink->mute; @@ -2020,7 +2020,7 @@ chain->chain.raw = raw; /* if the chain was active we don't do anything */ - if (GST_PLAY_CHAIN (chain)->activated == TRUE) + if (GST_PLAY_CHAIN (chain)->activated) return TRUE; /* try to set the sink element to READY again */ @@ -2754,11 +2754,16 @@ gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset", G_TYPE_INT64)); - /* check if the sink, or something within the sink, has the volume property. - * If it does we don't need to add a volume element. */ - elem = - gst_play_sink_find_property_sinks (playsink, chain->sink, "volume", - G_TYPE_DOUBLE); + /* check if the sink, or something within the sink, implements the + * streamvolume interface. If it does we don't need to add a volume element. */ + if (GST_IS_BIN (chain->sink)) + elem = + gst_bin_get_by_interface (GST_BIN_CAST (chain->sink), + GST_TYPE_STREAM_VOLUME); + else if (GST_IS_STREAM_VOLUME (chain->sink)) + elem = gst_object_ref (chain->sink); + else + elem = NULL; chain->notify_volume_id = chain->notify_mute_id = 0; if (elem) { chain->volume = elem; @@ -2769,29 +2774,15 @@ GST_DEBUG_OBJECT (playsink, "the sink has a volume property"); have_volume = TRUE; chain->sink_volume = TRUE; - /* if the sink also has a mute property we can use this as well. We'll only - * use the mute property if there is a volume property. We can simulate the - * mute with the volume otherwise. */ - chain->mute = - gst_play_sink_find_property_sinks (playsink, chain->sink, "mute", - G_TYPE_BOOLEAN); - if (chain->mute) { - GST_DEBUG_OBJECT (playsink, "the sink has a mute property"); - chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute", - G_CALLBACK (notify_mute_cb), playsink); - } + chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute", + G_CALLBACK (notify_mute_cb), playsink); /* use the sink to control the volume and mute */ if (playsink->volume_changed) { g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL); playsink->volume_changed = FALSE; } if (playsink->mute_changed) { - if (chain->mute) { - g_object_set (chain->mute, "mute", playsink->mute, NULL); - } else { - if (playsink->mute) - g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL); - } + g_object_set (chain->volume, "mute", playsink->mute, NULL); playsink->mute_changed = FALSE; } } else { @@ -2835,14 +2826,13 @@ G_CALLBACK (notify_volume_cb), playsink); /* volume also has the mute property */ - chain->mute = chain->volume; - chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute", + chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute", G_CALLBACK (notify_mute_cb), playsink); /* configure with the latest volume and mute */ g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL); - g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL); + g_object_set (G_OBJECT (chain->volume), "mute", playsink->mute, NULL); } } } @@ -2951,7 +2941,7 @@ chain->chain.raw = raw; /* if the chain was active we don't do anything */ - if (GST_PLAY_CHAIN (chain)->activated == TRUE) + if (GST_PLAY_CHAIN (chain)->activated) return TRUE; /* try to set the sink element to READY again */ @@ -2967,11 +2957,16 @@ /* Disconnect signals */ disconnect_audio_chain (chain, playsink); - /* check if the sink, or something within the sink, has the volume property. - * If it does we don't need to add a volume element. */ - elem = - gst_play_sink_find_property_sinks (playsink, chain->sink, "volume", - G_TYPE_DOUBLE); + /* check if the sink, or something within the sink, implements the + * streamvolume interface. If it does we don't need to add a volume element. */ + if (GST_IS_BIN (chain->sink)) + elem = + gst_bin_get_by_interface (GST_BIN_CAST (chain->sink), + GST_TYPE_STREAM_VOLUME); + else if (GST_IS_STREAM_VOLUME (chain->sink)) + elem = gst_object_ref (chain->sink); + else + elem = NULL; if (elem) { chain->volume = elem; @@ -2985,17 +2980,10 @@ chain->notify_volume_id = g_signal_connect (chain->volume, "notify::volume", G_CALLBACK (notify_volume_cb), playsink); - /* if the sink also has a mute property we can use this as well. We'll only - * use the mute property if there is a volume property. We can simulate the - * mute with the volume otherwise. */ - chain->mute = - gst_play_sink_find_property_sinks (playsink, chain->sink, "mute", - G_TYPE_BOOLEAN); - if (chain->mute) { - GST_DEBUG_OBJECT (playsink, "the sink has a mute property"); - chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute", - G_CALLBACK (notify_mute_cb), playsink); - } + chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute", + G_CALLBACK (notify_mute_cb), playsink); + g_object_set (chain->volume, "mute", playsink->mute, NULL); + playsink->mute_changed = FALSE; g_object_set (chain->conv, "use-volume", FALSE, NULL); } else if (conv) { @@ -3006,18 +2994,17 @@ if (conv->volume && (playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME)) { chain->volume = conv->volume; - chain->mute = chain->volume; chain->notify_volume_id = g_signal_connect (chain->volume, "notify::volume", G_CALLBACK (notify_volume_cb), playsink); - chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute", + chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute", G_CALLBACK (notify_mute_cb), playsink); /* configure with the latest volume and mute */ g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL); - g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL); + g_object_set (G_OBJECT (chain->volume), "mute", playsink->mute, NULL); } GST_DEBUG_OBJECT (playsink, "reusing existing volume element"); @@ -3468,6 +3455,8 @@ playsink->audio_sinkpad_stream_synchronizer = NULL; gst_object_unref (playsink->audio_srcpad_stream_synchronizer); playsink->audio_srcpad_stream_synchronizer = NULL; + + gst_play_sink_remove_audio_ssync_queue (playsink); } add_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE); @@ -3483,8 +3472,9 @@ activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE); disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; - playsink->audiochain->mute = NULL; if (playsink->audiochain->ts_offset) gst_object_unref (playsink->audiochain->ts_offset); playsink->audiochain->ts_offset = NULL; @@ -3503,6 +3493,7 @@ goto no_chain; if (!playsink->audio_sinkpad_stream_synchronizer) { + GstPad *audio_queue_srcpad; GValue item = { 0, }; GstIterator *it; @@ -3517,18 +3508,49 @@ g_value_unset (&item); g_assert (playsink->audio_srcpad_stream_synchronizer); gst_iterator_free (it); + + if (need_vis) { + GST_DEBUG_OBJECT (playsink, "adding audio stream synchronizer queue"); + playsink->audio_ssync_queue = + gst_element_factory_make ("queue", "audiossyncqueue"); + if (playsink->audio_ssync_queue == NULL) { + post_missing_element_message (playsink, "queue"); + GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN, + (_("Missing element '%s' - check your GStreamer installation."), + "queue"), + ("audio playback and visualizations might not work")); + } + g_object_set (playsink->audio_ssync_queue, "max-size-buffers", + (guint) 1, NULL); + gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_ssync_queue); + playsink->audio_ssync_queue_sinkpad = + gst_element_get_static_pad (playsink->audio_ssync_queue, "sink"); + audio_queue_srcpad = + gst_element_get_static_pad (playsink->audio_ssync_queue, "src"); + gst_element_sync_state_with_parent (playsink->audio_ssync_queue); + gst_pad_link_full (audio_queue_srcpad, + playsink->audio_sinkpad_stream_synchronizer, + GST_PAD_LINK_CHECK_NOTHING); + gst_object_unref (audio_queue_srcpad); + } } if (playsink->audiochain) { + GstPad *sinkpad; + GST_DEBUG_OBJECT (playsink, "adding audio chain"); if (playsink->audio_tee_asrc == NULL) { playsink->audio_tee_asrc = gst_element_get_request_pad (playsink->audio_tee, "src_%u"); } + + sinkpad = playsink->audio_ssync_queue_sinkpad; + if (!sinkpad) + sinkpad = playsink->audio_sinkpad_stream_synchronizer; + add_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE); activate_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE); - gst_pad_link_full (playsink->audio_tee_asrc, - playsink->audio_sinkpad_stream_synchronizer, + gst_pad_link_full (playsink->audio_tee_asrc, sinkpad, GST_PAD_LINK_CHECK_NOTHING); gst_pad_link_full (playsink->audio_srcpad_stream_synchronizer, playsink->audiochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); @@ -3554,12 +3576,15 @@ playsink->audio_sinkpad_stream_synchronizer = NULL; gst_object_unref (playsink->audio_srcpad_stream_synchronizer); playsink->audio_srcpad_stream_synchronizer = NULL; + + gst_play_sink_remove_audio_ssync_queue (playsink); } if (playsink->audiochain->sink_volume) { disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; - playsink->audiochain->mute = NULL; if (playsink->audiochain->ts_offset) gst_object_unref (playsink->audiochain->ts_offset); playsink->audiochain->ts_offset = NULL; @@ -3693,12 +3718,17 @@ GST_PAD_LINK_CHECK_NOTHING); gst_object_unref (srcpad); } else { - if (need_deinterlace) + if (need_deinterlace) { + gst_pad_unlink (playsink->videodeinterlacechain->srcpad, + playsink->videochain->sinkpad); gst_pad_link_full (playsink->videodeinterlacechain->srcpad, playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING); - else + } else { + gst_pad_unlink (playsink->video_srcpad_stream_synchronizer, + playsink->videochain->sinkpad); gst_pad_link_full (playsink->video_srcpad_stream_synchronizer, playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING); + } } gst_pad_link_full (playsink->textchain->srcpad, playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); @@ -4362,15 +4392,12 @@ "tee"), (NULL)); res = NULL; break; - } else { - playsink->audio_tee_sink = - gst_element_get_static_pad (playsink->audio_tee, "sink"); - gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_tee); - gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED); } - } else { - gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED); + playsink->audio_tee_sink = + gst_element_get_static_pad (playsink->audio_tee, "sink"); + gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_tee); } + gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED); if (!playsink->audio_pad) { GST_LOG_OBJECT (playsink, "ghosting tee sinkpad"); playsink->audio_pad = @@ -4742,8 +4769,10 @@ ret = GST_STATE_CHANGE_ASYNC; /* block all pads here */ - if (!gst_play_sink_reconfigure (playsink)) + if (!gst_play_sink_reconfigure (playsink)) { ret = GST_STATE_CHANGE_FAILURE; + goto activate_failed; + } break; case GST_STATE_CHANGE_PAUSED_TO_READY: /* unblock all pads here */ @@ -4760,11 +4789,12 @@ /* fall through */ case GST_STATE_CHANGE_READY_TO_NULL: if (playsink->audiochain && playsink->audiochain->sink_volume) { - /* remove our links to the mute and volume elements when they were + /* remove our links to the volume elements when they were * provided by a sink */ disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; - playsink->audiochain->mute = NULL; } if (playsink->audiochain && playsink->audiochain->ts_offset) { @@ -4849,6 +4879,8 @@ playsink->audio_sinkpad_stream_synchronizer = NULL; gst_object_unref (playsink->audio_srcpad_stream_synchronizer); playsink->audio_srcpad_stream_synchronizer = NULL; + + gst_play_sink_remove_audio_ssync_queue (playsink); } if (playsink->text_sinkpad_stream_synchronizer) { gst_element_release_request_pad (GST_ELEMENT_CAST @@ -4929,6 +4961,7 @@ { GST_DEBUG_OBJECT (element, "element failed to change states -- activation problem?"); + do_async_done (playsink); return GST_STATE_CHANGE_FAILURE; } } @@ -5260,7 +5293,7 @@ channels = gst_color_balance_list_channels (balance_element); for (k = channels; k; k = k->next) { - GstColorBalanceChannel *tmp = l->data; + GstColorBalanceChannel *tmp = k->data; if (g_strrstr (tmp->label, proxy->label)) { channel = tmp; diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstplaysinkconvertbin.c gst-plugins-base1.0-1.6.1/gst/playback/gstplaysinkconvertbin.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstplaysinkconvertbin.c 2014-08-26 06:40:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstplaysinkconvertbin.c 2015-10-22 08:01:34.000000000 +0000 @@ -32,7 +32,7 @@ #define parent_class gst_play_sink_convert_bin_parent_class -static gboolean gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin * +static void gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin * self, GstCaps * caps); G_DEFINE_TYPE (GstPlaySinkConvertBin, gst_play_sink_convert_bin, GST_TYPE_BIN); @@ -250,7 +250,7 @@ GstCaps *caps; gst_event_parse_caps (event, &caps); - ret = gst_play_sink_convert_bin_sink_setcaps (self, caps); + gst_play_sink_convert_bin_sink_setcaps (self, caps); break; } default: @@ -283,7 +283,7 @@ } } -static gboolean +static void gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin * self, GstCaps * caps) { @@ -292,7 +292,8 @@ gboolean reconfigure = FALSE; gboolean raw; - GST_DEBUG_OBJECT (self, "setcaps"); + GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps); + GST_PLAY_SINK_CONVERT_BIN_LOCK (self); s = gst_caps_get_structure (caps, 0); name = gst_structure_get_name (s); @@ -338,10 +339,6 @@ } GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self); - - GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps); - - return TRUE; } #define GST_PLAY_SINK_CONVERT_BIN_FILTER_CAPS(filter,caps) G_STMT_START { \ @@ -353,6 +350,42 @@ } \ } G_STMT_END +static gboolean +gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps) +{ + GstPlaySinkConvertBin *self = + GST_PLAY_SINK_CONVERT_BIN (gst_pad_get_parent (pad)); + gboolean ret; + GstPad *otherpad; + + GST_PLAY_SINK_CONVERT_BIN_LOCK (self); + if (pad == self->srcpad) { + otherpad = self->sinkpad; + } else if (pad == self->sinkpad) { + otherpad = self->srcpad; + } else { + GST_ERROR_OBJECT (pad, "Not one of our pads"); + otherpad = NULL; + } + + if (otherpad) { + ret = gst_pad_peer_query_accept_caps (otherpad, caps); + if (!ret && self->converter_caps) { + /* maybe we can convert */ + ret = gst_caps_can_intersect (caps, self->converter_caps); + } + } else { + ret = TRUE; + } + GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self); + + gst_object_unref (self); + + GST_DEBUG_OBJECT (pad, "Accept caps: '%" GST_PTR_FORMAT "' %d", caps, ret); + + return ret; +} + static GstCaps * gst_play_sink_convert_bin_getcaps (GstPad * pad, GstCaps * filter) { @@ -460,35 +493,12 @@ } static gboolean -gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps) -{ - GstCaps *allowed_caps; - gboolean ret; - - allowed_caps = gst_pad_query_caps (pad, NULL); - ret = gst_caps_is_subset (caps, allowed_caps); - gst_caps_unref (allowed_caps); - - return ret; -} - -static gboolean gst_play_sink_convert_bin_query (GstPad * pad, GstObject * parent, GstQuery * query) { gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_ACCEPT_CAPS: - { - GstCaps *caps; - - gst_query_parse_accept_caps (query, &caps); - gst_query_set_accept_caps_result (query, - gst_play_sink_convert_bin_acceptcaps (pad, caps)); - res = TRUE; - break; - } case GST_QUERY_CAPS: { GstCaps *filter, *caps; @@ -500,6 +510,17 @@ res = TRUE; break; } + case GST_QUERY_ACCEPT_CAPS: + { + gboolean ret; + GstCaps *caps; + + gst_query_parse_accept_caps (query, &caps); + ret = gst_play_sink_convert_bin_acceptcaps (pad, caps); + gst_query_set_accept_caps_result (query, ret); + res = TRUE; + break; + } default: res = gst_pad_query_default (pad, parent, query); break; diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gststreamsynchronizer.c gst-plugins-base1.0-1.6.1/gst/playback/gststreamsynchronizer.c --- gst-plugins-base1.0-1.4.3/gst/playback/gststreamsynchronizer.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gststreamsynchronizer.c 2015-10-22 08:01:34.000000000 +0000 @@ -65,10 +65,13 @@ GstSegment segment; gboolean wait; /* TRUE if waiting/blocking */ - gboolean new_stream; - gboolean drop_discont; gboolean is_eos; /* TRUE if EOS was received */ + gboolean eos_sent; /* when EOS was sent downstream */ + gboolean flushing; /* set after flush-start and before flush-stop */ gboolean seen_data; + GstClockTime gap_duration; + + GstStreamFlags flags; GCond stream_finish_cond; @@ -203,6 +206,64 @@ return ret; } +/* must be called with the STREAM_SYNCHRONIZER_LOCK */ +static gboolean +gst_stream_synchronizer_wait (GstStreamSynchronizer * self, GstPad * pad) +{ + gboolean ret = FALSE; + GstStream *stream; + + while (!self->eos && !self->flushing) { + stream = gst_pad_get_element_private (pad); + if (!stream) { + GST_WARNING_OBJECT (pad, "unknown stream"); + return ret; + } + if (stream->flushing) { + GST_DEBUG_OBJECT (pad, "Flushing"); + break; + } + if (!stream->wait) { + GST_DEBUG_OBJECT (pad, "Stream not waiting anymore"); + break; + } + + if (self->send_gap_event) { + GstEvent *event; + + if (!GST_CLOCK_TIME_IS_VALID (stream->segment.position)) { + GST_WARNING_OBJECT (pad, "Have no position and can't send GAP event"); + self->send_gap_event = FALSE; + continue; + } + + event = + gst_event_new_gap (stream->segment.position, stream->gap_duration); + GST_DEBUG_OBJECT (pad, + "Send GAP event, position: %" GST_TIME_FORMAT " duration: %" + GST_TIME_FORMAT, GST_TIME_ARGS (stream->segment.position), + GST_TIME_ARGS (stream->gap_duration)); + + /* drop lock when sending GAP event, which may block in e.g. preroll */ + GST_STREAM_SYNCHRONIZER_UNLOCK (self); + ret = gst_pad_push_event (pad, event); + GST_STREAM_SYNCHRONIZER_LOCK (self); + if (!ret) { + return ret; + } + self->send_gap_event = FALSE; + + /* force a check on the loop conditions as we unlocked a + * few lines above and those variables could have changed */ + continue; + } + + g_cond_wait (&stream->stream_finish_cond, &self->lock); + } + + return TRUE; +} + /* sinkpad functions */ static gboolean gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, @@ -239,12 +300,15 @@ break; } + gst_event_parse_stream_flags (event, &stream->flags); + if ((have_group_id && stream->group_id != group_id) || (!have_group_id && stream->stream_start_seqnum != seqnum)) { stream->is_eos = FALSE; + stream->eos_sent = FALSE; + stream->flushing = FALSE; stream->stream_start_seqnum = seqnum; stream->group_id = group_id; - stream->drop_discont = TRUE; if (!have_group_id) { /* Check if this belongs to a stream that is already there, @@ -264,7 +328,6 @@ "Stream %d belongs to running stream %d, no waiting", stream->stream_number, ostream->stream_number); stream->wait = FALSE; - stream->new_stream = FALSE; GST_STREAM_SYNCHRONIZER_UNLOCK (self); break; @@ -279,13 +342,13 @@ GST_DEBUG_OBJECT (pad, "Stream %d changed", stream->stream_number); stream->wait = TRUE; - stream->new_stream = TRUE; for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; - all_wait = all_wait && ostream->wait && (!have_group_id - || ostream->group_id == group_id); + all_wait = all_wait && ((ostream->flags & GST_STREAM_FLAG_SPARSE) + || (ostream->wait && (!have_group_id + || ostream->group_id == group_id))); if (!all_wait) break; } @@ -316,19 +379,26 @@ position_running_time = gst_segment_to_running_time (&ostream->segment, GST_FORMAT_TIME, ostream->segment.position); - position = - MAX (position, MAX (stop_running_time, - position_running_time)); + + position_running_time = + MAX (position_running_time, stop_running_time); + position_running_time -= + gst_segment_to_running_time (&ostream->segment, + GST_FORMAT_TIME, ostream->segment.start); + position_running_time = MAX (0, position_running_time); + + position = MAX (position, position_running_time); } } - position = MAX (0, position); - self->group_start_time = MAX (self->group_start_time, position); + + self->group_start_time += position; GST_DEBUG_OBJECT (self, "New group start time: %" GST_TIME_FORMAT, GST_TIME_ARGS (self->group_start_time)); for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; + ostream->wait = FALSE; g_cond_broadcast (&ostream->stream_finish_cond); } } @@ -344,16 +414,8 @@ gst_event_copy_segment (event, &segment); GST_STREAM_SYNCHRONIZER_LOCK (self); - stream = gst_pad_get_element_private (pad); - if (stream) { - if (stream->wait) { - GST_DEBUG_OBJECT (pad, "Stream %d is waiting", stream->stream_number); - g_cond_wait (&stream->stream_finish_cond, &self->lock); - stream = gst_pad_get_element_private (pad); - if (stream) - stream->wait = FALSE; - } - } + + gst_stream_synchronizer_wait (self, pad); if (self->shutdown) { GST_STREAM_SYNCHRONIZER_UNLOCK (self); @@ -361,11 +423,13 @@ goto done; } + stream = gst_pad_get_element_private (pad); if (stream && segment.format == GST_FORMAT_TIME) { - if (stream->new_stream) { - stream->new_stream = FALSE; - segment.base = self->group_start_time; - } + GST_DEBUG_OBJECT (pad, + "New stream, updating base from %" GST_TIME_FORMAT " to %" + GST_TIME_FORMAT, GST_TIME_ARGS (segment.base), + GST_TIME_ARGS (segment.base + self->group_start_time)); + segment.base += self->group_start_time; GST_DEBUG_OBJECT (pad, "Segment was: %" GST_SEGMENT_FORMAT, &stream->segment); @@ -397,8 +461,10 @@ GST_STREAM_SYNCHRONIZER_LOCK (self); stream = gst_pad_get_element_private (pad); + self->eos = FALSE; if (stream) { GST_DEBUG_OBJECT (pad, "Flushing streams"); + stream->flushing = TRUE; g_cond_broadcast (&stream->stream_finish_cond); } GST_STREAM_SYNCHRONIZER_UNLOCK (self); @@ -406,6 +472,8 @@ } case GST_EVENT_FLUSH_STOP:{ GstStream *stream; + GList *l; + GstClockTime new_group_start_time = 0; GST_STREAM_SYNCHRONIZER_LOCK (self); stream = gst_pad_get_element_private (pad); @@ -415,15 +483,55 @@ gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED); stream->is_eos = FALSE; + stream->eos_sent = FALSE; + stream->flushing = FALSE; stream->wait = FALSE; - stream->new_stream = FALSE; - stream->drop_discont = FALSE; - stream->seen_data = FALSE; g_cond_broadcast (&stream->stream_finish_cond); } + + for (l = self->streams; l; l = l->next) { + GstStream *ostream = l->data; + GstClockTime start_running_time; + + if (ostream == stream) + continue; + + if (ostream->segment.format == GST_FORMAT_TIME) { + start_running_time = + gst_segment_to_running_time (&ostream->segment, + GST_FORMAT_TIME, ostream->segment.start); + + new_group_start_time = MAX (new_group_start_time, start_running_time); + } + } + + GST_DEBUG_OBJECT (pad, + "Updating group start time from %" GST_TIME_FORMAT " to %" + GST_TIME_FORMAT, GST_TIME_ARGS (self->group_start_time), + GST_TIME_ARGS (new_group_start_time)); + self->group_start_time = new_group_start_time; GST_STREAM_SYNCHRONIZER_UNLOCK (self); break; } + /* unblocking EOS wait when track switch. */ + case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:{ + if (gst_event_has_name (event, "playsink-custom-video-flush") + || gst_event_has_name (event, "playsink-custom-audio-flush") + || gst_event_has_name (event, "playsink-custom-subtitle-flush")) { + GstStream *stream; + + GST_STREAM_SYNCHRONIZER_LOCK (self); + stream = gst_pad_get_element_private (pad); + if (stream) { + stream->is_eos = FALSE; + stream->eos_sent = FALSE; + stream->wait = FALSE; + g_cond_broadcast (&stream->stream_finish_cond); + } + GST_STREAM_SYNCHRONIZER_UNLOCK (self); + } + break; + } case GST_EVENT_EOS:{ GstStream *stream; GList *l; @@ -454,6 +562,8 @@ else timestamp = stream->segment.stop; + stream->segment.position = timestamp; + for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; @@ -464,6 +574,7 @@ if (all_eos) { GST_DEBUG_OBJECT (self, "All streams are EOS -- forwarding"); + self->eos = TRUE; for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; /* local snapshot of current pads */ @@ -471,41 +582,54 @@ pads = g_slist_prepend (pads, ostream->srcpad); } } - GST_STREAM_SYNCHRONIZER_UNLOCK (self); - /* drop lock when sending eos, which may block in e.g. preroll */ if (pads) { GstPad *pad; GSList *epad; + GstStream *ostream; ret = TRUE; epad = pads; while (epad) { pad = epad->data; - GST_DEBUG_OBJECT (pad, "Pushing EOS"); - ret = ret && gst_pad_push_event (pad, gst_event_new_eos ()); + ostream = gst_pad_get_element_private (pad); + if (ostream) { + g_cond_broadcast (&ostream->stream_finish_cond); + } + gst_object_unref (pad); epad = g_slist_next (epad); } g_slist_free (pads); } else { - /* if EOS, but no data has passed, then send something to replace EOS - * for preroll purposes */ - if (!seen_data) { - GstEvent *gap_event; - - gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE); - ret = gst_pad_push_event (srcpad, gap_event); - } else { - GstEvent *gap_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); + if (seen_data) { + self->send_gap_event = TRUE; + stream->gap_duration = GST_CLOCK_TIME_NONE; + stream->wait = TRUE; + ret = gst_stream_synchronizer_wait (self, srcpad); } } + + /* send eos if haven't seen data. seen_data will be true if data buffer + * of the track have received in anytime. sink is ready if seen_data is + * true, so can send GAP event. Will send EOS if sink isn't ready. The + * scenario for the case is one track haven't any media data and then + * send EOS. Or no any valid media data in one track, so decoder can't + * get valid CAPS for the track. sink can't ready without received CAPS.*/ + if (!seen_data || self->eos) { + GST_DEBUG_OBJECT (pad, "send EOS event"); + /* drop lock when sending eos, which may block in e.g. preroll */ + GST_STREAM_SYNCHRONIZER_UNLOCK (self); + ret = gst_pad_push_event (srcpad, gst_event_new_eos ()); + GST_STREAM_SYNCHRONIZER_LOCK (self); + stream = gst_pad_get_element_private (pad); + if (stream) { + stream->eos_sent = TRUE; + } + } + gst_object_unref (srcpad); gst_event_unref (event); + GST_STREAM_SYNCHRONIZER_UNLOCK (self); goto done; } default: @@ -550,15 +674,6 @@ if (stream) { stream->seen_data = TRUE; - if (stream->drop_discont) { - if (GST_BUFFER_IS_DISCONT (buffer)) { - GST_DEBUG_OBJECT (pad, "removing DISCONT from buffer %p", buffer); - buffer = gst_buffer_make_writable (buffer); - GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT); - } - stream->drop_discont = FALSE; - } - if (stream->segment.format == GST_FORMAT_TIME && GST_CLOCK_TIME_IS_VALID (timestamp)) { GST_LOG_OBJECT (pad, @@ -611,7 +726,8 @@ GstStream *ostream = l->data; gint64 position; - if (!ostream->is_eos || ostream->segment.format != GST_FORMAT_TIME) + if (!ostream->is_eos || ostream->eos_sent || + ostream->segment.format != GST_FORMAT_TIME) continue; if (ostream->segment.position != -1) @@ -633,8 +749,9 @@ ostream->segment.position = new_start; - gst_pad_push_event (ostream->srcpad, - gst_event_new_gap (position, new_start - position)); + self->send_gap_event = TRUE; + ostream->gap_duration = new_start - position; + g_cond_broadcast (&ostream->stream_finish_cond); } } GST_STREAM_SYNCHRONIZER_UNLOCK (self); @@ -663,6 +780,7 @@ stream->stream_start_seqnum = G_MAXUINT32; stream->segment_seqnum = G_MAXUINT32; stream->group_id = G_MAXUINT; + stream->seen_data = FALSE; tmp = g_strdup_printf ("sink_%u", self->current_stream_number); stream->sinkpad = gst_pad_new_from_static_template (&sinktemplate, tmp); @@ -742,28 +860,6 @@ gst_pad_set_active (stream->sinkpad, FALSE); gst_element_remove_pad (GST_ELEMENT_CAST (self), stream->sinkpad); - if (stream->segment.format == GST_FORMAT_TIME) { - gint64 stop_running_time; - gint64 position_running_time; - - stop_running_time = - gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME, - stream->segment.stop); - position_running_time = - gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME, - stream->segment.position); - stop_running_time = MAX (stop_running_time, position_running_time); - - if (stop_running_time > self->group_start_time) { - GST_DEBUG_OBJECT (stream->sinkpad, - "Updating global start running time from %" GST_TIME_FORMAT " to %" - GST_TIME_FORMAT, GST_TIME_ARGS (self->group_start_time), - GST_TIME_ARGS (stop_running_time)); - - self->group_start_time = stop_running_time; - } - } - g_cond_clear (&stream->stream_finish_cond); g_slice_free (GstStream, stream); @@ -807,6 +903,7 @@ case GST_STATE_CHANGE_NULL_TO_READY: GST_DEBUG_OBJECT (self, "State change NULL->READY"); self->shutdown = FALSE; + self->send_gap_event = FALSE; break; case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG_OBJECT (self, "State change READY->PAUSED"); @@ -814,18 +911,21 @@ self->have_group_id = TRUE; self->group_id = G_MAXUINT; self->shutdown = FALSE; + self->flushing = FALSE; + self->eos = FALSE; break; case GST_STATE_CHANGE_PAUSED_TO_READY:{ GList *l; - GST_DEBUG_OBJECT (self, "State change READY->NULL"); + GST_DEBUG_OBJECT (self, "State change PAUSED->READY"); GST_STREAM_SYNCHRONIZER_LOCK (self); + self->flushing = TRUE; + self->shutdown = TRUE; for (l = self->streams; l; l = l->next) { GstStream *ostream = l->data; g_cond_broadcast (&ostream->stream_finish_cond); } - self->shutdown = TRUE; GST_STREAM_SYNCHRONIZER_UNLOCK (self); } default: @@ -838,6 +938,26 @@ return ret; switch (transition) { + case GST_STATE_CHANGE_PLAYING_TO_PAUSED:{ + GList *l; + + GST_DEBUG_OBJECT (self, "State change PLAYING->PAUSED"); + + GST_STREAM_SYNCHRONIZER_LOCK (self); + for (l = self->streams; l; l = l->next) { + GstStream *stream = l->data; + /* send GAP event to sink to finished pre-roll. The reason is function + * chain () will be blocked on pad_push (), so can't trigger the track + * which reach EOS to send GAP event. */ + if (stream->is_eos && !stream->eos_sent) { + self->send_gap_event = TRUE; + stream->gap_duration = GST_CLOCK_TIME_NONE; + g_cond_broadcast (&stream->stream_finish_cond); + } + } + GST_STREAM_SYNCHRONIZER_UNLOCK (self); + break; + } case GST_STATE_CHANGE_PAUSED_TO_READY:{ GList *l; @@ -845,14 +965,16 @@ self->group_start_time = 0; GST_STREAM_SYNCHRONIZER_LOCK (self); + self->send_gap_event = FALSE; for (l = self->streams; l; l = l->next) { GstStream *stream = l->data; gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED); + stream->gap_duration = GST_CLOCK_TIME_NONE; stream->wait = FALSE; - stream->new_stream = FALSE; - stream->drop_discont = FALSE; stream->is_eos = FALSE; + stream->eos_sent = FALSE; + stream->flushing = FALSE; } GST_STREAM_SYNCHRONIZER_UNLOCK (self); break; diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gststreamsynchronizer.h gst-plugins-base1.0-1.6.1/gst/playback/gststreamsynchronizer.h --- gst-plugins-base1.0-1.4.3/gst/playback/gststreamsynchronizer.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gststreamsynchronizer.h 2015-10-22 08:01:34.000000000 +0000 @@ -47,6 +47,9 @@ /* < private > */ GMutex lock; gboolean shutdown; + gboolean send_gap_event; + gboolean eos; + gboolean flushing; GList *streams; guint current_stream_number; diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gstsubtitleoverlay.c gst-plugins-base1.0-1.6.1/gst/playback/gstsubtitleoverlay.c --- gst-plugins-base1.0-1.4.3/gst/playback/gstsubtitleoverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gstsubtitleoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,8 +29,8 @@ * * Examples * |[ - * gst-launch -v filesrc location=test.mkv ! matroskademux name=demux ! "video/x-h264" ! queue2 ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink demux. ! "subpicture/x-dvd" ! queue2 ! overlay. - * ]| This will play back the given Matroska file with h264 video and subpicture subtitles. + * gst-launch-1.0 -v filesrc location=test.mkv ! matroskademux name=demux ! video/x-h264 ! queue ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink demux. ! subpicture/x-dvd ! queue ! overlay. + * ]| This will play back the given Matroska file with h264 video and dvd subpicture style subtitles. * */ @@ -239,7 +239,7 @@ caps = gst_pad_query_caps (pad, NULL); } - for (i = 0; i < gst_caps_get_size (caps) && ret == FALSE; i++) { + for (i = 0; i < gst_caps_get_size (caps) && !ret; i++) { name = gst_structure_get_name (gst_caps_get_structure (caps, i)); if (g_str_equal (name, "video/x-raw")) { ret = TRUE; @@ -1333,8 +1333,11 @@ bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); GST_DEBUG_OBJECT (self, "Base class state changed returned: %d", bret); - if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE)) + if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE)) { + do_async_done (self); return ret; + } + else if (bret == GST_STATE_CHANGE_ASYNC) ret = bret; else if (G_UNLIKELY (bret == GST_STATE_CHANGE_NO_PREROLL)) { @@ -1405,11 +1408,11 @@ * warnings and switch to passthrough mode */ if (src && ( (self->overlay - && gst_object_has_ancestor (src, + && gst_object_has_as_ancestor (src, GST_OBJECT_CAST (self->overlay))) || (self->parser - && gst_object_has_ancestor (src, + && gst_object_has_as_ancestor (src, GST_OBJECT_CAST (self->parser))) || (self->renderer - && gst_object_has_ancestor (src, + && gst_object_has_as_ancestor (src, GST_OBJECT_CAST (self->renderer))))) { GError *err = NULL; gchar *debug = NULL; @@ -1778,12 +1781,15 @@ static GstCaps * gst_subtitle_overlay_subtitle_sink_getcaps (GstPad * pad, GstCaps * filter) { - GstCaps *ret; + GstCaps *ret, *subcaps; - if (filter) - ret = gst_caps_ref (filter); - else - ret = gst_caps_new_any (); + subcaps = gst_subtitle_overlay_create_factory_caps (); + if (filter) { + ret = gst_caps_intersect_full (filter, subcaps, GST_CAPS_INTERSECT_FIRST); + gst_caps_unref (subcaps); + } else { + ret = subcaps; + } return ret; } @@ -1793,7 +1799,7 @@ GstCaps * caps) { gboolean ret = TRUE; - GstPad *target = NULL;; + GstPad *target = NULL; GST_DEBUG_OBJECT (self, "Setting caps: %" GST_PTR_FORMAT, caps); diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/gsturidecodebin.c gst-plugins-base1.0-1.6.1/gst/playback/gsturidecodebin.c --- gst-plugins-base1.0-1.4.3/gst/playback/gsturidecodebin.c 2014-07-21 08:35:58.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/gsturidecodebin.c 2015-10-22 08:01:34.000000000 +0000 @@ -110,6 +110,7 @@ guint src_np_sig_id; /* new-pad signal id */ guint src_nmp_sig_id; /* no-more-pads signal id */ gint pending; + GList *missing_plugin_errors; gboolean async_pending; /* async-start has been emitted */ @@ -196,8 +197,7 @@ PROP_DOWNLOAD, PROP_USE_BUFFERING, PROP_EXPOSE_ALL_STREAMS, - PROP_RING_BUFFER_MAX_SIZE, - PROP_LAST + PROP_RING_BUFFER_MAX_SIZE }; static guint gst_uri_decode_bin_signals[LAST_SIGNAL] = { 0 }; @@ -986,11 +986,33 @@ * decodebins had missing plugins for all of their streams! */ if (!decoder->streams || g_hash_table_size (decoder->streams) == 0) { - GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), - ("no suitable plugins found")); + if (decoder->missing_plugin_errors) { + GString *str = g_string_new (""); + GList *l; + + for (l = decoder->missing_plugin_errors; l; l = l->next) { + GstMessage *msg = l->data; + gchar *debug; + + gst_message_parse_error (msg, NULL, &debug); + g_string_append (str, debug); + g_free (debug); + gst_message_unref (msg); + } + g_list_free (decoder->missing_plugin_errors); + decoder->missing_plugin_errors = NULL; + + GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), + ("no suitable plugins found:\n%s", str->str)); + g_string_free (str, TRUE); + } else { + GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), + ("no suitable plugins found")); + } } else { gst_element_no_more_pads (GST_ELEMENT_CAST (decoder)); } + do_async_done (decoder); } return; @@ -1266,7 +1288,7 @@ /* media types that use adaptive streaming */ static const gchar *adaptive_media[] = { - "application/x-hls", "application/x-smoothstreaming-manifest", + "application/x-hls", "application/vnd.ms-sstr+xml", "application/dash+xml", NULL }; @@ -1321,17 +1343,6 @@ source_class = G_OBJECT_GET_CLASS (source); - /* make HTTP sources send extra headers so we get icecast - * metadata in case the stream is an icecast stream */ - if (!strncmp (decoder->uri, "http://", 7)) { - pspec = g_object_class_find_property (source_class, "iradio-mode"); - - if (pspec && G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_STRING) { - GST_LOG_OBJECT (decoder, "configuring iradio-mode"); - g_object_set (source, "iradio-mode", TRUE, NULL); - } - } - pspec = g_object_class_find_property (source_class, "connection-speed"); if (pspec != NULL) { guint64 speed = decoder->connection_speed / 1000; @@ -1361,7 +1372,7 @@ wrong_type = TRUE; } - if (wrong_type == FALSE) { + if (!wrong_type) { g_object_set (source, "connection-speed", speed, NULL); GST_DEBUG_OBJECT (decoder, @@ -1478,6 +1489,7 @@ GST_ELEMENT_ERROR (dec, CORE, MISSING_PLUGIN, (_("Missing element '%s' - check your GStreamer installation."), element_name), (NULL)); + do_async_done (GST_URI_DECODE_BIN (dec)); } /** @@ -1870,6 +1882,7 @@ post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "decodebin"); GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), ("No decodebin element, check your installation")); + do_async_done (decoder); return NULL; } no_typefind: @@ -1877,6 +1890,7 @@ gst_object_unref (decodebin); GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), ("No typefind element, decodebin is unusable, check your installation")); + do_async_done (decoder); return NULL; } } @@ -1981,11 +1995,9 @@ /* PLAYING in one go might fail (see bug #632782) */ gst_element_set_state (dec_elem, GST_STATE_PAUSED); - gst_element_set_state (dec_elem, GST_STATE_PLAYING); + gst_element_sync_state_with_parent (dec_elem); if (queue) - gst_element_set_state (queue, GST_STATE_PLAYING); - - do_async_done (decoder); + gst_element_sync_state_with_parent (queue); return; @@ -1999,6 +2011,7 @@ { GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION, (NULL), ("Can't link typefind to decodebin element")); + do_async_done (decoder); return; } no_buffer_element: @@ -2034,8 +2047,6 @@ g_signal_connect (decoder->typefind, "have-type", G_CALLBACK (type_found), decoder); - do_async_start (decoder); - return TRUE; /* ERRORS */ @@ -2044,6 +2055,7 @@ post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "typefind"); GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL), ("No typefind element, check your installation")); + do_async_done (decoder); return FALSE; } could_not_link: @@ -2053,6 +2065,7 @@ gst_bin_remove (GST_BIN_CAST (decoder), typefind); /* Don't loose the SOURCE flag */ GST_OBJECT_FLAG_SET (decoder, GST_ELEMENT_FLAG_SOURCE); + do_async_done (decoder); return FALSE; } } @@ -2141,7 +2154,7 @@ GST_DEBUG_OBJECT (bin, "linked decoder to new pad"); - gst_element_set_state (decoder, GST_STATE_PLAYING); + gst_element_sync_state_with_parent (decoder); GST_URI_DECODE_BIN_UNLOCK (bin); return; @@ -2158,6 +2171,7 @@ GST_ELEMENT_ERROR (bin, CORE, NEGOTIATION, (NULL), ("Can't link source to decoder element")); GST_URI_DECODE_BIN_UNLOCK (bin); + do_async_done (bin); return; } } @@ -2230,6 +2244,7 @@ /* source provides raw data, we added the pads and we can now signal a * no_more pads because we are done. */ gst_element_no_more_pads (GST_ELEMENT_CAST (decoder)); + do_async_done (decoder); return TRUE; } if (!have_out && !is_dynamic) { @@ -2395,6 +2410,8 @@ static void handle_message (GstBin * bin, GstMessage * msg) { + GstURIDecodeBin *dec = GST_URI_DECODE_BIN (bin); + switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_ELEMENT:{ if (gst_message_has_name (msg, "redirect")) { @@ -2402,7 +2419,7 @@ * the user of this element as it can in most cases just pick the first item * of the sorted list as a good redirection candidate. It can of course * choose something else from the list if it has a better way. */ - msg = handle_redirect_message (GST_URI_DECODE_BIN (bin), msg); + msg = handle_redirect_message (dec, msg); } break; } @@ -2417,6 +2434,9 @@ if (g_error_matches (err, GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN) || g_error_matches (err, GST_STREAM_ERROR, GST_STREAM_ERROR_CODEC_NOT_FOUND)) { + dec->missing_plugin_errors = + g_list_prepend (dec->missing_plugin_errors, gst_message_ref (msg)); + no_more_pads_full (GST_ELEMENT (GST_MESSAGE_SRC (msg)), FALSE, GST_URI_DECODE_BIN (bin)); gst_message_unref (msg); @@ -2535,24 +2555,27 @@ GstClockTime min, max; gboolean live; - g_value_set_boolean (ret, TRUE); - gst_query_parse_latency (fold->query, &live, &min, &max); - GST_DEBUG_OBJECT (item, + GST_DEBUG_OBJECT (pad, "got latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live); - /* for the combined latency we collect the MAX of all min latencies and - * the MIN of all max latencies */ - if (min > fold->min) - fold->min = min; - if (fold->max == -1) - fold->max = max; - else if (max < fold->max) - fold->max = max; - if (fold->live == FALSE) - fold->live = live; + if (live) { + /* for the combined latency we collect the MAX of all min latencies and + * the MIN of all max latencies */ + if (min > fold->min) + fold->min = min; + if (fold->max == -1) + fold->max = max; + else if (max < fold->max) + fold->max = max; + + fold->live = TRUE; + } + } else { + GST_LOG_OBJECT (pad, "latency query failed"); + g_value_set_boolean (ret, FALSE); } return TRUE; @@ -2584,7 +2607,7 @@ GST_DEBUG_OBJECT (item, "got seekable %d", seekable); - if (fold->seekable == TRUE) + if (fold->seekable) fold->seekable = seekable; } @@ -2633,6 +2656,7 @@ QueryDoneFunction fold_done = NULL; QueryFold fold_data; GValue ret = { 0 }; + gboolean default_ret = FALSE; decoder = GST_URI_DECODE_BIN (element); @@ -2654,6 +2678,7 @@ fold_func = (GstIteratorFoldFunction) decoder_query_latency_fold; fold_init = decoder_query_init; fold_done = decoder_query_latency_done; + default_ret = TRUE; break; case GST_QUERY_SEEKING: /* iterate and collect durations */ @@ -2669,7 +2694,7 @@ fold_data.query = query; g_value_init (&ret, G_TYPE_BOOLEAN); - g_value_set_boolean (&ret, FALSE); + g_value_set_boolean (&ret, default_ret); iter = gst_element_iterate_src_pads (element); GST_DEBUG_OBJECT (element, "Sending query %p (type %d) to src pads", @@ -2688,7 +2713,7 @@ gst_iterator_resync (iter); if (fold_init) fold_init (decoder, &fold_data); - g_value_set_boolean (&ret, FALSE); + g_value_set_boolean (&ret, default_ret); break; case GST_ITERATOR_OK: case GST_ITERATOR_DONE: @@ -2718,26 +2743,51 @@ switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: - if (!setup_source (decoder)) - goto source_failed; + do_async_start (decoder); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + if (ret == GST_STATE_CHANGE_FAILURE) + goto setup_failed; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG ("ready to paused"); + if (!setup_source (decoder)) + goto source_failed; + + ret = GST_STATE_CHANGE_ASYNC; + + /* And now sync the states of everything we added */ + g_slist_foreach (decoder->decodebins, + (GFunc) gst_element_sync_state_with_parent, NULL); + if (decoder->typefind) + ret = gst_element_set_state (decoder->typefind, GST_STATE_PAUSED); if (ret == GST_STATE_CHANGE_FAILURE) goto setup_failed; + if (decoder->queue) + ret = gst_element_set_state (decoder->queue, GST_STATE_PAUSED); + if (ret == GST_STATE_CHANGE_FAILURE) + goto setup_failed; + if (decoder->source) + ret = gst_element_set_state (decoder->source, GST_STATE_PAUSED); + if (ret == GST_STATE_CHANGE_FAILURE) + goto setup_failed; + if (ret == GST_STATE_CHANGE_SUCCESS) + ret = GST_STATE_CHANGE_ASYNC; + break; case GST_STATE_CHANGE_PAUSED_TO_READY: GST_DEBUG ("paused to ready"); remove_decoders (decoder, FALSE); remove_source (decoder); do_async_done (decoder); + g_list_free_full (decoder->missing_plugin_errors, + (GDestroyNotify) gst_message_unref); + decoder->missing_plugin_errors = NULL; break; case GST_STATE_CHANGE_READY_TO_NULL: GST_DEBUG ("ready to null"); @@ -2747,16 +2797,22 @@ default: break; } + + if (ret == GST_STATE_CHANGE_NO_PREROLL) + do_async_done (decoder); + return ret; /* ERRORS */ source_failed: { + do_async_done (decoder); return GST_STATE_CHANGE_FAILURE; } setup_failed: { /* clean up leftover groups */ + do_async_done (decoder); return GST_STATE_CHANGE_FAILURE; } } diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/Makefile.am gst-plugins-base1.0-1.6.1/gst/playback/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/playback/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -13,7 +13,8 @@ gstplaysinkvideoconvert.c \ gstplaysinkaudioconvert.c \ gstplaysinkconvertbin.c \ - gststreamsynchronizer.c + gststreamsynchronizer.c \ + gstplaybackutils.c nodist_libgstplayback_la_SOURCES = $(built_sources) libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags) @@ -34,23 +35,9 @@ gstplaysinkvideoconvert.h \ gstplaysinkaudioconvert.h \ gstplaysinkconvertbin.h \ - gststreamsynchronizer.h + gststreamsynchronizer.h \ + gstplaybackutils.h BUILT_SOURCES = $(built_headers) $(built_sources) CLEANFILES = $(BUILT_SOURCES) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstplayback -:SHARED libgstplayback \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstplayback_la_SOURCES) \ - $(nodist_libgstplayback_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \ - -:LDFLAGS $(libgstplayback_la_LDFLAGS) \ - $(libgstplayback_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/playback/Makefile.in gst-plugins-base1.0-1.6.1/gst/playback/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/playback/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/playback/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/playback -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -168,7 +177,8 @@ libgstplayback_la-gstplaysinkvideoconvert.lo \ libgstplayback_la-gstplaysinkaudioconvert.lo \ libgstplayback_la-gstplaysinkconvertbin.lo \ - libgstplayback_la-gststreamsynchronizer.lo + libgstplayback_la-gststreamsynchronizer.lo \ + libgstplayback_la-gstplaybackutils.lo nodist_libgstplayback_la_OBJECTS = libgstplayback_la_OBJECTS = $(am_libgstplayback_la_OBJECTS) \ $(nodist_libgstplayback_la_OBJECTS) @@ -242,6 +252,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -302,6 +313,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -331,6 +344,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -358,7 +373,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -373,6 +387,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -462,13 +477,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -521,6 +535,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -546,7 +561,8 @@ gstplaysinkvideoconvert.c \ gstplaysinkaudioconvert.c \ gstplaysinkconvertbin.c \ - gststreamsynchronizer.c + gststreamsynchronizer.c \ + gstplaybackutils.c nodist_libgstplayback_la_SOURCES = $(built_sources) libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags) @@ -567,7 +583,8 @@ gstplaysinkvideoconvert.h \ gstplaysinkaudioconvert.h \ gstplaysinkconvertbin.h \ - gststreamsynchronizer.h + gststreamsynchronizer.h \ + gstplaybackutils.h BUILT_SOURCES = $(built_headers) $(built_sources) CLEANFILES = $(BUILT_SOURCES) @@ -588,7 +605,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/playback/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/playback/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -654,6 +670,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstdecodebin2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplay-enum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplayback.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaybackutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaybin2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Plo@am__quote@ @@ -764,6 +781,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gststreamsynchronizer.lo `test -f 'gststreamsynchronizer.c' || echo '$(srcdir)/'`gststreamsynchronizer.c +libgstplayback_la-gstplaybackutils.lo: gstplaybackutils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaybackutils.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaybackutils.Tpo -c -o libgstplayback_la-gstplaybackutils.lo `test -f 'gstplaybackutils.c' || echo '$(srcdir)/'`gstplaybackutils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaybackutils.Tpo $(DEPDIR)/libgstplayback_la-gstplaybackutils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstplaybackutils.c' object='libgstplayback_la-gstplaybackutils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaybackutils.lo `test -f 'gstplaybackutils.c' || echo '$(srcdir)/'`gstplaybackutils.c + mostlyclean-libtool: -rm -f *.lo @@ -981,21 +1005,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstplayback -:SHARED libgstplayback \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstplayback_la_SOURCES) \ - $(nodist_libgstplayback_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \ - -:LDFLAGS $(libgstplayback_la_LDFLAGS) \ - $(libgstplayback_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/subparse/gstsubparse.c gst-plugins-base1.0-1.6.1/gst/subparse/gstsubparse.c --- gst-plugins-base1.0-1.4.3/gst/subparse/gstsubparse.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/subparse/gstsubparse.c 2015-10-22 08:01:34.000000000 +0000 @@ -135,7 +135,7 @@ "Subtitle parser", "Codec/Parser/Subtitle", "Parses subtitle (.sub) files into text streams", "Gustavo J. A. M. Carneiro , " - "GStreamer maintainers "); + "GStreamer maintainers "); element_class->change_state = gst_sub_parse_change_state; @@ -452,7 +452,7 @@ self->detected_encoding, err->message); g_free (self->detected_encoding); self->detected_encoding = NULL; - g_error_free (err); + g_clear_error (&err); } /* Otherwise check if it's UTF8 */ @@ -484,7 +484,7 @@ if (err) { GST_WARNING_OBJECT (self, "could not convert string from '%s' to UTF-8: %s", encoding, err->message); - g_error_free (err); + g_clear_error (&err); /* invalid input encoding, fall back to ISO-8859-15 (always succeeds) */ ret = gst_convert_to_utf8 (str, len, "ISO-8859-15", consumed, NULL); @@ -683,15 +683,24 @@ } for (pos = txt; pos != NULL && *pos != '\0'; ++pos) { - if (g_ascii_strncasecmp (pos, "</u>", 10) == 0 || - g_ascii_strncasecmp (pos, "</i>", 10) == 0 || - g_ascii_strncasecmp (pos, "</b>", 10) == 0) { + gchar *tag; + + /* look for start of an escaped closing tag */ + if (g_ascii_strncasecmp (pos, "</", 5) != 0) + continue; + tag = pos + 5; + while (*tag == ' ') + ++tag; + if ((*tag == 'u' || *tag == 'i' || *tag == 'b') && + g_ascii_strncasecmp (tag + 1, ">", 4) == 0) { + gsize tag_len = (guintptr) (tag + 1 + 4 - pos); + pos[0] = '<'; pos[1] = '/'; - pos[2] = g_ascii_tolower (pos[5]); + pos[2] = g_ascii_tolower (*tag); pos[3] = '>'; /* move NUL terminator as well */ - memmove (pos + 4, pos + 10, strlen (pos + 10) + 1); + memmove (pos + 4, pos + tag_len, strlen (pos + tag_len) + 1); pos += 3; } } @@ -1214,7 +1223,7 @@ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr); if (result == NULL) { g_warning ("Compilation of mdvd regex failed: %s", gerr->message); - g_error_free (gerr); + g_clear_error (&gerr); } break; case GST_SUB_PARSE_REGEX_SUBRIP: @@ -1225,7 +1234,7 @@ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr); if (result == NULL) { g_warning ("Compilation of subrip regex failed: %s", gerr->message); - g_error_free (gerr); + g_clear_error (&gerr); } break; case GST_SUB_PARSE_REGEX_DKS: @@ -1233,7 +1242,7 @@ G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr); if (result == NULL) { g_warning ("Compilation of dks regex failed: %s", gerr->message); - g_error_free (gerr); + g_clear_error (&gerr); } break; default: @@ -1275,15 +1284,15 @@ subrip_grx = (GRegex *) subrip_rx_once.retval; dks_grx = (GRegex *) dks_rx_once.retval; - if (g_regex_match (mdvd_grx, match_str, 0, NULL) == TRUE) { + if (g_regex_match (mdvd_grx, match_str, 0, NULL)) { GST_LOG ("MicroDVD (frame based) format detected"); return GST_SUB_PARSE_FORMAT_MDVDSUB; } - if (g_regex_match (subrip_grx, match_str, 0, NULL) == TRUE) { + if (g_regex_match (subrip_grx, match_str, 0, NULL)) { GST_LOG ("SubRip (time based) format detected"); return GST_SUB_PARSE_FORMAT_SUBRIP; } - if (g_regex_match (dks_grx, match_str, 0, NULL) == TRUE) { + if (g_regex_match (dks_grx, match_str, 0, NULL)) { GST_LOG ("DKS (time based) format detected"); return GST_SUB_PARSE_FORMAT_DKS; } @@ -1764,7 +1773,7 @@ if (converted_str == NULL) { GST_DEBUG ("Encoding '%s' detected but conversion failed: %s", encoding, err->message); - g_error_free (err); + g_clear_error (&err); } else { g_free (str); str = converted_str; diff -Nru gst-plugins-base1.0-1.4.3/gst/subparse/Makefile.in gst-plugins-base1.0-1.6.1/gst/subparse/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/subparse/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/subparse/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/subparse -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -232,6 +241,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -292,6 +302,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -321,6 +333,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -348,7 +362,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -363,6 +376,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -452,13 +466,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -511,6 +524,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -566,7 +580,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/subparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/subparse/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -915,6 +928,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstmultifdsink.c gst-plugins-base1.0-1.6.1/gst/tcp/gstmultifdsink.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gstmultifdsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstmultifdsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -153,8 +153,7 @@ enum { PROP_0, - PROP_HANDLE_READ, - PROP_LAST + PROP_HANDLE_READ }; static void gst_multi_fd_sink_stop_pre (GstMultiHandleSink * mhsink); diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstmultihandlesink.c gst-plugins-base1.0-1.6.1/gst/tcp/gstmultihandlesink.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gstmultihandlesink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstmultihandlesink.c 2015-10-22 08:01:34.000000000 +0000 @@ -194,9 +194,7 @@ PROP_RESEND_STREAMHEADER, - PROP_NUM_HANDLES, - - PROP_LAST + PROP_NUM_HANDLES }; GType @@ -677,6 +675,10 @@ if (clink != NULL) goto duplicate; + /* We do not take ownership of @handle in this function, but we can't take a + * reference directly as we don't know the concrete type of the handle. + * GstMultiHandleSink relies on the derived class to take a reference for us + * in new_client: */ mhclient = mhsinkclass->new_client (mhsink, handle, sync_method); /* we can add the handle now */ @@ -1907,7 +1909,7 @@ /* if we get IN_CAPS buffers, but the previous buffer was not IN_CAPS, * it means we're getting new streamheader buffers, and we should clear * the old ones */ - if (in_caps && sink->previous_buffer_in_caps == FALSE) { + if (in_caps && !sink->previous_buffer_in_caps) { GST_DEBUG_OBJECT (sink, "receiving new HEADER buffers, clearing old streamheader"); g_slist_foreach (sink->streamheader, (GFunc) gst_mini_object_unref, NULL); diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstmultisocketsink.c gst-plugins-base1.0-1.6.1/gst/tcp/gstmultisocketsink.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gstmultisocketsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstmultisocketsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -103,6 +103,7 @@ #endif #include +#include #include @@ -574,7 +575,7 @@ GST_DEBUG_OBJECT (sink, "%s client wants us to read", mhclient->debug); navail = g_socket_get_available_bytes (mhclient->handle.socket); - if (navail < 0) + if (navail <= 0) break; nread = @@ -600,6 +601,120 @@ return ret; } +/** + * map_memory_output_vector_n: + * @buf: The #GstBuffer that should be mapped + * @offset: Offset into the buffer that should be mapped + * @vectors: (out,array length=num_vectors): an array of #GOutputVector structs to write into + * @mapinfo: (out,array length=num_vectors): an array of #GstMapInfo structs to write into + * @num_vectors: the number of elements in @vectors to prevent buffer overruns + * + * Maps a buffer into memory, populating a #GOutputVector to use scatter-gather + * I/O to send the data over a socket. The whole buffer won't be mapped into + * memory if it consists of more than @num_vectors #GstMemory s. + * + * Use #unmap_n_memorys after you are + * finished with the mappings. + * + * Returns: The number of GstMemorys mapped + */ +static int +map_n_memory_output_vector (GstBuffer * buf, size_t offset, + GOutputVector * vectors, GstMapInfo * mapinfo, int num_vectors) +{ + guint mem_idx, mem_len; + gsize mem_skip; + size_t maxsize; + int i; + + g_return_val_if_fail (num_vectors > 0, 0); + memset (vectors, 0, sizeof (GOutputVector) * num_vectors); + + maxsize = gst_buffer_get_size (buf) - offset; + if (!gst_buffer_find_memory (buf, offset, maxsize, &mem_idx, &mem_len, + &mem_skip)) + g_error ("Unable to map memory at offset %" G_GSIZE_FORMAT ", buffer " + "length is %" G_GSIZE_FORMAT, offset, gst_buffer_get_size (buf)); + + for (i = 0; i < mem_len && i < num_vectors; i++) { + GstMapInfo map = { 0 }; + GstMemory *mem = gst_buffer_peek_memory (buf, mem_idx + i); + if (!gst_memory_map (mem, &map, GST_MAP_READ)) + g_error ("Unable to map memory %p. This should never happen.", mem); + + if (i == 0) { + vectors[i].buffer = map.data + mem_skip; + vectors[i].size = map.size - mem_skip; + } else { + vectors[i].buffer = map.data; + vectors[i].size = map.size; + } + mapinfo[i] = map; + } + return i; +} + +/** + * map_n_memory_output_vector: + * @buf: The #GstBuffer that should be mapped + * @offset: Offset into the buffer that should be mapped + * @vectors: (out,array length=num_vectors): an array of #GOutputVector structs to write into + * @num_vectors: the number of elements in @vectors to prevent buffer overruns + * + * Returns: The number of GstMemorys mapped + */ +static void +unmap_n_memorys (GstMapInfo * mapinfo, int num_mappings) +{ + int i; + g_return_if_fail (num_mappings > 0); + + for (i = 0; i < num_mappings; i++) + gst_memory_unmap (mapinfo[i].memory, &mapinfo[i]); +} + +static gsize +gst_buffer_get_cmsg_list (GstBuffer * buf, GSocketControlMessage ** msgs, + gsize msg_space) +{ + gpointer iter_state = NULL; + GstMeta *meta; + gsize msg_count = 0; + + while ((meta = gst_buffer_iterate_meta (buf, &iter_state)) != NULL + && msg_count < msg_space) { + if (meta->info->api == GST_NET_CONTROL_MESSAGE_META_API_TYPE) + msgs[msg_count++] = ((GstNetControlMessageMeta *) meta)->message; + } + + return msg_count; +} + +#define CMSG_MAX 255 + +static gssize +gst_multi_socket_sink_write (GstMultiSocketSink * sink, + GSocket * sock, GstBuffer * buffer, gsize bufoffset, + GCancellable * cancellable, GError ** err) +{ + GstMapInfo maps[8]; + GOutputVector vec[8]; + guint mems_mapped; + gssize wrote; + GSocketControlMessage *cmsgs[CMSG_MAX]; + gsize msg_count; + + mems_mapped = map_n_memory_output_vector (buffer, bufoffset, vec, maps, 8); + + msg_count = gst_buffer_get_cmsg_list (buffer, cmsgs, CMSG_MAX); + + wrote = + g_socket_send_message (sock, NULL, vec, mems_mapped, cmsgs, msg_count, 0, + cancellable, err); + unmap_n_memorys (maps, mems_mapped); + return wrote; +} + /* Handle a write on a client, * which indicates a read request from a client. * @@ -644,8 +759,6 @@ more = TRUE; do { - gint maxsize; - if (!mhclient->sending) { /* client is not working on a buffer */ if (mhclient->bufpos == -1) { @@ -725,22 +838,12 @@ if (mhclient->sending) { gssize wrote; GstBuffer *head; - GstMapInfo map; /* pick first buffer from list */ head = GST_BUFFER (mhclient->sending->data); - gst_buffer_map (head, &map, GST_MAP_READ); - maxsize = map.size - mhclient->bufoffset; - - /* FIXME: specific */ - /* try to write the complete buffer */ - - wrote = - g_socket_send (mhclient->handle.socket, - (gchar *) map.data + mhclient->bufoffset, maxsize, sink->cancellable, - &err); - gst_buffer_unmap (head, &map); + wrote = gst_multi_socket_sink_write (sink, mhclient->handle.socket, head, + mhclient->bufoffset, sink->cancellable, &err); if (wrote < 0) { /* hmm error.. */ @@ -751,11 +854,12 @@ GST_LOG_OBJECT (sink, "write would block %p", mhclient->handle.socket); more = FALSE; + g_clear_error (&err); } else { goto write_error; } } else { - if (wrote < maxsize) { + if (wrote < (gst_buffer_get_size (head) - mhclient->bufoffset)) { /* partial write, try again now */ GST_LOG_OBJECT (sink, "partial write on %p of %" G_GSSIZE_FORMAT " bytes", @@ -1069,7 +1173,8 @@ sink = GST_MULTI_SOCKET_SINK (bsink); GST_DEBUG_OBJECT (sink, "unset flushing"); - g_cancellable_reset (sink->cancellable); + g_object_unref (sink->cancellable); + sink->cancellable = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstmultisocketsink.h gst-plugins-base1.0-1.6.1/gst/tcp/gstmultisocketsink.h --- gst-plugins-base1.0-1.4.3/gst/tcp/gstmultisocketsink.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstmultisocketsink.h 2015-10-22 08:01:34.000000000 +0000 @@ -43,8 +43,6 @@ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTI_SOCKET_SINK)) #define GST_IS_MULTI_SOCKET_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTI_SOCKET_SINK)) -#define GST_MULTI_SOCKET_SINK_GET_CLASS(klass) \ - (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_MULTI_SOCKET_SINK, GstMultiSocketSinkClass)) typedef struct _GstMultiSocketSink GstMultiSocketSink; diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstsocketsrc.c gst-plugins-base1.0-1.6.1/gst/tcp/gstsocketsrc.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gstsocketsrc.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstsocketsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,394 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * Copyright (C) <2004> Thomas Vander Stichele + * Copyright (C) <2011> Collabora Ltd. + * Author: Sebastian Dröge + * Copyright (C) <2014> William Manley + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +/** + * SECTION:element-socketsrc + * + * Receive data from a socket. + * + * As compared to other elements: + * + * socketsrc can be considered a source counterpart to the #multisocketsink + * sink. + * + * socketsrc can also be considered a generalization of #tcpclientsrc and + * #tcpserversrc: it contains all the logic required to communicate over the + * socket but none of the logic for creating the sockets/establishing the + * connection in the first place, allowing the user to accomplish this + * externally in whatever manner they wish making it applicable to other types + * of sockets besides TCP. + * + * As compared to #fdsrc socketsrc is socket specific and deals with #GSocket + * objects rather than sockets via integer file-descriptors. + * + * @see_also: #multisocketsink + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include "gstsocketsrc.h" +#include "gsttcp.h" + +GST_DEBUG_CATEGORY_STATIC (socketsrc_debug); +#define GST_CAT_DEFAULT socketsrc_debug + +#define MAX_READ_SIZE 4 * 1024 + + +static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + + +enum +{ + PROP_0, + PROP_SOCKET, + PROP_CAPS, +}; + +enum +{ + CONNECTION_CLOSED_BY_PEER, + LAST_SIGNAL +}; + +static guint gst_socket_src_signals[LAST_SIGNAL] = { 0 }; + +#define gst_socket_src_parent_class parent_class +G_DEFINE_TYPE (GstSocketSrc, gst_socket_src, GST_TYPE_PUSH_SRC); + + +static void gst_socket_src_finalize (GObject * gobject); + +static GstCaps *gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter); +static GstFlowReturn gst_socket_src_fill (GstPushSrc * psrc, + GstBuffer * outbuf); +static gboolean gst_socket_src_unlock (GstBaseSrc * bsrc); +static gboolean gst_socket_src_unlock_stop (GstBaseSrc * bsrc); + +static void gst_socket_src_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_socket_src_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); + +#define SWAP(a, b) do { GSocket* _swap_tmp = a; a = b; b = _swap_tmp; } while (0); + +static void +gst_socket_src_class_init (GstSocketSrcClass * klass) +{ + GObjectClass *gobject_class; + GstElementClass *gstelement_class; + GstBaseSrcClass *gstbasesrc_class; + GstPushSrcClass *gstpush_src_class; + + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + gstbasesrc_class = (GstBaseSrcClass *) klass; + gstpush_src_class = (GstPushSrcClass *) klass; + + gobject_class->set_property = gst_socket_src_set_property; + gobject_class->get_property = gst_socket_src_get_property; + gobject_class->finalize = gst_socket_src_finalize; + + g_object_class_install_property (gobject_class, PROP_SOCKET, + g_param_spec_object ("socket", "Socket", + "The socket to receive packets from", G_TYPE_SOCKET, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_CAPS, + g_param_spec_boxed ("caps", "Caps", + "The caps of the source pad", GST_TYPE_CAPS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gst_socket_src_signals[CONNECTION_CLOSED_BY_PEER] = + g_signal_new ("connection-closed-by-peer", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstSocketSrcClass, + connection_closed_by_peer), NULL, NULL, NULL, G_TYPE_NONE, 0); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&srctemplate)); + + gst_element_class_set_static_metadata (gstelement_class, + "socket source", "Source/Network", + "Receive data from a socket", + "Thomas Vander Stichele , " + "William Manley "); + + gstbasesrc_class->get_caps = gst_socketsrc_getcaps; + gstbasesrc_class->unlock = gst_socket_src_unlock; + gstbasesrc_class->unlock_stop = gst_socket_src_unlock_stop; + + gstpush_src_class->fill = gst_socket_src_fill; + + GST_DEBUG_CATEGORY_INIT (socketsrc_debug, "socketsrc", 0, "Socket Source"); +} + +static void +gst_socket_src_init (GstSocketSrc * this) +{ + this->socket = NULL; + this->cancellable = g_cancellable_new (); +} + +static void +gst_socket_src_finalize (GObject * gobject) +{ + GstSocketSrc *this = GST_SOCKET_SRC (gobject); + + if (this->caps) + gst_caps_unref (this->caps); + g_clear_object (&this->cancellable); + g_clear_object (&this->socket); + + G_OBJECT_CLASS (parent_class)->finalize (gobject); +} + +static GstCaps * +gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter) +{ + GstSocketSrc *socketsrc; + GstCaps *caps, *result; + + socketsrc = GST_SOCKET_SRC (src); + + GST_OBJECT_LOCK (src); + if ((caps = socketsrc->caps)) + gst_caps_ref (caps); + GST_OBJECT_UNLOCK (src); + + if (caps) { + if (filter) { + result = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); + gst_caps_unref (caps); + } else { + result = caps; + } + } else { + result = (filter) ? gst_caps_ref (filter) : gst_caps_new_any (); + } + return result; +} + +static GstFlowReturn +gst_socket_src_fill (GstPushSrc * psrc, GstBuffer * outbuf) +{ + GstSocketSrc *src; + GstFlowReturn ret = GST_FLOW_OK; + gssize rret; + GError *err = NULL; + GstMapInfo map; + GSocket *socket = NULL; + GSocketControlMessage **messages = NULL; + gint num_messages = 0; + gint i; + GInputVector ivec; + gint flags = 0; + + src = GST_SOCKET_SRC (psrc); + + GST_OBJECT_LOCK (src); + + if (src->socket) + socket = g_object_ref (src->socket); + + GST_OBJECT_UNLOCK (src); + + if (socket == NULL) + goto no_socket; + + GST_LOG_OBJECT (src, "asked for a buffer"); + +retry: + gst_buffer_map (outbuf, &map, GST_MAP_READWRITE); + ivec.buffer = map.data; + ivec.size = map.size; + rret = + g_socket_receive_message (socket, NULL, &ivec, 1, &messages, + &num_messages, &flags, src->cancellable, &err); + gst_buffer_unmap (outbuf, &map); + + for (i = 0; i < num_messages; i++) { + gst_buffer_add_net_control_message_meta (outbuf, messages[i]); + g_object_unref (messages[i]); + messages[i] = NULL; + } + g_free (messages); + + if (rret == 0) { + GSocket *tmp = NULL; + GST_DEBUG_OBJECT (src, "Received EOS on socket %p fd %i", socket, + g_socket_get_fd (socket)); + + /* We've hit EOS but we'll send this signal to allow someone to change + * our socket before we send EOS downstream. */ + g_signal_emit (src, gst_socket_src_signals[CONNECTION_CLOSED_BY_PEER], 0); + + GST_OBJECT_LOCK (src); + + if (src->socket) + tmp = g_object_ref (src->socket); + + GST_OBJECT_UNLOCK (src); + + /* Do this dance with tmp to avoid unreffing with the lock held */ + if (tmp != NULL && tmp != socket) { + SWAP (socket, tmp); + g_clear_object (&tmp); + + GST_INFO_OBJECT (src, "New socket available after EOS %p fd %i: Retrying", + socket, g_socket_get_fd (socket)); + + /* retry with our new socket: */ + goto retry; + } else { + g_clear_object (&tmp); + GST_INFO_OBJECT (src, "Forwarding EOS downstream"); + ret = GST_FLOW_EOS; + } + } else if (rret < 0) { + if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + ret = GST_FLOW_FLUSHING; + GST_DEBUG_OBJECT (src, "Cancelled reading from socket"); + } else { + ret = GST_FLOW_ERROR; + GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), + ("Failed to read from socket: %s", err->message)); + } + } else { + ret = GST_FLOW_OK; + gst_buffer_resize (outbuf, 0, rret); + + GST_LOG_OBJECT (src, + "Returning buffer from _get of size %" G_GSIZE_FORMAT ", ts %" + GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT + ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, + gst_buffer_get_size (outbuf), + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), + GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf)); + } + g_clear_error (&err); + g_clear_object (&socket); + + return ret; + +no_socket: + { + GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), + ("Cannot receive: No socket set on socketsrc")); + return GST_FLOW_ERROR; + } +} + +static void +gst_socket_src_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstSocketSrc *socketsrc = GST_SOCKET_SRC (object); + + switch (prop_id) { + case PROP_SOCKET:{ + GSocket *socket = G_SOCKET (g_value_dup_object (value)); + GST_OBJECT_LOCK (socketsrc); + SWAP (socket, socketsrc->socket); + GST_OBJECT_UNLOCK (socketsrc); + g_clear_object (&socket); + break; + } + case PROP_CAPS: + { + const GstCaps *new_caps_val = gst_value_get_caps (value); + GstCaps *new_caps; + GstCaps *old_caps; + + if (new_caps_val == NULL) { + new_caps = gst_caps_new_any (); + } else { + new_caps = gst_caps_copy (new_caps_val); + } + + GST_OBJECT_LOCK (socketsrc); + old_caps = socketsrc->caps; + socketsrc->caps = new_caps; + GST_OBJECT_UNLOCK (socketsrc); + + if (old_caps) + gst_caps_unref (old_caps); + + gst_pad_mark_reconfigure (GST_BASE_SRC_PAD (socketsrc)); + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_socket_src_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstSocketSrc *socketsrc = GST_SOCKET_SRC (object); + + switch (prop_id) { + case PROP_SOCKET: + g_value_set_object (value, socketsrc->socket); + break; + case PROP_CAPS: + GST_OBJECT_LOCK (socketsrc); + gst_value_set_caps (value, socketsrc->caps); + GST_OBJECT_UNLOCK (socketsrc); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static gboolean +gst_socket_src_unlock (GstBaseSrc * bsrc) +{ + GstSocketSrc *src = GST_SOCKET_SRC (bsrc); + + GST_DEBUG_OBJECT (src, "set to flushing"); + g_cancellable_cancel (src->cancellable); + + return TRUE; +} + +static gboolean +gst_socket_src_unlock_stop (GstBaseSrc * bsrc) +{ + GstSocketSrc *src = GST_SOCKET_SRC (bsrc); + + GST_DEBUG_OBJECT (src, "unset flushing"); + g_cancellable_reset (src->cancellable); + + return TRUE; +} diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gstsocketsrc.h gst-plugins-base1.0-1.6.1/gst/tcp/gstsocketsrc.h --- gst-plugins-base1.0-1.4.3/gst/tcp/gstsocketsrc.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gstsocketsrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,67 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * Copyright (C) <2004> Thomas Vander Stichele + * Copyright (C) <2014> William Manley + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + + +#ifndef __GST_SOCKET_SRC_H__ +#define __GST_SOCKET_SRC_H__ + +#include +#include + +#include + +G_BEGIN_DECLS + +#define GST_TYPE_SOCKET_SRC \ + (gst_socket_src_get_type()) +#define GST_SOCKET_SRC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SOCKET_SRC,GstSocketSrc)) +#define GST_SOCKET_SRC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SOCKET_SRC,GstSocketSrcClass)) +#define GST_IS_SOCKET_SRC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SOCKET_SRC)) +#define GST_IS_SOCKET_SRC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SOCKET_SRC)) + +typedef struct _GstSocketSrc GstSocketSrc; +typedef struct _GstSocketSrcClass GstSocketSrcClass; + +struct _GstSocketSrc { + GstPushSrc element; + + /*< private >*/ + GstCaps *caps; + GSocket *socket; + GCancellable *cancellable; +}; + +struct _GstSocketSrcClass { + GstPushSrcClass parent_class; + + /* signals */ + void (*connection_closed_by_peer) (GstElement*); +}; + +GType gst_socket_src_get_type (void); + +G_END_DECLS + +#endif /* __GST_SOCKET_SRC_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpclientsink.c gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpclientsink.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpclientsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpclientsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -30,8 +30,9 @@ * # server: * nc -l -p 3000 * # client: - * gst-launch fdsink fd=1 ! tcpclientsink port=3000 - * ]| everything you type in the client is shown on the server + * gst-launch-1.0 fdsink fd=1 ! tcpclientsink port=3000 + * ]| everything you type in the client is shown on the server (fd=1 means + * standard input which is the command line input file descriptor) * */ @@ -418,7 +419,8 @@ GstTCPClientSink *sink = GST_TCP_CLIENT_SINK (bsink); GST_DEBUG_OBJECT (sink, "unset flushing"); - g_cancellable_reset (sink->cancellable); + g_object_unref (sink->cancellable); + sink->cancellable = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpclientsrc.c gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpclientsrc.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpclientsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpclientsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -30,7 +30,7 @@ * # server: * nc -l -p 3000 * # client: - * gst-launch tcpclientsrc port=3000 ! fdsink fd=2 + * gst-launch-1.0 tcpclientsrc port=3000 ! fdsink fd=2 * ]| everything you type in the server is shown on the client * */ @@ -485,7 +485,8 @@ GstTCPClientSrc *src = GST_TCP_CLIENT_SRC (bsrc); GST_DEBUG_OBJECT (src, "unset flushing"); - g_cancellable_reset (src->cancellable); + g_object_unref (src->cancellable); + src->cancellable = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpplugin.c gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpplugin.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpplugin.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpplugin.c 2015-10-22 08:01:34.000000000 +0000 @@ -21,6 +21,7 @@ #include "config.h" #endif +#include "gstsocketsrc.h" #include "gsttcpclientsrc.h" #include "gsttcpclientsink.h" #include "gsttcpserversrc.h" @@ -33,6 +34,9 @@ static gboolean plugin_init (GstPlugin * plugin) { + if (!gst_element_register (plugin, "socketsrc", GST_RANK_NONE, + GST_TYPE_SOCKET_SRC)) + return FALSE; if (!gst_element_register (plugin, "tcpclientsink", GST_RANK_NONE, GST_TYPE_TCP_CLIENT_SINK)) return FALSE; diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpserversink.c gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpserversink.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpserversink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpserversink.c 2015-10-22 08:01:34.000000000 +0000 @@ -26,9 +26,9 @@ * Example launch line * |[ * # server: - * gst-launch fdsrc fd=1 ! tcpserversink port=3000 + * gst-launch-1.0 fdsrc fd=1 ! tcpserversink port=3000 * # client: - * gst-launch tcpclientsrc port=3000 ! fdsink fd=2 + * gst-launch-1.0 tcpclientsrc port=3000 ! fdsink fd=2 * ]| * */ @@ -163,6 +163,7 @@ goto accept_failed; handle.socket = client_socket; + /* gst_multi_handle_sink_add does not take ownership of client_socket */ gst_multi_handle_sink_add (GST_MULTI_HANDLE_SINK (sink), handle); #ifndef GST_DISABLE_GST_DEBUG @@ -177,9 +178,11 @@ ip, g_inet_socket_address_get_port (addr), client_socket); g_free (ip); + g_object_unref (addr); } #endif + g_object_unref (client_socket); return TRUE; /* ERRORS */ diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpserversrc.c gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpserversrc.c --- gst-plugins-base1.0-1.4.3/gst/tcp/gsttcpserversrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/gsttcpserversrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,9 +28,9 @@ * Example launch line * |[ * # server: - * gst-launch tcpserversrc port=3000 ! fdsink fd=2 + * gst-launch-1.0 tcpserversrc port=3000 ! fdsink fd=2 * # client: - * gst-launch fdsrc fd=1 ! tcpclientsink port=3000 + * gst-launch-1.0 fdsrc fd=1 ! tcpclientsink port=3000 * ]| * */ @@ -559,7 +559,8 @@ { GstTCPServerSrc *src = GST_TCP_SERVER_SRC (bsrc); - g_cancellable_reset (src->cancellable); + g_object_unref (src->cancellable); + src->cancellable = g_cancellable_new (); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/Makefile.am gst-plugins-base1.0-1.6.1/gst/tcp/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/tcp/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -8,6 +8,7 @@ endif libgsttcp_la_SOURCES = \ + gstsocketsrc.c \ gsttcpplugin.c \ gsttcpclientsrc.c gsttcpclientsink.c \ $(multifdsink_SOURCES) \ @@ -15,12 +16,13 @@ gstmultisocketsink.c \ gsttcpserversrc.c gsttcpserversink.c -libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) +libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) +libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_NET_LIBS) $(GST_LIBS) $(GIO_LIBS) libgsttcp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = \ + gstsocketsrc.h \ gsttcp.h \ gsttcpclientsrc.h gsttcpclientsink.h \ gstmultifdsink.h \ @@ -28,18 +30,3 @@ gsttcpserversrc.h gsttcpserversink.h gstmultihandlesink.h CLEANFILES = $(BUILT_SOURCES) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgsttcp -:SHARED libgsttcp \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttcp_la_SOURCES) \ - $(nodist_libgsttcp_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \ - -:LDFLAGS $(libgsttcp_la_LDFLAGS) \ - $(libgsttcp_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/tcp/Makefile.in gst-plugins-base1.0-1.6.1/gst/tcp/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/tcp/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/tcp/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/tcp -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -155,14 +164,16 @@ LTLIBRARIES = $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = libgsttcp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am__libgsttcp_la_SOURCES_DIST = gsttcpplugin.c gsttcpclientsrc.c \ - gsttcpclientsink.c gstmultifdsink.c gstmultihandlesink.c \ - gstmultisocketsink.c gsttcpserversrc.c gsttcpserversink.c + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__libgsttcp_la_SOURCES_DIST = gstsocketsrc.c gsttcpplugin.c \ + gsttcpclientsrc.c gsttcpclientsink.c gstmultifdsink.c \ + gstmultihandlesink.c gstmultisocketsink.c gsttcpserversrc.c \ + gsttcpserversink.c @HAVE_SYS_SOCKET_H_TRUE@am__objects_1 = \ @HAVE_SYS_SOCKET_H_TRUE@ libgsttcp_la-gstmultifdsink.lo -am_libgsttcp_la_OBJECTS = libgsttcp_la-gsttcpplugin.lo \ - libgsttcp_la-gsttcpclientsrc.lo \ +am_libgsttcp_la_OBJECTS = libgsttcp_la-gstsocketsrc.lo \ + libgsttcp_la-gsttcpplugin.lo libgsttcp_la-gsttcpclientsrc.lo \ libgsttcp_la-gsttcpclientsink.lo $(am__objects_1) \ libgsttcp_la-gstmultihandlesink.lo \ libgsttcp_la-gstmultisocketsink.lo \ @@ -238,6 +249,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -298,6 +310,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -327,6 +341,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -354,7 +370,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -369,6 +384,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -458,13 +474,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -517,6 +532,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -535,6 +551,7 @@ @HAVE_SYS_SOCKET_H_TRUE@ gstmultifdsink.c libgsttcp_la_SOURCES = \ + gstsocketsrc.c \ gsttcpplugin.c \ gsttcpclientsrc.c gsttcpclientsink.c \ $(multifdsink_SOURCES) \ @@ -542,11 +559,12 @@ gstmultisocketsink.c \ gsttcpserversrc.c gsttcpserversink.c -libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) +libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS) libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) +libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_NET_LIBS) $(GST_LIBS) $(GIO_LIBS) libgsttcp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = \ + gstsocketsrc.h \ gsttcp.h \ gsttcpclientsrc.h gsttcpclientsink.h \ gstmultifdsink.h \ @@ -570,7 +588,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/tcp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/tcp/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -636,6 +653,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultifdsink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultihandlesink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultisocketsink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstsocketsrc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo@am__quote@ @@ -666,6 +684,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +libgsttcp_la-gstsocketsrc.lo: gstsocketsrc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gstsocketsrc.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gstsocketsrc.Tpo -c -o libgsttcp_la-gstsocketsrc.lo `test -f 'gstsocketsrc.c' || echo '$(srcdir)/'`gstsocketsrc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gstsocketsrc.Tpo $(DEPDIR)/libgsttcp_la-gstsocketsrc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstsocketsrc.c' object='libgsttcp_la-gstsocketsrc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gstsocketsrc.lo `test -f 'gstsocketsrc.c' || echo '$(srcdir)/'`gstsocketsrc.c + libgsttcp_la-gsttcpplugin.lo: gsttcpplugin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpplugin.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo -c -o libgsttcp_la-gsttcpplugin.lo `test -f 'gsttcpplugin.c' || echo '$(srcdir)/'`gsttcpplugin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo $(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo @@ -936,21 +961,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgsttcp -:SHARED libgsttcp \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttcp_la_SOURCES) \ - $(nodist_libgsttcp_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \ - -:LDFLAGS $(libgsttcp_la_LDFLAGS) \ - $(libgsttcp_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/typefind/gsttypefindfunctions.c gst-plugins-base1.0-1.6.1/gst/typefind/gsttypefindfunctions.c --- gst-plugins-base1.0-1.4.3/gst/typefind/gsttypefindfunctions.c 2014-09-17 07:23:12.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/typefind/gsttypefindfunctions.c 2015-10-22 08:01:34.000000000 +0000 @@ -46,10 +46,6 @@ GST_DEBUG_CATEGORY_STATIC (type_find_debug); #define GST_CAT_DEFAULT type_find_debug -/* so our code stays ready for 0.11 */ -#define gst_type_find_peek(tf,off,len) \ - ((const guint8 *)gst_type_find_peek((tf),(off),(len))) - /* DataScanCtx: helper for typefind functions that scan through data * step-by-step, to avoid doing a peek at each and every offset */ @@ -509,8 +505,6 @@ /* skip XMLDec in any case if we've got one */ if (got_xmldec) { - if (pos + 5 >= length) - return FALSE; pos += 5; data += 5; } @@ -600,6 +594,21 @@ } } +/*** application/dash+xml ****************************************************/ + +static GstStaticCaps dash_caps = GST_STATIC_CAPS ("application/dash+xml"); + +#define DASH_CAPS gst_static_caps_get (&dash_caps) + +static void +dash_mpd_type_find (GstTypeFind * tf, gpointer unused) +{ + if (xml_check_first_element (tf, "MPD", 3, FALSE) || + xml_check_first_element (tf, "mpd", 3, FALSE)) { + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, DASH_CAPS); + } +} + /*** application/sdp *********************************************************/ static GstStaticCaps sdp_caps = GST_STATIC_CAPS ("application/sdp"); @@ -646,6 +655,19 @@ } } +/*** application/ttml+xml *****************************************************/ + +static GstStaticCaps ttml_xml_caps = GST_STATIC_CAPS ("application/ttml+xml"); + +#define TTML_XML_CAPS (gst_static_caps_get(&ttml_xml_caps)) +static void +ttml_xml_type_find (GstTypeFind * tf, gpointer unused) +{ + if (xml_check_first_element (tf, "tt", 2, FALSE)) { + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, TTML_XML_CAPS); + } +} + /*** text/html ***/ static GstStaticCaps html_caps = GST_STATIC_CAPS ("text/html"); @@ -1255,6 +1277,7 @@ channels = (mode == 3) ? 1 : 2; samplerate = mp3types_freqs[version > 0 ? version - 1 : 0][samplerate]; if (bitrate == 0) { + /* possible freeform mp3 */ if (layer == 1) { length *= 4; length += possible_free_framelen; @@ -1264,6 +1287,11 @@ bitrate = length * samplerate / ((layer == 3 && version != 3) ? 72000 : 144000); } + /* freeform mp3 should have a higher-than-usually-allowed bitrate */ + GST_LOG ("calculated bitrate: %u, max usually: %u", bitrate, + mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][14]); + if (bitrate < mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][14]) + return 0; } else { /* calculating */ bitrate = mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][bitrate]; @@ -2653,8 +2681,12 @@ if (nut == 15) { seen_ssps = TRUE; good++; - } else if (seen_ssps && (nut == 14 || nut == 20)) { - good++; + } else if (nut == 14 || nut == 20) { + /* Sometimes we see NAL 14 or 20 without SSPS + * if dropped into the middle of a stream - + * just ignore those (don't add to bad count) */ + if (seen_ssps) + good++; } else { /* reserved */ /* Theoretically these are good, since if they exist in the @@ -3114,12 +3146,19 @@ break; } + if (STRNCMP (&data[4], "ftypccff", 8) == 0) { + tip = GST_TYPE_FIND_MAXIMUM; + variant = "ccff"; + break; + } + /* box/atom types that are in common with ISO base media file format */ if (STRNCMP (&data[4], "moov", 4) == 0 || STRNCMP (&data[4], "mdat", 4) == 0 || STRNCMP (&data[4], "ftyp", 4) == 0 || STRNCMP (&data[4], "free", 4) == 0 || STRNCMP (&data[4], "uuid", 4) == 0 || + STRNCMP (&data[4], "moof", 4) == 0 || STRNCMP (&data[4], "skip", 4) == 0) { if (tip == 0) { tip = GST_TYPE_FIND_LIKELY; @@ -3470,6 +3509,12 @@ goto suggest_audio_mod_caps; } } + /* UMX */ + if (memcmp (data, "\xC1\x83\x2A\x9E", 4) == 0) { + mod_type = "umx"; + probability = GST_TYPE_FIND_POSSIBLE; + goto suggest_audio_mod_caps; + } } /* FAR (Farandole) (secondary detection) */ if ((data = gst_type_find_peek (tf, 44, 3)) != NULL) { @@ -3549,62 +3594,95 @@ /*** application/vnd.ms-sstr+xml ***/ +static void +mss_manifest_load_utf16 (gunichar2 * utf16_ne, const guint8 * utf16_data, + gsize data_size, guint data_endianness) +{ + memcpy (utf16_ne, utf16_data, data_size); + if (data_endianness != G_BYTE_ORDER) { + guint i; + + for (i = 0; i < data_size / 2; ++i) + utf16_ne[i] = GUINT16_SWAP_LE_BE (utf16_ne[i]); + } +} + static GstStaticCaps mss_manifest_caps = GST_STATIC_CAPS ("application/vnd.ms-sstr+xml"); #define MSS_MANIFEST_CAPS (gst_static_caps_get(&mss_manifest_caps)) static void mss_manifest_type_find (GstTypeFind * tf, gpointer unused) { + gunichar2 utf16_ne[512]; + const guint8 *data; + guint data_endianness = 0; + glong n_read = 0, size = 0; + guint length; + gchar *utf8; + gboolean utf8_bom_detected = FALSE; + if (xml_check_first_element (tf, "SmoothStreamingMedia", 20, TRUE)) { gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS); - } else { - const guint8 *data; - gboolean utf16_le, utf16_be; - const gchar *convert_from = NULL; - guint8 *converted_data; + return; + } - /* try detecting the charset */ - data = gst_type_find_peek (tf, 0, 2); + length = gst_type_find_get_length (tf); - if (data == NULL) - return; + /* try detecting the charset */ + data = gst_type_find_peek (tf, 0, 3); - /* look for a possible BOM */ - utf16_le = data[0] == 0xFF && data[1] == 0xFE; - utf16_be = data[0] == 0xFE && data[1] == 0xFF; - if (utf16_le) { - convert_from = "UTF-16LE"; - } else if (utf16_be) { - convert_from = "UTF-16BE"; - } - - if (convert_from) { - gsize new_size = 0; - guint length = gst_type_find_get_length (tf); - - /* try a default that should be enough */ - if (length == 0) - length = 512; - data = gst_type_find_peek (tf, 0, length); - - if (data) { - /* skip the BOM */ - data += 2; - length -= 2; - - converted_data = - (guint8 *) g_convert ((gchar *) data, length, "UTF-8", convert_from, - NULL, &new_size, NULL); - if (converted_data) { - if (xml_check_first_element_from_data (converted_data, new_size, - "SmoothStreamingMedia", 20, TRUE)) - gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, - MSS_MANIFEST_CAPS); + if (data == NULL) + return; - g_free (converted_data); - } - } + /* look for a possible BOM */ + if (data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF) + utf8_bom_detected = TRUE; + else if (data[0] == 0xFF && data[1] == 0xFE) + data_endianness = G_LITTLE_ENDIAN; + else if (data[0] == 0xFE && data[1] == 0xFF) + data_endianness = G_BIG_ENDIAN; + else + return; + + /* try a default that should be enough */ + if (length == 0) + length = 512; + else if (length < 64) + return; + else /* the first few bytes should be enough */ + length = MIN (1024, length); + + data = gst_type_find_peek (tf, 0, length); + + if (data == NULL) + return; + + /* skip the BOM */ + data += 2; + length -= 2; + + if (utf8_bom_detected) { + /* skip last byte of the BOM */ + data++; + length--; + + if (xml_check_first_element_from_data (data, length, + "SmoothStreamingMedia", 20, TRUE)) + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS); + } else { + length = GST_ROUND_DOWN_2 (length); + + /* convert to native endian UTF-16 */ + mss_manifest_load_utf16 (utf16_ne, data, length, data_endianness); + + /* and now convert to UTF-8 */ + utf8 = g_utf16_to_utf8 (utf16_ne, length / 2, &n_read, &size, NULL); + if (utf8 != NULL && n_read > 0) { + if (xml_check_first_element_from_data ((const guint8 *) utf8, size, + "SmoothStreamingMedia", 20, TRUE)) + gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS); } + g_free (utf8); } } @@ -5325,6 +5403,35 @@ gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, PVA_CAPS); } +/*** audio/audible ***/ + +/* derived from pyaudibletags + * http://code.google.com/p/pyaudibletags/source/browse/trunk/pyaudibletags.py + */ +static GstStaticCaps aa_caps = GST_STATIC_CAPS ("audio/x-audible"); + +#define AA_CAPS gst_static_caps_get(&aa_caps) + +static void +aa_type_find (GstTypeFind * tf, gpointer private) +{ + const guint8 *data; + + data = gst_type_find_peek (tf, 0, 12); + if (data == NULL) + return; + + if (GST_READ_UINT32_BE (data + 4) == 0x57907536) { + guint64 media_len; + + media_len = gst_type_find_get_length (tf); + if (media_len > 0 && GST_READ_UINT32_BE (data) == media_len) + gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, AA_CAPS); + else + gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, AA_CAPS); + } +} + /*** generic typefind for streams that have some data at a specific position***/ typedef struct { @@ -5355,12 +5462,12 @@ { if (G_LIKELY (sw_data->caps != NULL)) gst_caps_unref (sw_data->caps); - g_free (sw_data); + g_slice_free (GstTypeFindData, sw_data); } #define TYPE_FIND_REGISTER_START_WITH(plugin,name,rank,ext,_data,_size,_probability)\ G_BEGIN_DECLS{ \ - GstTypeFindData *sw_data = g_new (GstTypeFindData, 1); \ + GstTypeFindData *sw_data = g_slice_new (GstTypeFindData); \ sw_data->data = (const guint8 *)_data; \ sw_data->size = _size; \ sw_data->probability = _probability; \ @@ -5368,8 +5475,7 @@ if (!gst_type_find_register (plugin, name, rank, start_with_type_find,\ ext, sw_data->caps, sw_data, \ (GDestroyNotify) (sw_data_destroy))) { \ - gst_caps_unref (sw_data->caps); \ - g_free (sw_data); \ + sw_data_destroy (sw_data); \ } \ }G_END_DECLS @@ -5390,7 +5496,7 @@ #define TYPE_FIND_REGISTER_RIFF(plugin,name,rank,ext,_data) \ G_BEGIN_DECLS{ \ - GstTypeFindData *sw_data = g_new (GstTypeFindData, 1); \ + GstTypeFindData *sw_data = g_slice_new (GstTypeFindData); \ sw_data->data = (gpointer)_data; \ sw_data->size = 4; \ sw_data->probability = GST_TYPE_FIND_MAXIMUM; \ @@ -5398,8 +5504,7 @@ if (!gst_type_find_register (plugin, name, rank, riff_type_find, \ ext, sw_data->caps, sw_data, \ (GDestroyNotify) (sw_data_destroy))) { \ - gst_caps_unref (sw_data->caps); \ - g_free (sw_data); \ + sw_data_destroy (sw_data); \ } \ }G_END_DECLS @@ -5464,7 +5569,7 @@ tta_type_find, "tta", TTA_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-mod", GST_RANK_SECONDARY, mod_type_find, "669,amf,ams,dbm,digi,dmf,dsm,gdm,far,imf,it,j2b,mdl,med,mod,mt2,mtm," - "okt,psm,ptm,sam,s3m,stm,stx,ult,xm", MOD_CAPS, NULL, NULL); + "okt,psm,ptm,sam,s3m,stm,stx,ult,umx,xm", MOD_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/mpeg", GST_RANK_PRIMARY, mp3_type_find, "mp3,mp2,mp1,mpga", MP3_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-ac3", GST_RANK_PRIMARY, ac3_type_find, @@ -5516,6 +5621,8 @@ GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER (plugin, "application/x-shockwave-flash", GST_RANK_SECONDARY, swf_type_find, "swf,swfl", SWF_CAPS, NULL, NULL); + TYPE_FIND_REGISTER (plugin, "application/dash+xml", + GST_RANK_PRIMARY, dash_mpd_type_find, "mpd,MPD", DASH_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/vnd.ms-sstr+xml", GST_RANK_PRIMARY, mss_manifest_type_find, NULL, MSS_MANIFEST_CAPS, NULL, NULL); @@ -5535,6 +5642,8 @@ sdp_type_find, "sdp", SDP_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/smil", GST_RANK_SECONDARY, smil_type_find, "smil", SMIL_CAPS, NULL, NULL); + TYPE_FIND_REGISTER (plugin, "application/ttml+xml", GST_RANK_SECONDARY, + ttml_xml_type_find, "ttml+xml", TTML_XML_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/xml", GST_RANK_MARGINAL, xml_type_find, "xml", GENERIC_XML_CAPS, NULL, NULL); TYPE_FIND_REGISTER_RIFF (plugin, "audio/x-wav", GST_RANK_PRIMARY, "wav", @@ -5646,6 +5755,8 @@ wavpack_type_find, "wv,wvp", WAVPACK_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-wavpack-correction", GST_RANK_SECONDARY, wavpack_type_find, "wvc", WAVPACK_CORRECTION_CAPS, NULL, NULL); + TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-caf", GST_RANK_SECONDARY, + "caf", "caff\000\001", 6, GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER (plugin, "application/postscript", GST_RANK_SECONDARY, postscript_type_find, "ps", POSTSCRIPT_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "image/svg+xml", GST_RANK_SECONDARY, @@ -5721,6 +5832,9 @@ TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-xi", GST_RANK_SECONDARY, "xi", "Extended Instrument: ", 21, GST_TYPE_FIND_MAXIMUM); + TYPE_FIND_REGISTER (plugin, "audio/audible", GST_RANK_MARGINAL, + aa_type_find, "aa,aax", AA_CAPS, NULL, NULL); + return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/typefind/Makefile.am gst-plugins-base1.0-1.6.1/gst/typefind/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/typefind/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/typefind/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -10,17 +10,3 @@ $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS) libgsttypefindfunctions_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \ - -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \ - $(libgsttypefindfunctions_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/typefind/Makefile.in gst-plugins-base1.0-1.6.1/gst/typefind/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/typefind/Makefile.in 2014-09-24 08:16:03.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/typefind/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/typefind -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -102,7 +110,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -119,6 +126,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -229,6 +237,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -289,6 +298,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -318,6 +329,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -345,7 +358,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -360,6 +372,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -449,13 +462,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -508,6 +520,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -548,7 +561,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/typefind/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/typefind/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -857,20 +869,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \ - -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \ - $(libgsttypefindfunctions_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstcms.c gst-plugins-base1.0-1.6.1/gst/videoconvert/gstcms.c --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstcms.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstcms.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,573 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include "gstcms.h" - -#include -#include -#include - - -/* our simple CMS */ - -void -color_xyY_to_XYZ (Color * c) -{ - if (c->v[1] == 0) { - c->v[0] = 0; - c->v[1] = 0; - c->v[2] = 0; - } else { - double X, Y, Z; - X = c->v[0] * c->v[2] / c->v[1]; - Y = c->v[2]; - Z = (1.0 - c->v[0] - c->v[1]) * c->v[2] / c->v[1]; - c->v[0] = X; - c->v[1] = Y; - c->v[2] = Z; - } -} - -void -color_XYZ_to_xyY (Color * c) -{ - double d; - d = c->v[0] + c->v[1] + c->v[2]; - if (d == 0) { - c->v[0] = 0.3128; - c->v[1] = 0.3290; - c->v[2] = 0; - } else { - double x, y, Y; - x = c->v[0] / d; - y = c->v[1] / d; - Y = c->v[1]; - c->v[0] = x; - c->v[1] = y; - c->v[2] = Y; - } -} - -void -color_set (Color * c, double x, double y, double z) -{ - c->v[0] = x; - c->v[1] = y; - c->v[2] = z; -} - -void -color_matrix_set_identity (ColorMatrix * m) -{ - int i, j; - - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - m->m[i][j] = (i == j); - } - } -} - -/* Prettyprint a 4x4 matrix @m@ */ -void -color_matrix_dump (ColorMatrix * m) -{ - int i, j; - - printf ("[\n"); - for (i = 0; i < 4; i++) { - printf (" "); - for (j = 0; j < 4; j++) { - printf (" %8.5g", m->m[i][j]); - } - printf ("\n"); - } - printf ("]\n"); -} - -/* Perform 4x4 matrix multiplication: - * - @dst@ = @a@ * @b@ - * - @dst@ may be a pointer to @a@ andor @b@ - */ -void -color_matrix_multiply (ColorMatrix * dst, ColorMatrix * a, ColorMatrix * b) -{ - ColorMatrix tmp; - int i, j, k; - - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - double x = 0; - for (k = 0; k < 4; k++) { - x += a->m[i][k] * b->m[k][j]; - } - tmp.m[i][j] = x; - } - } - - memcpy (dst, &tmp, sizeof (ColorMatrix)); -} - -void -color_matrix_apply (ColorMatrix * m, Color * dest, Color * src) -{ - int i; - Color tmp; - - for (i = 0; i < 3; i++) { - double x = 0; - x += m->m[i][0] * src->v[0]; - x += m->m[i][1] * src->v[1]; - x += m->m[i][2] * src->v[2]; - x += m->m[i][3]; - tmp.v[i] = x; - } - memcpy (dest, &tmp, sizeof (tmp)); -} - -void -color_matrix_offset_components (ColorMatrix * m, double a1, double a2, - double a3) -{ - ColorMatrix a; - - color_matrix_set_identity (&a); - a.m[0][3] = a1; - a.m[1][3] = a2; - a.m[2][3] = a3; - color_matrix_multiply (m, &a, m); -} - -void -color_matrix_scale_components (ColorMatrix * m, double a1, double a2, double a3) -{ - ColorMatrix a; - - color_matrix_set_identity (&a); - a.m[0][0] = a1; - a.m[1][1] = a2; - a.m[2][2] = a3; - color_matrix_multiply (m, &a, m); -} - -void -color_matrix_YCbCr_to_RGB (ColorMatrix * m, double Kr, double Kb) -{ - double Kg = 1.0 - Kr - Kb; - ColorMatrix k = { - { - {1., 0., 2 * (1 - Kr), 0.}, - {1., -2 * Kb * (1 - Kb) / Kg, -2 * Kr * (1 - Kr) / Kg, 0.}, - {1., 2 * (1 - Kb), 0., 0.}, - {0., 0., 0., 1.}, - } - }; - - color_matrix_multiply (m, &k, m); -} - -void -color_matrix_RGB_to_YCbCr (ColorMatrix * m, double Kr, double Kb) -{ - double Kg = 1.0 - Kr - Kb; - ColorMatrix k; - double x; - - k.m[0][0] = Kr; - k.m[0][1] = Kg; - k.m[0][2] = Kb; - k.m[0][3] = 0; - - x = 1 / (2 * (1 - Kb)); - k.m[1][0] = -x * Kr; - k.m[1][1] = -x * Kg; - k.m[1][2] = x * (1 - Kb); - k.m[1][3] = 0; - - x = 1 / (2 * (1 - Kr)); - k.m[2][0] = x * (1 - Kr); - k.m[2][1] = -x * Kg; - k.m[2][2] = -x * Kb; - k.m[2][3] = 0; - - k.m[3][0] = 0; - k.m[3][1] = 0; - k.m[3][2] = 0; - k.m[3][3] = 1; - - color_matrix_multiply (m, &k, m); -} - -void -color_matrix_build_yuv_to_rgb_601 (ColorMatrix * dst) -{ - /* - * At this point, everything is in YCbCr - * All components are in the range [0,255] - */ - color_matrix_set_identity (dst); - - /* offset required to get input video black to (0.,0.,0.) */ - color_matrix_offset_components (dst, -16, -128, -128); - - /* scale required to get input video black to (0.,0.,0.) */ - color_matrix_scale_components (dst, (1 / 219.0), (1 / 224.0), (1 / 224.0)); - - /* colour matrix, YCbCr -> RGB */ - /* Requires Y in [0,1.0], Cb&Cr in [-0.5,0.5] */ - color_matrix_YCbCr_to_RGB (dst, 0.2990, 0.1140); /* SD */ - - /* - * We are now in RGB space - */ - -#if 0 - /* scale to output range. */ - color_matrix_scale_components (dst, 255.0, 255.0, 255.0); -#endif -} - -void -color_matrix_build_bt709_to_bt601 (ColorMatrix * dst) -{ - color_matrix_set_identity (dst); - - /* offset required to get input video black to (0.,0.,0.) */ - color_matrix_offset_components (dst, -16, -128, -128); - - /* scale required to get input video black to (0.,0.,0.) */ - color_matrix_scale_components (dst, (1 / 219.0), (1 / 224.0), (1 / 224.0)); - - /* colour matrix, YCbCr -> RGB */ - /* Requires Y in [0,1.0], Cb&Cr in [-0.5,0.5] */ - color_matrix_YCbCr_to_RGB (dst, 0.2126, 0.0722); /* HD */ - - color_matrix_RGB_to_YCbCr (dst, 0.2990, 0.1140); /* SD */ - - color_matrix_scale_components (dst, 219.0, 224.0, 224.0); - - color_matrix_offset_components (dst, 16, 128, 128); -} - -void -color_matrix_build_rgb_to_yuv_601 (ColorMatrix * dst) -{ - color_matrix_set_identity (dst); - - color_matrix_RGB_to_YCbCr (dst, 0.2990, 0.1140); /* SD */ - - color_matrix_scale_components (dst, 219.0, 224.0, 224.0); - - color_matrix_offset_components (dst, 16, 128, 128); - - { - Color c; - int i; - for (i = 7; i >= 0; i--) { - color_set (&c, (i & 2) ? 0.75 : 0.0, (i & 4) ? 0.75 : 0.0, - (i & 1) ? 0.75 : 0.0); - color_matrix_apply (dst, &c, &c); - g_print (" { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]), - rint (c.v[2])); - } - color_set (&c, -0.075, -0.075, -0.075); - color_matrix_apply (dst, &c, &c); - g_print (" { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]), - rint (c.v[2])); - color_set (&c, 0.075, 0.075, 0.075); - color_matrix_apply (dst, &c, &c); - g_print (" { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]), - rint (c.v[2])); - } -} - -void -color_matrix_invert (ColorMatrix * m) -{ - ColorMatrix tmp; - int i, j; - double det; - - color_matrix_set_identity (&tmp); - for (j = 0; j < 3; j++) { - for (i = 0; i < 3; i++) { - tmp.m[j][i] = - m->m[(i + 1) % 3][(j + 1) % 3] * m->m[(i + 2) % 3][(j + 2) % 3] - - m->m[(i + 1) % 3][(j + 2) % 3] * m->m[(i + 2) % 3][(j + 1) % 3]; - } - } - det = - tmp.m[0][0] * m->m[0][0] + tmp.m[0][1] * m->m[1][0] + - tmp.m[0][2] * m->m[2][0]; - for (j = 0; j < 3; j++) { - for (i = 0; i < 3; i++) { - tmp.m[i][j] /= det; - } - } - memcpy (m, &tmp, sizeof (tmp)); -} - -void -color_matrix_copy (ColorMatrix * dest, ColorMatrix * src) -{ - memcpy (dest, src, sizeof (ColorMatrix)); -} - -void -color_matrix_transpose (ColorMatrix * m) -{ - int i, j; - ColorMatrix tmp; - - color_matrix_set_identity (&tmp); - for (i = 0; i < 3; i++) { - for (j = 0; j < 3; j++) { - tmp.m[i][j] = m->m[j][i]; - } - } - memcpy (m, &tmp, sizeof (ColorMatrix)); -} - -void -color_matrix_build_XYZ (ColorMatrix * dst, - double rx, double ry, - double gx, double gy, double bx, double by, double wx, double wy) -{ - Color r, g, b, w, scale; - ColorMatrix m; - - color_set (&r, rx, ry, 1.0); - color_xyY_to_XYZ (&r); - color_set (&g, gx, gy, 1.0); - color_xyY_to_XYZ (&g); - color_set (&b, bx, by, 1.0); - color_xyY_to_XYZ (&b); - color_set (&w, wx, wy, 1.0); - color_xyY_to_XYZ (&w); - - color_matrix_set_identity (dst); - - dst->m[0][0] = r.v[0]; - dst->m[0][1] = r.v[1]; - dst->m[0][2] = r.v[2]; - dst->m[1][0] = g.v[0]; - dst->m[1][1] = g.v[1]; - dst->m[1][2] = g.v[2]; - dst->m[2][0] = b.v[0]; - dst->m[2][1] = b.v[1]; - dst->m[2][2] = b.v[2]; - - color_matrix_dump (dst); - color_matrix_copy (&m, dst); - color_matrix_invert (&m); - color_matrix_dump (&m); - - color_matrix_transpose (&m); - color_matrix_apply (&m, &scale, &w); - g_print ("%g %g %g\n", scale.v[0], scale.v[1], scale.v[2]); - - dst->m[0][0] = r.v[0] * scale.v[0]; - dst->m[0][1] = r.v[1] * scale.v[0]; - dst->m[0][2] = r.v[2] * scale.v[0]; - dst->m[1][0] = g.v[0] * scale.v[1]; - dst->m[1][1] = g.v[1] * scale.v[1]; - dst->m[1][2] = g.v[2] * scale.v[1]; - dst->m[2][0] = b.v[0] * scale.v[2]; - dst->m[2][1] = b.v[1] * scale.v[2]; - dst->m[2][2] = b.v[2] * scale.v[2]; - - color_matrix_transpose (dst); - color_matrix_dump (dst); - - color_set (&scale, 1, 1, 1); - color_matrix_apply (dst, &scale, &scale); - color_XYZ_to_xyY (&scale); - g_print ("white %g %g %g\n", scale.v[0], scale.v[1], scale.v[2]); - -} - -void -color_matrix_build_rgb_to_XYZ_601 (ColorMatrix * dst) -{ - /* SMPTE C primaries, SMPTE 170M-2004 */ - color_matrix_build_XYZ (dst, - 0.630, 0.340, 0.310, 0.595, 0.155, 0.070, 0.3127, 0.3290); -#if 0 - /* NTSC 1953 primaries, SMPTE 170M-2004 */ - color_matrix_build_XYZ (dst, - 0.67, 0.33, 0.21, 0.71, 0.14, 0.08, 0.3127, 0.3290); -#endif -} - -void -color_matrix_build_XYZ_to_rgb_709 (ColorMatrix * dst) -{ - /* Rec. ITU-R BT.709-5 */ - color_matrix_build_XYZ (dst, - 0.640, 0.330, 0.300, 0.600, 0.150, 0.060, 0.3127, 0.3290); -} - -void -color_matrix_build_XYZ_to_rgb_dell (ColorMatrix * dst) -{ - /* Dell monitor */ -#if 1 - color_matrix_build_XYZ (dst, - 0.662, 0.329, 0.205, 0.683, 0.146, 0.077, 0.3135, 0.3290); -#endif -#if 0 - color_matrix_build_XYZ (dst, - 0.630, 0.340, 0.310, 0.595, 0.155, 0.070, 0.3127, 0.3290); -#endif - color_matrix_invert (dst); -} - -void -color_transfer_function_apply (Color * dest, Color * src) -{ - int i; - - for (i = 0; i < 3; i++) { - if (src->v[i] < 0.0812) { - dest->v[i] = src->v[i] / 4.500; - } else { - dest->v[i] = pow (src->v[i] + 0.099, 1 / 0.4500); - } - } -} - -void -color_transfer_function_unapply (Color * dest, Color * src) -{ - int i; - - for (i = 0; i < 3; i++) { - if (src->v[i] < 0.0812 / 4.500) { - dest->v[i] = src->v[i] * 4.500; - } else { - dest->v[i] = pow (src->v[i], 0.4500) - 0.099; - } - } -} - -void -color_gamut_clamp (Color * dest, Color * src) -{ - dest->v[0] = CLAMP (src->v[0], 0.0, 1.0); - dest->v[1] = CLAMP (src->v[1], 0.0, 1.0); - dest->v[2] = CLAMP (src->v[2], 0.0, 1.0); -} - -#if 0 -static guint8 * -get_color_transform_table (void) -{ - static guint8 *color_transform_table = NULL; - -#if 1 - if (!color_transform_table) { - ColorMatrix bt601_to_rgb; - ColorMatrix bt601_to_yuv; - ColorMatrix bt601_rgb_to_XYZ; - ColorMatrix dell_XYZ_to_rgb; - guint8 *table_y; - guint8 *table_u; - guint8 *table_v; - int y, u, v; - - color_matrix_build_yuv_to_rgb_601 (&bt601_to_rgb); - color_matrix_build_rgb_to_yuv_601 (&bt601_to_yuv); - color_matrix_build_rgb_to_XYZ_601 (&bt601_rgb_to_XYZ); - color_matrix_build_XYZ_to_rgb_dell (&dell_XYZ_to_rgb); - - color_transform_table = g_malloc (0x1000000 * 3); - - table_y = COG_OFFSET (color_transform_table, 0 * 0x1000000); - table_u = COG_OFFSET (color_transform_table, 1 * 0x1000000); - table_v = COG_OFFSET (color_transform_table, 2 * 0x1000000); - - for (y = 0; y < 256; y++) { - for (u = 0; u < 256; u++) { - for (v = 0; v < 256; v++) { - Color c; - - c.v[0] = y; - c.v[1] = u; - c.v[2] = v; - color_matrix_apply (&bt601_to_rgb, &c, &c); - color_gamut_clamp (&c, &c); - color_transfer_function_apply (&c, &c); - color_matrix_apply (&bt601_rgb_to_XYZ, &c, &c); - color_matrix_apply (&dell_XYZ_to_rgb, &c, &c); - color_transfer_function_unapply (&c, &c); - color_gamut_clamp (&c, &c); - color_matrix_apply (&bt601_to_yuv, &c, &c); - - table_y[(y << 16) | (u << 8) | (v)] = rint (c.v[0]); - table_u[(y << 16) | (u << 8) | (v)] = rint (c.v[1]); - table_v[(y << 16) | (u << 8) | (v)] = rint (c.v[2]); - } - } - } - } -#endif -#if 0 - if (!color_transform_table) { - ColorMatrix bt709_to_bt601; - guint8 *table_y; - guint8 *table_u; - guint8 *table_v; - int y, u, v; - - color_matrix_build_bt709_to_bt601 (&bt709_to_bt601); - - color_transform_table = g_malloc (0x1000000 * 3); - - table_y = COG_OFFSET (color_transform_table, 0 * 0x1000000); - table_u = COG_OFFSET (color_transform_table, 1 * 0x1000000); - table_v = COG_OFFSET (color_transform_table, 2 * 0x1000000); - - for (y = 0; y < 256; y++) { - for (u = 0; u < 256; u++) { - for (v = 0; v < 256; v++) { - Color c; - - c.v[0] = y; - c.v[1] = u; - c.v[2] = v; - color_matrix_apply (&bt709_to_bt601, &c, &c); - - table_y[(y << 16) | (u << 8) | (v)] = rint (c.v[0]); - table_u[(y << 16) | (u << 8) | (v)] = rint (c.v[1]); - table_v[(y << 16) | (u << 8) | (v)] = rint (c.v[2]); - } - } - } - } -#endif - - return color_transform_table; -} -#endif diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstcms.h gst-plugins-base1.0-1.6.1/gst/videoconvert/gstcms.h --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstcms.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstcms.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GST_CMS_H_ -#define _GST_CMS_H_ - -#include - -G_BEGIN_DECLS - -typedef struct _Color Color; -typedef struct _ColorMatrix ColorMatrix; - -struct _Color -{ - double v[3]; -}; - -struct _ColorMatrix -{ - double m[4][4]; -}; - -void color_xyY_to_XYZ (Color * c); -void color_XYZ_to_xyY (Color * c); -void color_set (Color * c, double x, double y, double z); -void color_matrix_set_identity (ColorMatrix * m); -void color_matrix_dump (ColorMatrix * m); -void color_matrix_multiply (ColorMatrix * dst, ColorMatrix * a, ColorMatrix * b); -void color_matrix_apply (ColorMatrix * m, Color * dest, Color * src); -void color_matrix_offset_components (ColorMatrix * m, double a1, double a2, - double a3); -void color_matrix_scale_components (ColorMatrix * m, double a1, double a2, double a3); -void color_matrix_YCbCr_to_RGB (ColorMatrix * m, double Kr, double Kb); -void color_matrix_RGB_to_YCbCr (ColorMatrix * m, double Kr, double Kb); -void color_matrix_build_yuv_to_rgb_601 (ColorMatrix * dst); -void color_matrix_build_bt709_to_bt601 (ColorMatrix * dst); -void color_matrix_build_rgb_to_yuv_601 (ColorMatrix * dst); -void color_matrix_invert (ColorMatrix * m); -void color_matrix_copy (ColorMatrix * dest, ColorMatrix * src); -void color_matrix_transpose (ColorMatrix * m); -void color_matrix_build_XYZ (ColorMatrix * dst, - double rx, double ry, - double gx, double gy, double bx, double by, double wx, double wy); -void color_matrix_build_rgb_to_XYZ_601 (ColorMatrix * dst); -void color_matrix_build_XYZ_to_rgb_709 (ColorMatrix * dst); -void color_matrix_build_XYZ_to_rgb_dell (ColorMatrix * dst); -void color_transfer_function_apply (Color * dest, Color * src); -void color_transfer_function_unapply (Color * dest, Color * src); -void color_gamut_clamp (Color * dest, Color * src); - -G_END_DECLS - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvert.c gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvert.c --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvert.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvert.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,8 +28,10 @@ * * Example launch line * |[ - * gst-launch -v videotestsrc ! video/x-raw,format=\(string\)YUY2 ! videoconvert ! ximagesink - * ]| + * gst-launch-1.0 -v videotestsrc ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink + * ]| This will output a test video (generated in YUY2 format) in a video + * window. If the video sink selected does not support YUY2 videoconvert will + * automatically convert the video to a format understood by the video sink. * */ @@ -56,10 +58,28 @@ #define gst_video_convert_parent_class parent_class G_DEFINE_TYPE (GstVideoConvert, gst_video_convert, GST_TYPE_VIDEO_FILTER); +#define DEFAULT_PROP_DITHER GST_VIDEO_DITHER_BAYER +#define DEFAULT_PROP_DITHER_QUANTIZATION 1 +#define DEFAULT_PROP_CHROMA_RESAMPLER GST_VIDEO_RESAMPLER_METHOD_LINEAR +#define DEFAULT_PROP_ALPHA_MODE GST_VIDEO_ALPHA_MODE_COPY +#define DEFAULT_PROP_ALPHA_VALUE 1.0 +#define DEFAULT_PROP_CHROMA_MODE GST_VIDEO_CHROMA_MODE_FULL +#define DEFAULT_PROP_MATRIX_MODE GST_VIDEO_MATRIX_MODE_FULL +#define DEFAULT_PROP_GAMMA_MODE GST_VIDEO_GAMMA_MODE_NONE +#define DEFAULT_PROP_PRIMARIES_MODE GST_VIDEO_PRIMARIES_MODE_NONE + enum { PROP_0, - PROP_DITHER + PROP_DITHER, + PROP_DITHER_QUANTIZATION, + PROP_CHROMA_RESAMPLER, + PROP_ALPHA_MODE, + PROP_ALPHA_VALUE, + PROP_CHROMA_MODE, + PROP_MATRIX_MODE, + PROP_GAMMA_MODE, + PROP_PRIMARIES_MODE }; #define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \ @@ -90,24 +110,6 @@ static GstFlowReturn gst_video_convert_transform_frame (GstVideoFilter * filter, GstVideoFrame * in_frame, GstVideoFrame * out_frame); -static GType -dither_method_get_type (void) -{ - static GType gtype = 0; - - if (gtype == 0) { - static const GEnumValue values[] = { - {DITHER_NONE, "No dithering (default)", "none"}, - {DITHER_VERTERR, "Vertical error propogation", "verterr"}, - {DITHER_HALFTONE, "Half-tone", "halftone"}, - {0, NULL, NULL} - }; - - gtype = g_enum_register_static ("GstVideoConvertDitherMethod", values); - } - return gtype; -} - /* copies the given caps */ static GstCaps * gst_video_convert_caps_remove_format_info (GstCaps * caps) @@ -353,6 +355,12 @@ /* fixate remaining fields */ result = gst_caps_fixate (result); + if (direction == GST_PAD_SINK) { + if (gst_caps_is_subset (caps, result)) { + gst_caps_replace (&result, caps); + } + } + return result; } @@ -419,7 +427,7 @@ space = GST_VIDEO_CONVERT_CAST (filter); if (space->convert) { - videoconvert_convert_free (space->convert); + gst_video_converter_free (space->convert); space->convert = NULL; } @@ -436,7 +444,27 @@ if (in_info->interlace_mode != out_info->interlace_mode) goto format_mismatch; - space->convert = videoconvert_convert_new (in_info, out_info); + + space->convert = gst_video_converter_new (in_info, out_info, + gst_structure_new ("GstVideoConvertConfig", + GST_VIDEO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_VIDEO_DITHER_METHOD, + space->dither, + GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION, G_TYPE_UINT, + space->dither_quantization, + GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, space->chroma_resampler, + GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, + GST_TYPE_VIDEO_ALPHA_MODE, space->alpha_mode, + GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE, + G_TYPE_DOUBLE, space->alpha_value, + GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, + GST_TYPE_VIDEO_CHROMA_MODE, space->chroma_mode, + GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, + GST_TYPE_VIDEO_MATRIX_MODE, space->matrix_mode, + GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, + GST_TYPE_VIDEO_GAMMA_MODE, space->gamma_mode, + GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE, + GST_TYPE_VIDEO_PRIMARIES_MODE, space->primaries_mode, NULL)); if (space->convert == NULL) goto no_convert; @@ -464,7 +492,7 @@ GstVideoConvert *space = GST_VIDEO_CONVERT (obj); if (space->convert) { - videoconvert_convert_free (space->convert); + gst_video_converter_free (space->convert); } G_OBJECT_CLASS (parent_class)->finalize (obj); @@ -491,7 +519,7 @@ gst_element_class_set_static_metadata (gstelement_class, "Colorspace converter", "Filter/Converter/Video", "Converts video from one colorspace to another", - "GStreamer maintainers "); + "GStreamer maintainers "); gstbasetransform_class->transform_caps = GST_DEBUG_FUNCPTR (gst_video_convert_transform_caps); @@ -511,13 +539,57 @@ g_object_class_install_property (gobject_class, PROP_DITHER, g_param_spec_enum ("dither", "Dither", "Apply dithering while converting", - dither_method_get_type (), DITHER_NONE, + gst_video_dither_method_get_type (), DEFAULT_PROP_DITHER, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_DITHER_QUANTIZATION, + g_param_spec_uint ("dither-quantization", "Dither Quantize", + "Quantizer to use", 0, G_MAXUINT, DEFAULT_PROP_DITHER_QUANTIZATION, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_CHROMA_RESAMPLER, + g_param_spec_enum ("chroma-resampler", "Chroma resampler", + "Chroma resampler method", gst_video_resampler_method_get_type (), + DEFAULT_PROP_CHROMA_RESAMPLER, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_ALPHA_MODE, + g_param_spec_enum ("alpha-mode", "Alpha Mode", + "Alpha Mode to use", gst_video_alpha_mode_get_type (), + DEFAULT_PROP_ALPHA_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_ALPHA_VALUE, + g_param_spec_double ("alpha-value", "Alpha Value", + "Alpha Value to use", 0.0, 1.0, + DEFAULT_PROP_ALPHA_VALUE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_CHROMA_MODE, + g_param_spec_enum ("chroma-mode", "Chroma Mode", "Chroma Resampling Mode", + gst_video_chroma_mode_get_type (), DEFAULT_PROP_CHROMA_MODE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_MATRIX_MODE, + g_param_spec_enum ("matrix-mode", "Matrix Mode", "Matrix Conversion Mode", + gst_video_matrix_mode_get_type (), DEFAULT_PROP_MATRIX_MODE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_GAMMA_MODE, + g_param_spec_enum ("gamma-mode", "Gamma Mode", "Gamma Conversion Mode", + gst_video_gamma_mode_get_type (), DEFAULT_PROP_GAMMA_MODE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_PRIMARIES_MODE, + g_param_spec_enum ("primaries-mode", "Primaries Mode", + "Primaries Conversion Mode", gst_video_primaries_mode_get_type (), + DEFAULT_PROP_PRIMARIES_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } static void gst_video_convert_init (GstVideoConvert * space) { + space->dither = DEFAULT_PROP_DITHER; + space->dither_quantization = DEFAULT_PROP_DITHER_QUANTIZATION; + space->chroma_resampler = DEFAULT_PROP_CHROMA_RESAMPLER; + space->alpha_mode = DEFAULT_PROP_ALPHA_MODE; + space->alpha_value = DEFAULT_PROP_ALPHA_VALUE; + space->chroma_mode = DEFAULT_PROP_CHROMA_MODE; + space->matrix_mode = DEFAULT_PROP_MATRIX_MODE; + space->gamma_mode = DEFAULT_PROP_GAMMA_MODE; + space->primaries_mode = DEFAULT_PROP_PRIMARIES_MODE; } void @@ -532,6 +604,30 @@ case PROP_DITHER: csp->dither = g_value_get_enum (value); break; + case PROP_CHROMA_RESAMPLER: + csp->chroma_resampler = g_value_get_enum (value); + break; + case PROP_ALPHA_MODE: + csp->alpha_mode = g_value_get_enum (value); + break; + case PROP_ALPHA_VALUE: + csp->alpha_value = g_value_get_double (value); + break; + case PROP_CHROMA_MODE: + csp->chroma_mode = g_value_get_enum (value); + break; + case PROP_MATRIX_MODE: + csp->matrix_mode = g_value_get_enum (value); + break; + case PROP_GAMMA_MODE: + csp->gamma_mode = g_value_get_enum (value); + break; + case PROP_PRIMARIES_MODE: + csp->primaries_mode = g_value_get_enum (value); + break; + case PROP_DITHER_QUANTIZATION: + csp->dither_quantization = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -550,6 +646,30 @@ case PROP_DITHER: g_value_set_enum (value, csp->dither); break; + case PROP_CHROMA_RESAMPLER: + g_value_set_enum (value, csp->chroma_resampler); + break; + case PROP_ALPHA_MODE: + g_value_set_enum (value, csp->alpha_mode); + break; + case PROP_ALPHA_VALUE: + g_value_set_double (value, csp->alpha_value); + break; + case PROP_CHROMA_MODE: + g_value_set_enum (value, csp->chroma_mode); + break; + case PROP_MATRIX_MODE: + g_value_set_enum (value, csp->matrix_mode); + break; + case PROP_GAMMA_MODE: + g_value_set_enum (value, csp->gamma_mode); + break; + case PROP_PRIMARIES_MODE: + g_value_set_enum (value, csp->primaries_mode); + break; + case PROP_DITHER_QUANTIZATION: + g_value_set_uint (value, csp->dither_quantization); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -569,9 +689,7 @@ GST_VIDEO_INFO_NAME (&filter->in_info), GST_VIDEO_INFO_NAME (&filter->out_info)); - videoconvert_convert_set_dither (space->convert, space->dither); - - videoconvert_convert_convert (space->convert, out_frame, in_frame); + gst_video_converter_frame (space->convert, in_frame, out_frame); return GST_FLOW_OK; } diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvert.h gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvert.h --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvert.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvert.h 2015-10-22 08:01:34.000000000 +0000 @@ -25,7 +25,6 @@ #include #include #include -#include "videoconvert.h" G_BEGIN_DECLS @@ -47,8 +46,16 @@ struct _GstVideoConvert { GstVideoFilter element; - VideoConvert *convert; - gboolean dither; + GstVideoConverter *convert; + GstVideoDitherMethod dither; + guint dither_quantization; + GstVideoResamplerMethod chroma_resampler; + GstVideoAlphaMode alpha_mode; + GstVideoChromaMode chroma_mode; + GstVideoMatrixMode matrix_mode; + GstVideoGammaMode gamma_mode; + GstVideoPrimariesMode primaries_mode; + gdouble alpha_value; }; struct _GstVideoConvertClass diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc-dist.c gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc-dist.c 2014-09-24 08:19:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc-dist.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,8958 +0,0 @@ - -/* autogenerated from gstvideoconvertorc.orc */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include - -#ifndef _ORC_INTEGER_TYPEDEFS_ -#define _ORC_INTEGER_TYPEDEFS_ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -typedef int8_t orc_int8; -typedef int16_t orc_int16; -typedef int32_t orc_int32; -typedef int64_t orc_int64; -typedef uint8_t orc_uint8; -typedef uint16_t orc_uint16; -typedef uint32_t orc_uint32; -typedef uint64_t orc_uint64; -#define ORC_UINT64_C(x) UINT64_C(x) -#elif defined(_MSC_VER) -typedef signed __int8 orc_int8; -typedef signed __int16 orc_int16; -typedef signed __int32 orc_int32; -typedef signed __int64 orc_int64; -typedef unsigned __int8 orc_uint8; -typedef unsigned __int16 orc_uint16; -typedef unsigned __int32 orc_uint32; -typedef unsigned __int64 orc_uint64; -#define ORC_UINT64_C(x) (x##Ui64) -#define inline __inline -#else -#include -typedef signed char orc_int8; -typedef short orc_int16; -typedef int orc_int32; -typedef unsigned char orc_uint8; -typedef unsigned short orc_uint16; -typedef unsigned int orc_uint32; -#if INT_MAX == LONG_MAX -typedef long long orc_int64; -typedef unsigned long long orc_uint64; -#define ORC_UINT64_C(x) (x##ULL) -#else -typedef long orc_int64; -typedef unsigned long orc_uint64; -#define ORC_UINT64_C(x) (x##UL) -#endif -#endif -typedef union -{ - orc_int16 i; - orc_int8 x2[2]; -} orc_union16; -typedef union -{ - orc_int32 i; - float f; - orc_int16 x2[2]; - orc_int8 x4[4]; -} orc_union32; -typedef union -{ - orc_int64 i; - double f; - orc_int32 x2[2]; - float x2f[2]; - orc_int16 x4[4]; -} orc_union64; -#endif -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif - -#ifndef ORC_INTERNAL -#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define ORC_INTERNAL __hidden -#elif defined (__GNUC__) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#else -#define ORC_INTERNAL -#endif -#endif - - -#ifndef DISABLE_ORC -#include -#endif -void video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n); -void video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n); -void video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, - int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, - int s1_stride, int n, int m); -void video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, - int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, - int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, - int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, - int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, - int n); - - -/* begin Orc C target preamble */ -#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x))) -#define ORC_ABS(a) ((a)<0 ? -(a) : (a)) -#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b)) -#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b)) -#define ORC_SB_MAX 127 -#define ORC_SB_MIN (-1-ORC_SB_MAX) -#define ORC_UB_MAX 255 -#define ORC_UB_MIN 0 -#define ORC_SW_MAX 32767 -#define ORC_SW_MIN (-1-ORC_SW_MAX) -#define ORC_UW_MAX 65535 -#define ORC_UW_MIN 0 -#define ORC_SL_MAX 2147483647 -#define ORC_SL_MIN (-1-ORC_SL_MAX) -#define ORC_UL_MAX 4294967295U -#define ORC_UL_MIN 0 -#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX) -#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX) -#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX) -#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX) -#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX) -#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX) -#define ORC_SWAP_W(x) ((((x)&0xffU)<<8) | (((x)&0xff00U)>>8)) -#define ORC_SWAP_L(x) ((((x)&0xffU)<<24) | (((x)&0xff00U)<<8) | (((x)&0xff0000U)>>8) | (((x)&0xff000000U)>>24)) -#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56)) -#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset))) -#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff)) -#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0)) -#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff))) -#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0)) -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif -/* end Orc C target preamble */ - - - -/* video_convert_orc_memcpy_2d */ -#ifdef DISABLE_ORC -void -video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - orc_int8 var33; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: copyb */ - var33 = var32; - /* 2: storeb */ - ptr0[i] = var33; - } - } - -} - -#else -static void -_backup_video_convert_orc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - orc_int8 var33; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: copyb */ - var33 = var32; - /* 2: storeb */ - ptr0[i] = var33; - } - } - -} - -void -video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 109, 101, 109, 99, 112, 121, 95, 50, 100, 11, - 1, 1, 12, 1, 1, 42, 0, 4, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, _backup_video_convert_orc_memcpy_2d); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_memcpy_2d"); - orc_program_set_backup_function (p, _backup_video_convert_orc_memcpy_2d); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - - orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_I420_UYVY */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - orc_union32 var38; - orc_union16 var39; - - ptr0 = (orc_union32 *) d1; - ptr1 = (orc_union32 *) d2; - ptr4 = (orc_union16 *) s1; - ptr5 = (orc_union16 *) s2; - ptr6 = (orc_int8 *) s3; - ptr7 = (orc_int8 *) s4; - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr6[i]; - /* 1: loadb */ - var34 = ptr7[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var39.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[0]; - _dest.x2[1] = var35.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[1]; - _dest.x2[1] = var35.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - /* 6: loadw */ - var37 = ptr5[i]; - /* 7: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[0]; - _dest.x2[1] = var37.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[1]; - _dest.x2[1] = var37.x2[1]; - var38.x2[1] = _dest.i; - } - /* 8: storel */ - ptr1[i] = var38; - } - -} - -#else -static void -_backup_video_convert_orc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - orc_union32 var38; - orc_union16 var39; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr1 = (orc_union32 *) ex->arrays[1]; - ptr4 = (orc_union16 *) ex->arrays[4]; - ptr5 = (orc_union16 *) ex->arrays[5]; - ptr6 = (orc_int8 *) ex->arrays[6]; - ptr7 = (orc_int8 *) ex->arrays[7]; - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr6[i]; - /* 1: loadb */ - var34 = ptr7[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var39.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[0]; - _dest.x2[1] = var35.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[1]; - _dest.x2[1] = var35.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - /* 6: loadw */ - var37 = ptr5[i]; - /* 7: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[0]; - _dest.x2[1] = var37.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var39.x2[1]; - _dest.x2[1] = var37.x2[1]; - var38.x2[1] = _dest.i; - } - /* 8: storel */ - ptr1[i] = var38; - } - -} - -void -video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, - 48, 95, 85, 89, 86, 89, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12, - 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1, - 196, 0, 32, 4, 21, 1, 196, 1, 32, 5, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_UYVY); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_I420_UYVY"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_UYVY); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_destination (p, 4, "d2"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_source (p, 1, "s4"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->arrays[ORC_VAR_S4] = (void *) s4; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_I420_YUY2 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - orc_union32 var38; - orc_union16 var39; - - ptr0 = (orc_union32 *) d1; - ptr1 = (orc_union32 *) d2; - ptr4 = (orc_union16 *) s1; - ptr5 = (orc_union16 *) s2; - ptr6 = (orc_int8 *) s3; - ptr7 = (orc_int8 *) s4; - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr6[i]; - /* 1: loadb */ - var34 = ptr7[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var39.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[0]; - _dest.x2[1] = var39.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[1]; - _dest.x2[1] = var39.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - /* 6: loadw */ - var37 = ptr5[i]; - /* 7: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var39.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var39.x2[1]; - var38.x2[1] = _dest.i; - } - /* 8: storel */ - ptr1[i] = var38; - } - -} - -#else -static void -_backup_video_convert_orc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - orc_union32 var38; - orc_union16 var39; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr1 = (orc_union32 *) ex->arrays[1]; - ptr4 = (orc_union16 *) ex->arrays[4]; - ptr5 = (orc_union16 *) ex->arrays[5]; - ptr6 = (orc_int8 *) ex->arrays[6]; - ptr7 = (orc_int8 *) ex->arrays[7]; - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr6[i]; - /* 1: loadb */ - var34 = ptr7[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var39.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[0]; - _dest.x2[1] = var39.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[1]; - _dest.x2[1] = var39.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - /* 6: loadw */ - var37 = ptr5[i]; - /* 7: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var39.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var39.x2[1]; - var38.x2[1] = _dest.i; - } - /* 8: storel */ - ptr1[i] = var38; - } - -} - -void -video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, - 48, 95, 89, 85, 89, 50, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12, - 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1, - 196, 0, 4, 32, 21, 1, 196, 1, 5, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_YUY2); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_I420_YUY2"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_YUY2); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_destination (p, 4, "d2"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_source (p, 1, "s4"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->arrays[ORC_VAR_S4] = (void *) s4; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_I420_AYUV */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var36; -#else - orc_int8 var36; -#endif - orc_int8 var37; - orc_union32 var38; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var39; -#else - orc_int8 var39; -#endif - orc_int8 var40; - orc_union32 var41; - orc_int8 var42; - orc_int8 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - - ptr0 = (orc_union32 *) d1; - ptr1 = (orc_union32 *) d2; - ptr4 = (orc_int8 *) s1; - ptr5 = (orc_int8 *) s2; - ptr6 = (orc_int8 *) s3; - ptr7 = (orc_int8 *) s4; - - /* 3: loadpb */ - var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - /* 8: loadpb */ - var39 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadupdb */ - var42 = ptr6[i >> 1]; - /* 1: loadupdb */ - var43 = ptr7[i >> 1]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var42; - _dest.x2[1] = var43; - var44.i = _dest.i; - } - /* 4: loadb */ - var37 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var45.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var45.i; - _dest.x2[1] = var44.i; - var38.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var38; - /* 9: loadb */ - var40 = ptr5[i]; - /* 10: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39; - _dest.x2[1] = var40; - var46.i = _dest.i; - } - /* 11: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var46.i; - _dest.x2[1] = var44.i; - var41.i = _dest.i; - } - /* 12: storel */ - ptr1[i] = var41; - } - -} - -#else -static void -_backup_video_convert_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var36; -#else - orc_int8 var36; -#endif - orc_int8 var37; - orc_union32 var38; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var39; -#else - orc_int8 var39; -#endif - orc_int8 var40; - orc_union32 var41; - orc_int8 var42; - orc_int8 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr1 = (orc_union32 *) ex->arrays[1]; - ptr4 = (orc_int8 *) ex->arrays[4]; - ptr5 = (orc_int8 *) ex->arrays[5]; - ptr6 = (orc_int8 *) ex->arrays[6]; - ptr7 = (orc_int8 *) ex->arrays[7]; - - /* 3: loadpb */ - var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - /* 8: loadpb */ - var39 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadupdb */ - var42 = ptr6[i >> 1]; - /* 1: loadupdb */ - var43 = ptr7[i >> 1]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var42; - _dest.x2[1] = var43; - var44.i = _dest.i; - } - /* 4: loadb */ - var37 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var45.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var45.i; - _dest.x2[1] = var44.i; - var38.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var38; - /* 9: loadb */ - var40 = ptr5[i]; - /* 10: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var39; - _dest.x2[1] = var40; - var46.i = _dest.i; - } - /* 11: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var46.i; - _dest.x2[1] = var44.i; - var41.i = _dest.i; - } - /* 12: storel */ - ptr1[i] = var41; - } - -} - -void -video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, - const guint8 * ORC_RESTRICT s4, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, - 48, 95, 65, 89, 85, 86, 11, 4, 4, 11, 4, 4, 12, 1, 1, 12, - 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, - 20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7, 196, 32, 34, 35, - 196, 33, 16, 4, 195, 0, 33, 32, 196, 33, 16, 5, 195, 1, 33, 32, - 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_AYUV); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_I420_AYUV"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_AYUV); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_destination (p, 4, "d2"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_source (p, 1, "s4"); - orc_program_add_constant (p, 1, 0x000000ff, "c1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - - orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->arrays[ORC_VAR_S4] = (void *) s4; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_YUY2_I420 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n) -{ - int i; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union32 var35; - orc_union32 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union16 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - ptr0 = (orc_union16 *) d1; - ptr1 = (orc_union16 *) d2; - ptr2 = (orc_int8 *) d3; - ptr3 = (orc_int8 *) d4; - ptr4 = (orc_union32 *) s1; - ptr5 = (orc_union32 *) s2; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var40; - /* 3: loadl */ - var36 = ptr5[i]; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var41.x2[0] = _src.x2[1]; - var42.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var41.x2[1] = _src.x2[1]; - var42.x2[1] = _src.x2[0]; - } - /* 5: storew */ - ptr1[i] = var42; - /* 6: avgub */ - var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1; - var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1; - /* 7: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 8: storeb */ - ptr3[i] = var37; - /* 9: storeb */ - ptr2[i] = var38; - } - -} - -#else -static void -_backup_video_convert_orc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union32 var35; - orc_union32 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union16 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - ptr0 = (orc_union16 *) ex->arrays[0]; - ptr1 = (orc_union16 *) ex->arrays[1]; - ptr2 = (orc_int8 *) ex->arrays[2]; - ptr3 = (orc_int8 *) ex->arrays[3]; - ptr4 = (orc_union32 *) ex->arrays[4]; - ptr5 = (orc_union32 *) ex->arrays[5]; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var40; - /* 3: loadl */ - var36 = ptr5[i]; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var41.x2[0] = _src.x2[1]; - var42.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var41.x2[1] = _src.x2[1]; - var42.x2[1] = _src.x2[0]; - } - /* 5: storew */ - ptr1[i] = var42; - /* 6: avgub */ - var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1; - var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1; - /* 7: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 8: storeb */ - ptr3[i] = var37; - /* 9: storeb */ - ptr2[i] = var38; - } - -} - -void -video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89, - 50, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11, - 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1, - 199, 32, 34, 4, 97, 0, 34, 21, 1, 199, 33, 34, 5, 97, 1, 34, - 21, 1, 39, 32, 32, 33, 199, 3, 2, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_I420); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_YUY2_I420"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_I420); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_destination (p, 1, "d4"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_source (p, 4, "s2"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 2, "t3"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_D3] = d3; - ex->arrays[ORC_VAR_D4] = d4; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_UYVY_YUY2 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - orc_union32 var33; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var32 = ptr4[i]; - /* 1: swapw */ - var33.x2[0] = ORC_SWAP_W (var32.x2[0]); - var33.x2[1] = ORC_SWAP_W (var32.x2[1]); - /* 2: storel */ - ptr0[i] = var33; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - orc_union32 var33; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var32 = ptr4[i]; - /* 1: swapw */ - var33.x2[0] = ORC_SWAP_W (var32.x2[0]); - var33.x2[1] = ORC_SWAP_W (var32.x2[1]); - /* 2: storel */ - ptr0[i] = var33; - } - } - -} - -void -video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, - 86, 89, 95, 89, 85, 89, 50, 11, 4, 4, 12, 4, 4, 21, 1, 183, - 0, 4, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_YUY2); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_UYVY_YUY2"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_YUY2); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - - orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_420_422 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - orc_int8 var33; - orc_int8 var34; - orc_int8 var35; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: copyb */ - var33 = var32; - /* 2: storeb */ - ptr0[i] = var33; - /* 3: loadb */ - var34 = ptr4[i]; - /* 4: copyb */ - var35 = var34; - /* 5: storeb */ - ptr1[i] = var35; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - orc_int8 var33; - orc_int8 var34; - orc_int8 var35; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: copyb */ - var33 = var32; - /* 2: storeb */ - ptr0[i] = var33; - /* 3: loadb */ - var34 = ptr4[i]; - /* 4: copyb */ - var35 = var34; - /* 5: storeb */ - ptr1[i] = var35; - } - } - -} - -void -video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 50, 48, 95, 52, 50, 50, 11, 1, 1, 11, 1, - 1, 12, 1, 1, 42, 0, 4, 42, 1, 4, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_420_422); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_420_422"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_420_422); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_destination (p, 1, "d2"); - orc_program_add_source (p, 1, "s1"); - - orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_420_444 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var33; - orc_union16 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr4[i]; - /* 1: splatbw */ - var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); - /* 2: storew */ - ptr0[i] = var34; - /* 3: storew */ - ptr1[i] = var34; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var33; - orc_union16 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr4[i]; - /* 1: splatbw */ - var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); - /* 2: storew */ - ptr0[i] = var34; - /* 3: storew */ - ptr1[i] = var34; - } - } - -} - -void -video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 50, 48, 95, 52, 52, 52, 11, 2, 2, 11, 2, - 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32, 97, 1, 32, 2, - 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_420_444); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_420_444"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_420_444); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_422_444 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var33; - orc_union16 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr4[i]; - /* 1: splatbw */ - var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); - /* 2: storew */ - ptr0[i] = var34; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var33; - orc_union16 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr4[i]; - /* 1: splatbw */ - var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); - /* 2: storew */ - ptr0[i] = var34; - } - } - -} - -void -video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 50, 50, 95, 52, 52, 52, 11, 2, 2, 12, 1, - 1, 20, 2, 151, 32, 4, 97, 0, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_422_444); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_422_444"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_422_444); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_444_422 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var34.i; - var36 = _src.x2[1]; - var37 = _src.x2[0]; - } - /* 2: avgub */ - var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var35; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var34.i; - var36 = _src.x2[1]; - var37 = _src.x2[0]; - } - /* 2: avgub */ - var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var35; - } - } - -} - -void -video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 50, 11, 1, 1, 12, 2, - 2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0, 32, 33, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_444_422); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_444_422"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_444_422); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_444_420 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - orc_union16 var35; - orc_union16 var36; - orc_int8 var37; - orc_union16 var38; - orc_int8 var39; - orc_int8 var40; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var35 = ptr4[i]; - /* 1: loadw */ - var36 = ptr5[i]; - /* 2: avgub */ - var38.x2[0] = - ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1; - var38.x2[1] = - ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var38.i; - var39 = _src.x2[1]; - var40 = _src.x2[0]; - } - /* 4: avgub */ - var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1; - /* 5: storeb */ - ptr0[i] = var37; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - orc_union16 var35; - orc_union16 var36; - orc_int8 var37; - orc_union16 var38; - orc_int8 var39; - orc_int8 var40; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var35 = ptr4[i]; - /* 1: loadw */ - var36 = ptr5[i]; - /* 2: avgub */ - var38.x2[0] = - ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1; - var38.x2[1] = - ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var38.i; - var39 = _src.x2[1]; - var40 = _src.x2[0]; - } - /* 4: avgub */ - var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1; - /* 5: storeb */ - ptr0[i] = var37; - } - } - -} - -void -video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 48, 11, 1, 1, 12, 2, - 2, 12, 2, 2, 20, 2, 20, 1, 20, 1, 21, 1, 39, 32, 4, 5, - 199, 33, 34, 32, 39, 0, 33, 34, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_444_420); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_444_420"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_444_420); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_planar_chroma_422_420 */ -#ifdef DISABLE_ORC -void -video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var32; - orc_int8 var33; - orc_int8 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: loadb */ - var33 = ptr5[i]; - /* 2: avgub */ - var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var34; - } - } - -} - -#else -static void -_backup_video_convert_orc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var32; - orc_int8 var33; - orc_int8 var34; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var32 = ptr4[i]; - /* 1: loadb */ - var33 = ptr5[i]; - /* 2: avgub */ - var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var34; - } - } - -} - -void -video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, - int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, - 111, 109, 97, 95, 52, 50, 50, 95, 52, 50, 48, 11, 1, 1, 12, 1, - 1, 12, 1, 1, 39, 0, 4, 5, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_422_420); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_planar_chroma_422_420"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_planar_chroma_422_420); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_YUY2_AYUV */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else - orc_union16 var37; -#endif - orc_union64 var38; - orc_union16 var39; - orc_union16 var40; - orc_union32 var41; - orc_union32 var42; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 2: loadpb */ - var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var36 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 3: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var40.x2[0]; - var41.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var40.x2[1]; - var41.x2[1] = _dest.i; - } - /* 4: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var39.i; - _dest.x2[1] = var39.i; - var42.i = _dest.i; - } - /* 5: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[0]; - _dest.x2[1] = var42.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[1]; - _dest.x2[1] = var42.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storeq */ - ptr0[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else - orc_union16 var37; -#endif - orc_union64 var38; - orc_union16 var39; - orc_union16 var40; - orc_union32 var41; - orc_union32 var42; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 2: loadpb */ - var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var36 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 3: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var40.x2[0]; - var41.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var40.x2[1]; - var41.x2[1] = _dest.i; - } - /* 4: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var39.i; - _dest.x2[1] = var39.i; - var42.i = _dest.i; - } - /* 5: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[0]; - _dest.x2[1] = var42.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[1]; - _dest.x2[1] = var42.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storeq */ - ptr0[i] = var38; - } - } - -} - -void -video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, - 89, 50, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255, - 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 33, 32, - 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21, 1, 195, 0, 34, - 35, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_AYUV); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_YUY2_AYUV"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_AYUV); - orc_program_add_destination (p, 8, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 2, 0x000000ff, "c1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 4, "t3"); - orc_program_add_temporary (p, 4, "t4"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_UYVY_AYUV */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else - orc_union16 var37; -#endif - orc_union64 var38; - orc_union16 var39; - orc_union16 var40; - orc_union32 var41; - orc_union32 var42; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 2: loadpb */ - var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var36 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 3: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var39.x2[0]; - var41.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var39.x2[1]; - var41.x2[1] = _dest.i; - } - /* 4: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var40.i; - _dest.x2[1] = var40.i; - var42.i = _dest.i; - } - /* 5: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[0]; - _dest.x2[1] = var42.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[1]; - _dest.x2[1] = var42.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storeq */ - ptr0[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var36; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var37; -#else - orc_union16 var37; -#endif - orc_union64 var38; - orc_union16 var39; - orc_union16 var40; - orc_union32 var41; - orc_union32 var42; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 2: loadpb */ - var37.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var37.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var36 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 3: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var39.x2[0]; - var41.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var39.x2[1]; - var41.x2[1] = _dest.i; - } - /* 4: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var40.i; - _dest.x2[1] = var40.i; - var42.i = _dest.i; - } - /* 5: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[0]; - _dest.x2[1] = var42.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var41.x2[1]; - _dest.x2[1] = var42.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storeq */ - ptr0[i] = var38; - } - } - -} - -void -video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, - 86, 89, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255, - 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 32, 33, - 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21, 1, 195, 0, 34, - 35, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_AYUV); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_UYVY_AYUV"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_AYUV); - orc_program_add_destination (p, 8, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 2, 0x000000ff, "c1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 4, "t3"); - orc_program_add_temporary (p, 4, "t4"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_YUY2_Y42B */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var33; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var33 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var33.x2[0]; - var37.x2[0] = _src.x2[1]; - var34.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var33.x2[1]; - var37.x2[1] = _src.x2[1]; - var34.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var34; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var37.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 4: storeb */ - ptr2[i] = var35; - /* 5: storeb */ - ptr1[i] = var36; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var33; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var33 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var33.x2[0]; - var37.x2[0] = _src.x2[1]; - var34.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var33.x2[1]; - var37.x2[1] = _src.x2[1]; - var34.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var34; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var37.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 4: storeb */ - ptr2[i] = var35; - /* 5: storeb */ - ptr1[i] = var36; - } - } - -} - -void -video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, - 89, 50, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, - 12, 4, 4, 20, 2, 21, 1, 199, 32, 0, 4, 199, 2, 1, 32, 2, - 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_Y42B); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_YUY2_Y42B"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_Y42B); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 1, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_UYVY_Y42B */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var33; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var33 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var33.x2[0]; - var34.x2[0] = _src.x2[1]; - var37.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var33.x2[1]; - var34.x2[1] = _src.x2[1]; - var37.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var34; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var37.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 4: storeb */ - ptr2[i] = var35; - /* 5: storeb */ - ptr1[i] = var36; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var33; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var33 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var33.x2[0]; - var34.x2[0] = _src.x2[1]; - var37.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var33.x2[1]; - var34.x2[1] = _src.x2[1]; - var37.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var34; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var37.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 4: storeb */ - ptr2[i] = var35; - /* 5: storeb */ - ptr1[i] = var36; - } - } - -} - -void -video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, - 86, 89, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, - 12, 4, 4, 20, 2, 21, 1, 199, 0, 32, 4, 199, 2, 1, 32, 2, - 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_Y42B); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_UYVY_Y42B"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_Y42B); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 1, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_YUY2_Y444 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_union16 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union16 var39; - orc_int8 var40; - orc_int8 var41; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var36.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var36.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var36; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var39.i; - var40 = _src.x2[1]; - var41 = _src.x2[0]; - } - /* 4: splatbw */ - var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); - /* 5: storew */ - ptr1[i] = var37; - /* 6: splatbw */ - var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); - /* 7: storew */ - ptr2[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_union16 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union16 var39; - orc_int8 var40; - orc_int8 var41; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var36.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var36.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var36; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var39.i; - var40 = _src.x2[1]; - var41 = _src.x2[0]; - } - /* 4: splatbw */ - var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); - /* 5: storew */ - ptr1[i] = var37; - /* 6: splatbw */ - var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); - /* 7: storew */ - ptr2[i] = var38; - } - } - -} - -void -video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, - 89, 50, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2, - 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 32, 0, 4, 199, - 34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_Y444); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_YUY2_Y444"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_YUY2_Y444); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_destination (p, 2, "d3"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_UYVY_Y444 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_union16 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union16 var39; - orc_int8 var40; - orc_int8 var41; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var36.x2[0] = _src.x2[1]; - var39.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var36.x2[1] = _src.x2[1]; - var39.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var36; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var39.i; - var40 = _src.x2[1]; - var41 = _src.x2[0]; - } - /* 4: splatbw */ - var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); - /* 5: storew */ - ptr1[i] = var37; - /* 6: splatbw */ - var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); - /* 7: storew */ - ptr2[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_union16 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union16 var39; - orc_int8 var40; - orc_int8 var41; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var36.x2[0] = _src.x2[1]; - var39.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var36.x2[1] = _src.x2[1]; - var39.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var36; - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var39.i; - var40 = _src.x2[1]; - var41 = _src.x2[0]; - } - /* 4: splatbw */ - var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); - /* 5: storew */ - ptr1[i] = var37; - /* 6: splatbw */ - var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); - /* 7: storew */ - ptr2[i] = var38; - } - } - -} - -void -video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, - 86, 89, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2, - 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 0, 32, 4, 199, - 34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_Y444); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_UYVY_Y444"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_Y444); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_destination (p, 2, "d3"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_UYVY_I420 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n) -{ - int i; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union32 var35; - orc_union32 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union16 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - ptr0 = (orc_union16 *) d1; - ptr1 = (orc_union16 *) d2; - ptr2 = (orc_int8 *) d3; - ptr3 = (orc_int8 *) d4; - ptr4 = (orc_union32 *) s1; - ptr5 = (orc_union32 *) s2; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var39; - /* 3: loadl */ - var36 = ptr5[i]; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var41.x2[0] = _src.x2[1]; - var42.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var41.x2[1] = _src.x2[1]; - var42.x2[1] = _src.x2[0]; - } - /* 5: storew */ - ptr1[i] = var41; - /* 6: avgub */ - var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 7: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 8: storeb */ - ptr3[i] = var37; - /* 9: storeb */ - ptr2[i] = var38; - } - -} - -#else -static void -_backup_video_convert_orc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union32 var35; - orc_union32 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union16 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - ptr0 = (orc_union16 *) ex->arrays[0]; - ptr1 = (orc_union16 *) ex->arrays[1]; - ptr2 = (orc_int8 *) ex->arrays[2]; - ptr3 = (orc_int8 *) ex->arrays[3]; - ptr4 = (orc_union32 *) ex->arrays[4]; - ptr5 = (orc_union32 *) ex->arrays[5]; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var35 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var35.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var35.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: storew */ - ptr0[i] = var39; - /* 3: loadl */ - var36 = ptr5[i]; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var36.x2[0]; - var41.x2[0] = _src.x2[1]; - var42.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var36.x2[1]; - var41.x2[1] = _src.x2[1]; - var42.x2[1] = _src.x2[0]; - } - /* 5: storew */ - ptr1[i] = var41; - /* 6: avgub */ - var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 7: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 8: storeb */ - ptr3[i] = var37; - /* 9: storeb */ - ptr2[i] = var38; - } - -} - -void -video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, - guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, - 89, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11, - 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1, - 199, 34, 32, 4, 97, 0, 34, 21, 1, 199, 34, 33, 5, 97, 1, 34, - 21, 1, 39, 32, 32, 33, 199, 3, 2, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_I420); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_UYVY_I420"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_UYVY_I420); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_destination (p, 1, "d4"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_source (p, 4, "s2"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 2, "t3"); - - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2, - ORC_VAR_D1); - orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_D3] = d3; - ex->arrays[ORC_VAR_D4] = d4; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_I420 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union64 *ORC_RESTRICT ptr4; - const orc_union64 *ORC_RESTRICT ptr5; - orc_union64 var40; - orc_union16 var41; - orc_union64 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_union32 var46; - orc_union32 var47; - orc_union32 var48; - orc_union32 var49; - orc_union32 var50; - orc_union16 var51; - orc_union16 var52; - orc_int8 var53; - orc_int8 var54; - orc_int8 var55; - orc_int8 var56; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.x2[0]; - var46.x2[0] = _src.x2[1]; - var47.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var40.x2[1]; - var46.x2[1] = _src.x2[1]; - var47.x2[1] = _src.x2[0]; - } - /* 2: select1wb */ - { - orc_union16 _src; - _src.i = var47.x2[0]; - var41.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var47.x2[1]; - var41.x2[1] = _src.x2[1]; - } - /* 3: storew */ - ptr0[i] = var41; - /* 4: loadq */ - var42 = ptr5[i]; - /* 5: splitlw */ - { - orc_union32 _src; - _src.i = var42.x2[0]; - var48.x2[0] = _src.x2[1]; - var49.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var42.x2[1]; - var48.x2[1] = _src.x2[1]; - var49.x2[1] = _src.x2[0]; - } - /* 6: select1wb */ - { - orc_union16 _src; - _src.i = var49.x2[0]; - var43.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var49.x2[1]; - var43.x2[1] = _src.x2[1]; - } - /* 7: storew */ - ptr1[i] = var43; - /* 8: avgub */ - var50.x4[0] = - ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1; - var50.x4[1] = - ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1; - var50.x4[2] = - ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1; - var50.x4[3] = - ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1; - /* 9: splitwb */ - { - orc_union16 _src; - _src.i = var50.x2[0]; - var51.x2[0] = _src.x2[1]; - var52.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var50.x2[1]; - var51.x2[1] = _src.x2[1]; - var52.x2[1] = _src.x2[0]; - } - /* 10: splitwb */ - { - orc_union16 _src; - _src.i = var52.i; - var53 = _src.x2[1]; - var54 = _src.x2[0]; - } - /* 11: avgub */ - var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1; - /* 12: storeb */ - ptr2[i] = var44; - /* 13: splitwb */ - { - orc_union16 _src; - _src.i = var51.i; - var55 = _src.x2[1]; - var56 = _src.x2[0]; - } - /* 14: avgub */ - var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1; - /* 15: storeb */ - ptr3[i] = var45; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - orc_int8 *ORC_RESTRICT ptr3; - const orc_union64 *ORC_RESTRICT ptr4; - const orc_union64 *ORC_RESTRICT ptr5; - orc_union64 var40; - orc_union16 var41; - orc_union64 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_union32 var46; - orc_union32 var47; - orc_union32 var48; - orc_union32 var49; - orc_union32 var50; - orc_union16 var51; - orc_union16 var52; - orc_int8 var53; - orc_int8 var54; - orc_int8 var55; - orc_int8 var56; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.x2[0]; - var46.x2[0] = _src.x2[1]; - var47.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var40.x2[1]; - var46.x2[1] = _src.x2[1]; - var47.x2[1] = _src.x2[0]; - } - /* 2: select1wb */ - { - orc_union16 _src; - _src.i = var47.x2[0]; - var41.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var47.x2[1]; - var41.x2[1] = _src.x2[1]; - } - /* 3: storew */ - ptr0[i] = var41; - /* 4: loadq */ - var42 = ptr5[i]; - /* 5: splitlw */ - { - orc_union32 _src; - _src.i = var42.x2[0]; - var48.x2[0] = _src.x2[1]; - var49.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var42.x2[1]; - var48.x2[1] = _src.x2[1]; - var49.x2[1] = _src.x2[0]; - } - /* 6: select1wb */ - { - orc_union16 _src; - _src.i = var49.x2[0]; - var43.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var49.x2[1]; - var43.x2[1] = _src.x2[1]; - } - /* 7: storew */ - ptr1[i] = var43; - /* 8: avgub */ - var50.x4[0] = - ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1; - var50.x4[1] = - ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1; - var50.x4[2] = - ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1; - var50.x4[3] = - ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1; - /* 9: splitwb */ - { - orc_union16 _src; - _src.i = var50.x2[0]; - var51.x2[0] = _src.x2[1]; - var52.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var50.x2[1]; - var51.x2[1] = _src.x2[1]; - var52.x2[1] = _src.x2[0]; - } - /* 10: splitwb */ - { - orc_union16 _src; - _src.i = var52.i; - var53 = _src.x2[1]; - var54 = _src.x2[0]; - } - /* 11: avgub */ - var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1; - /* 12: storeb */ - ptr2[i] = var44; - /* 13: splitwb */ - { - orc_union16 _src; - _src.i = var51.i; - var55 = _src.x2[1]; - var56 = _src.x2[0]; - } - /* 14: avgub */ - var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1; - /* 15: storeb */ - ptr3[i] = var45; - } - } - -} - -void -video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, - 11, 1, 1, 12, 8, 8, 12, 8, 8, 20, 4, 20, 4, 20, 4, 20, - 4, 20, 2, 20, 2, 20, 1, 20, 1, 21, 1, 198, 33, 32, 4, 21, - 1, 189, 0, 32, 21, 1, 198, 34, 32, 5, 21, 1, 189, 1, 32, 21, - 2, 39, 35, 33, 34, 21, 1, 199, 37, 36, 35, 199, 38, 39, 36, 39, - 2, 38, 39, 199, 38, 39, 37, 39, 3, 38, 39, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_I420); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_I420"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_I420); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 2, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_destination (p, 1, "d4"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_source (p, 8, "s2"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 4, "t3"); - orc_program_add_temporary (p, 4, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 1, "t7"); - orc_program_add_temporary (p, 1, "t8"); - - orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_D4] = d4; - ex->params[ORC_VAR_D4] = d4_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_YUY2 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var37 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var37.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var37.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var39.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 3: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 4: select1wb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var44.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var44.x2[1] = _src.x2[1]; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[0]; - _dest.x2[1] = var43.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[1]; - _dest.x2[1] = var43.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storel */ - ptr0[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var37 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var37.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var37.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var39.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 3: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 4: select1wb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var44.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var44.x2[1] = _src.x2[1]; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[0]; - _dest.x2[1] = var43.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[1]; - _dest.x2[1] = var43.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storel */ - ptr0[i] = var38; - } - } - -} - -void -video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 89, 85, 89, 50, 11, 4, 4, 12, 8, 8, 20, 2, 20, - 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, - 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35, 21, 1, 196, 0, - 32, 33, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_YUY2); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_YUY2"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_YUY2); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 4, "t4"); - orc_program_add_temporary (p, 4, "t5"); - - orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_UYVY */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var37 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var37.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var37.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var39.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 3: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 4: select1wb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var44.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var44.x2[1] = _src.x2[1]; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[0]; - _dest.x2[1] = var44.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[1]; - _dest.x2[1] = var44.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storel */ - ptr0[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var37 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var37.x2[0]; - var39.x2[0] = _src.x2[1]; - var40.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var37.x2[1]; - var39.x2[1] = _src.x2[1]; - var40.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var39.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 3: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 4: select1wb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var44.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var44.x2[1] = _src.x2[1]; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[0]; - _dest.x2[1] = var44.x2[0]; - var38.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[1]; - _dest.x2[1] = var44.x2[1]; - var38.x2[1] = _dest.i; - } - /* 6: storel */ - ptr0[i] = var38; - } - } - -} - -void -video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 85, 89, 86, 89, 11, 4, 4, 12, 8, 8, 20, 2, 20, - 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, - 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35, 21, 1, 196, 0, - 33, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_UYVY); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_UYVY"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_UYVY); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 4, "t4"); - orc_program_add_temporary (p, 4, "t5"); - - orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_Y42B */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var36 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var36.x2[0]; - var40.x2[0] = _src.x2[1]; - var41.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var36.x2[1]; - var40.x2[1] = _src.x2[1]; - var41.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 3: avgub */ - var44.x2[0] = - ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; - var44.x2[1] = - ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var44.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 5: storeb */ - ptr2[i] = var37; - /* 6: storeb */ - ptr1[i] = var38; - /* 7: select1wb */ - { - orc_union16 _src; - _src.i = var41.x2[0]; - var39.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var41.x2[1]; - var39.x2[1] = _src.x2[1]; - } - /* 8: storew */ - ptr0[i] = var39; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union16 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var36; - orc_int8 var37; - orc_int8 var38; - orc_union16 var39; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var36 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var36.x2[0]; - var40.x2[0] = _src.x2[1]; - var41.x2[0] = _src.x2[0]; - } - { - orc_union32 _src; - _src.i = var36.x2[1]; - var40.x2[1] = _src.x2[1]; - var41.x2[1] = _src.x2[0]; - } - /* 2: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 3: avgub */ - var44.x2[0] = - ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; - var44.x2[1] = - ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var44.i; - var37 = _src.x2[1]; - var38 = _src.x2[0]; - } - /* 5: storeb */ - ptr2[i] = var37; - /* 6: storeb */ - ptr1[i] = var38; - /* 7: select1wb */ - { - orc_union16 _src; - _src.i = var41.x2[0]; - var39.x2[0] = _src.x2[1]; - } - { - orc_union16 _src; - _src.i = var41.x2[1]; - var39.x2[1] = _src.x2[1]; - } - /* 8: storew */ - ptr0[i] = var39; - } - } - -} - -void -video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, - 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21, 1, 198, 33, 32, - 4, 198, 34, 35, 33, 21, 1, 39, 34, 34, 35, 199, 2, 1, 34, 21, - 1, 189, 0, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_Y42B); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_Y42B"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_Y42B); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_destination (p, 1, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 2, "t4"); - - orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1, - ORC_VAR_D1, ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_Y444 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - int i; - int j; - orc_int8 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - orc_union16 var38; - orc_union16 var39; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); - ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var34 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var34.i; - var38.i = _src.x2[1]; - var39.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var38.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 3: storeb */ - ptr2[i] = var35; - /* 4: storeb */ - ptr1[i] = var36; - /* 5: select1wb */ - { - orc_union16 _src; - _src.i = var39.i; - var37 = _src.x2[1]; - } - /* 6: storeb */ - ptr0[i] = var37; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_int8 *ORC_RESTRICT ptr0; - orc_int8 *ORC_RESTRICT ptr1; - orc_int8 *ORC_RESTRICT ptr2; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - orc_union16 var38; - orc_union16 var39; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); - ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var34 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var34.i; - var38.i = _src.x2[1]; - var39.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var38.i; - var35 = _src.x2[1]; - var36 = _src.x2[0]; - } - /* 3: storeb */ - ptr2[i] = var35; - /* 4: storeb */ - ptr1[i] = var36; - /* 5: select1wb */ - { - orc_union16 _src; - _src.i = var39.i; - var37 = _src.x2[1]; - } - /* 6: storeb */ - ptr0[i] = var37; - } - } - -} - -void -video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, - guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, - int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 89, 52, 52, 52, 11, 1, 1, 11, 1, 1, 11, 1, 1, - 12, 4, 4, 20, 2, 20, 2, 198, 33, 32, 4, 199, 2, 1, 33, 189, - 0, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_Y444); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_Y444"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_Y444); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_destination (p, 1, "d2"); - orc_program_add_destination (p, 1, "d3"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1, - ORC_VAR_D1, ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_D2] = d2; - ex->params[ORC_VAR_D2] = d2_stride; - ex->arrays[ORC_VAR_D3] = d3; - ex->params[ORC_VAR_D3] = d3_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y42B_YUY2 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr5[i]; - /* 1: loadb */ - var34 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var37.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[0]; - _dest.x2[1] = var37.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[1]; - _dest.x2[1] = var37.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr5[i]; - /* 1: loadb */ - var34 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var37.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[0]; - _dest.x2[1] = var37.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var35.x2[1]; - _dest.x2[1] = var37.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - } - } - -} - -void -video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 50, 66, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 1, 1, - 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 4, 32, 2, - 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_YUY2); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y42B_YUY2"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_YUY2); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y42B_UYVY */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr5[i]; - /* 1: loadb */ - var34 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var37.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var35.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var35.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var33; - orc_int8 var34; - orc_union16 var35; - orc_union32 var36; - orc_union16 var37; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var33 = ptr5[i]; - /* 1: loadb */ - var34 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var33; - _dest.x2[1] = var34; - var37.i = _dest.i; - } - /* 3: loadw */ - var35 = ptr4[i]; - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[0]; - _dest.x2[1] = var35.x2[0]; - var36.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var37.x2[1]; - _dest.x2[1] = var35.x2[1]; - var36.x2[1] = _dest.i; - } - /* 5: storel */ - ptr0[i] = var36; - } - } - -} - -void -video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 50, 66, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 1, 1, - 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 32, 4, 2, - 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_UYVY); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y42B_UYVY"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_UYVY); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_temporary (p, 2, "t1"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y42B_AYUV */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var36; - orc_int8 var37; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var38; -#else - orc_union16 var38; -#endif - orc_union16 var39; - orc_union64 var40; - orc_union16 var41; - orc_union32 var42; - orc_union32 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - /* 3: loadpb */ - var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var36 = ptr5[i]; - /* 1: loadb */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var41.i = _dest.i; - } - /* 4: loadw */ - var39 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[0]; - _dest.x2[1] = var39.x2[0]; - var42.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[1]; - _dest.x2[1] = var39.x2[1]; - var42.x2[1] = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.i; - _dest.x2[1] = var41.i; - var43.i = _dest.i; - } - /* 7: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var42.x2[0]; - _dest.x2[1] = var43.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var42.x2[1]; - _dest.x2[1] = var43.x2[1]; - var40.x2[1] = _dest.i; - } - /* 8: storeq */ - ptr0[i] = var40; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union64 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var36; - orc_int8 var37; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var38; -#else - orc_union16 var38; -#endif - orc_union16 var39; - orc_union64 var40; - orc_union16 var41; - orc_union32 var42; - orc_union32 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - /* 3: loadpb */ - var38.x2[0] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - var38.x2[1] = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var36 = ptr5[i]; - /* 1: loadb */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var41.i = _dest.i; - } - /* 4: loadw */ - var39 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[0]; - _dest.x2[1] = var39.x2[0]; - var42.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[1]; - _dest.x2[1] = var39.x2[1]; - var42.x2[1] = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var41.i; - _dest.x2[1] = var41.i; - var43.i = _dest.i; - } - /* 7: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var42.x2[0]; - _dest.x2[1] = var43.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union32 _dest; - _dest.x2[0] = var42.x2[1]; - _dest.x2[1] = var43.x2[1]; - var40.x2[1] = _dest.i; - } - /* 8: storeq */ - ptr0[i] = var40; - } - } - -} - -void -video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 50, 66, 95, 65, 89, 85, 86, 11, 8, 8, 12, 2, 2, 12, 1, 1, - 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, - 4, 196, 32, 5, 6, 21, 1, 196, 35, 16, 4, 195, 34, 32, 32, 21, - 1, 195, 0, 35, 34, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_AYUV); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y42B_AYUV"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y42B_AYUV); - orc_program_add_destination (p, 8, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_constant (p, 1, 0x000000ff, "c1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 4, "t3"); - orc_program_add_temporary (p, 4, "t4"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y444_YUY2 */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_union16 *ORC_RESTRICT ptr6; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var36 = ptr5[i]; - /* 1: loadw */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[0]; - _dest.x2[1] = var37.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[1]; - _dest.x2[1] = var37.x2[1]; - var40.x2[1] = _dest.i; - } - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 4: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 5: loadw */ - var38 = ptr4[i]; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[0]; - _dest.x2[1] = var43.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[1]; - _dest.x2[1] = var43.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_union16 *ORC_RESTRICT ptr6; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var36 = ptr5[i]; - /* 1: loadw */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[0]; - _dest.x2[1] = var37.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[1]; - _dest.x2[1] = var37.x2[1]; - var40.x2[1] = _dest.i; - } - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 4: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 5: loadw */ - var38 = ptr4[i]; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[0]; - _dest.x2[1] = var43.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var38.x2[1]; - _dest.x2[1] = var43.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - } - -} - -void -video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 52, 52, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 2, 2, - 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5, - 6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21, 1, 196, 0, 4, - 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_YUY2); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y444_YUY2"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_YUY2); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_source (p, 2, "s3"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 2, "t4"); - - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y444_UYVY */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_union16 *ORC_RESTRICT ptr6; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var36 = ptr5[i]; - /* 1: loadw */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[0]; - _dest.x2[1] = var37.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[1]; - _dest.x2[1] = var37.x2[1]; - var40.x2[1] = _dest.i; - } - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 4: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 5: loadw */ - var38 = ptr4[i]; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[0]; - _dest.x2[1] = var38.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[1]; - _dest.x2[1] = var38.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - const orc_union16 *ORC_RESTRICT ptr6; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union16 var41; - orc_union16 var42; - orc_union16 var43; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var36 = ptr5[i]; - /* 1: loadw */ - var37 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[0]; - _dest.x2[1] = var37.x2[0]; - var40.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var36.x2[1]; - _dest.x2[1] = var37.x2[1]; - var40.x2[1] = _dest.i; - } - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var41.i = _src.x2[1]; - var42.i = _src.x2[0]; - } - /* 4: avgub */ - var43.x2[0] = - ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; - var43.x2[1] = - ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; - /* 5: loadw */ - var38 = ptr4[i]; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[0]; - _dest.x2[1] = var38.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var43.x2[1]; - _dest.x2[1] = var38.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - } - -} - -void -video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 52, 52, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 2, 2, - 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5, - 6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21, 1, 196, 0, 32, - 4, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_UYVY); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y444_UYVY"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_UYVY); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_source (p, 2, "s3"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 2, "t4"); - - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_Y444_AYUV */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var34; - orc_int8 var35; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var36; -#else - orc_int8 var36; -#endif - orc_int8 var37; - orc_union32 var38; - orc_union16 var39; - orc_union16 var40; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); - ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); - - /* 3: loadpb */ - var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var34 = ptr5[i]; - /* 1: loadb */ - var35 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var34; - _dest.x2[1] = var35; - var39.i = _dest.i; - } - /* 4: loadb */ - var37 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var40.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var40.i; - _dest.x2[1] = var39.i; - var38.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var38; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var34; - orc_int8 var35; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var36; -#else - orc_int8 var36; -#endif - orc_int8 var37; - orc_union32 var38; - orc_union16 var39; - orc_union16 var40; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); - ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); - - /* 3: loadpb */ - var36 = (int) 0x000000ff; /* 255 or 1.25987e-321f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var34 = ptr5[i]; - /* 1: loadb */ - var35 = ptr6[i]; - /* 2: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var34; - _dest.x2[1] = var35; - var39.i = _dest.i; - } - /* 4: loadb */ - var37 = ptr4[i]; - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var36; - _dest.x2[1] = var37; - var40.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var40.i; - _dest.x2[1] = var39.i; - var38.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var38; - } - } - -} - -void -video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, - const guint8 * ORC_RESTRICT s2, int s2_stride, - const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, - 52, 52, 95, 65, 89, 85, 86, 11, 4, 4, 12, 1, 1, 12, 1, 1, - 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 196, 32, 5, - 6, 196, 33, 16, 4, 195, 0, 33, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_AYUV); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_Y444_AYUV"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_Y444_AYUV); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_constant (p, 1, 0x000000ff, "c1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_S2] = s2_stride; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_S3] = s3_stride; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_ARGB */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = p1; - /* 11: loadpw */ - var49.i = p2; - /* 14: loadpw */ - var50.i = p3; - /* 17: loadpw */ - var51.i = p4; - /* 20: loadpw */ - var52.i = p5; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var59; - _dest.x2[1] = var74; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var75; - _dest.x2[1] = var76; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = ex->params[24]; - /* 11: loadpw */ - var49.i = ex->params[25]; - /* 14: loadpw */ - var50.i = ex->params[26]; - /* 17: loadpw */ - var51.i = ex->params[27]; - /* 20: loadpw */ - var52.i = ex->params[28]; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var59; - _dest.x2[1] = var74; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var75; - _dest.x2[1] = var76; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -void -video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 65, 82, 71, 66, 11, 4, 4, 12, 4, 4, 14, 1, 128, - 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20, - 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, - 2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198, - 38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37, - 34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39, - 90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40, - 90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44, - 41, 196, 39, 32, 42, 196, 41, 43, 44, 195, 45, 39, 41, 21, 2, 33, - 0, 45, 16, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_ARGB); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_ARGB"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_ARGB); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_parameter (p, 2, "p3"); - orc_program_add_parameter (p, 2, "p4"); - orc_program_add_parameter (p, 2, "p5"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); - orc_program_add_temporary (p, 2, "t9"); - orc_program_add_temporary (p, 2, "t10"); - orc_program_add_temporary (p, 1, "t11"); - orc_program_add_temporary (p, 1, "t12"); - orc_program_add_temporary (p, 1, "t13"); - orc_program_add_temporary (p, 4, "t14"); - - orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, - ORC_VAR_T14, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T1, - ORC_VAR_T11, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T12, - ORC_VAR_T13, ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - ex->params[ORC_VAR_P5] = p5; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_BGRA */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = p1; - /* 11: loadpw */ - var49.i = p2; - /* 14: loadpw */ - var50.i = p3; - /* 17: loadpw */ - var51.i = p4; - /* 20: loadpw */ - var52.i = p5; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var76; - _dest.x2[1] = var75; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var74; - _dest.x2[1] = var59; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = ex->params[24]; - /* 11: loadpw */ - var49.i = ex->params[25]; - /* 14: loadpw */ - var50.i = ex->params[26]; - /* 17: loadpw */ - var51.i = ex->params[27]; - /* 20: loadpw */ - var52.i = ex->params[28]; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var76; - _dest.x2[1] = var75; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var74; - _dest.x2[1] = var59; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -void -video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4, 4, 14, 1, 128, - 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20, - 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, - 2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198, - 38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37, - 34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39, - 90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40, - 90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44, - 41, 196, 41, 44, 43, 196, 39, 42, 32, 195, 45, 41, 39, 21, 2, 33, - 0, 45, 16, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_BGRA); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_BGRA"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_BGRA); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_parameter (p, 2, "p3"); - orc_program_add_parameter (p, 2, "p4"); - orc_program_add_parameter (p, 2, "p5"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); - orc_program_add_temporary (p, 2, "t9"); - orc_program_add_temporary (p, 2, "t10"); - orc_program_add_temporary (p, 1, "t11"); - orc_program_add_temporary (p, 1, "t12"); - orc_program_add_temporary (p, 1, "t13"); - orc_program_add_temporary (p, 4, "t14"); - - orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, - ORC_VAR_T14, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13, - ORC_VAR_T12, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11, - ORC_VAR_T1, ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10, - ORC_VAR_T8, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - ex->params[ORC_VAR_P5] = p5; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_ABGR */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = p1; - /* 11: loadpw */ - var49.i = p2; - /* 14: loadpw */ - var50.i = p3; - /* 17: loadpw */ - var51.i = p4; - /* 20: loadpw */ - var52.i = p5; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var59; - _dest.x2[1] = var76; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var75; - _dest.x2[1] = var74; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = ex->params[24]; - /* 11: loadpw */ - var49.i = ex->params[25]; - /* 14: loadpw */ - var50.i = ex->params[26]; - /* 17: loadpw */ - var51.i = ex->params[27]; - /* 20: loadpw */ - var52.i = ex->params[28]; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var59; - _dest.x2[1] = var76; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var75; - _dest.x2[1] = var74; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -void -video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 1, 128, - 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20, - 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, - 2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198, - 38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37, - 34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39, - 90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40, - 90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44, - 41, 196, 41, 32, 44, 196, 39, 43, 42, 195, 45, 41, 39, 21, 2, 33, - 0, 45, 16, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_ABGR); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_ABGR"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_ABGR); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_parameter (p, 2, "p3"); - orc_program_add_parameter (p, 2, "p4"); - orc_program_add_parameter (p, 2, "p5"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); - orc_program_add_temporary (p, 2, "t9"); - orc_program_add_temporary (p, 2, "t10"); - orc_program_add_temporary (p, 1, "t11"); - orc_program_add_temporary (p, 1, "t12"); - orc_program_add_temporary (p, 1, "t13"); - orc_program_add_temporary (p, 4, "t14"); - - orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, - ORC_VAR_T14, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T1, - ORC_VAR_T13, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T12, - ORC_VAR_T11, ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10, - ORC_VAR_T8, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - ex->params[ORC_VAR_P5] = p5; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_AYUV_RGBA */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - int i; - int j; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); - ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = p1; - /* 11: loadpw */ - var49.i = p2; - /* 14: loadpw */ - var50.i = p3; - /* 17: loadpw */ - var51.i = p4; - /* 20: loadpw */ - var52.i = p5; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var74; - _dest.x2[1] = var75; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var76; - _dest.x2[1] = var59; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -#else -static void -_backup_video_convert_orc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int j; - int n = ex->n; - int m = ex->params[ORC_VAR_A1]; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var46; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var47; -#else - orc_union32 var47; -#endif - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var53; -#else - orc_union32 var53; -#endif - orc_union32 var54; - orc_union32 var55; - orc_union16 var56; - orc_union16 var57; - orc_int8 var58; - orc_int8 var59; - orc_int8 var60; - orc_int8 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_union16 var71; - orc_union16 var72; - orc_union16 var73; - orc_int8 var74; - orc_int8 var75; - orc_int8 var76; - orc_union16 var77; - orc_union16 var78; - orc_union32 var79; - - for (j = 0; j < m; j++) { - ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); - ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); - - /* 1: loadpb */ - var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpw */ - var48.i = ex->params[24]; - /* 11: loadpw */ - var49.i = ex->params[25]; - /* 14: loadpw */ - var50.i = ex->params[26]; - /* 17: loadpw */ - var51.i = ex->params[27]; - /* 20: loadpw */ - var52.i = ex->params[28]; - /* 29: loadpb */ - var53.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var53.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var46 = ptr4[i]; - /* 2: subb */ - var55.x4[0] = var46.x4[0] - var47.x4[0]; - var55.x4[1] = var46.x4[1] - var47.x4[1]; - var55.x4[2] = var46.x4[2] - var47.x4[2]; - var55.x4[3] = var46.x4[3] - var47.x4[3]; - /* 3: splitlw */ - { - orc_union32 _src; - _src.i = var55.i; - var56.i = _src.x2[1]; - var57.i = _src.x2[0]; - } - /* 4: splitwb */ - { - orc_union16 _src; - _src.i = var57.i; - var58 = _src.x2[1]; - var59 = _src.x2[0]; - } - /* 5: splitwb */ - { - orc_union16 _src; - _src.i = var56.i; - var60 = _src.x2[1]; - var61 = _src.x2[0]; - } - /* 6: splatbw */ - var62.i = ((var58 & 0xff) << 8) | (var58 & 0xff); - /* 7: splatbw */ - var63.i = ((var61 & 0xff) << 8) | (var61 & 0xff); - /* 8: splatbw */ - var64.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 10: mulhsw */ - var65.i = (var62.i * var48.i) >> 16; - /* 12: mulhsw */ - var66.i = (var64.i * var49.i) >> 16; - /* 13: addssw */ - var67.i = ORC_CLAMP_SW (var65.i + var66.i); - /* 15: mulhsw */ - var68.i = (var63.i * var50.i) >> 16; - /* 16: addssw */ - var69.i = ORC_CLAMP_SW (var65.i + var68.i); - /* 18: mulhsw */ - var70.i = (var63.i * var51.i) >> 16; - /* 19: addssw */ - var71.i = ORC_CLAMP_SW (var65.i + var70.i); - /* 21: mulhsw */ - var72.i = (var64.i * var52.i) >> 16; - /* 22: addssw */ - var73.i = ORC_CLAMP_SW (var71.i + var72.i); - /* 23: convssswb */ - var74 = ORC_CLAMP_SB (var67.i); - /* 24: convssswb */ - var75 = ORC_CLAMP_SB (var73.i); - /* 25: convssswb */ - var76 = ORC_CLAMP_SB (var69.i); - /* 26: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var74; - _dest.x2[1] = var75; - var77.i = _dest.i; - } - /* 27: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var76; - _dest.x2[1] = var59; - var78.i = _dest.i; - } - /* 28: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var77.i; - _dest.x2[1] = var78.i; - var79.i = _dest.i; - } - /* 30: addb */ - var54.x4[0] = var79.x4[0] + var53.x4[0]; - var54.x4[1] = var79.x4[1] + var53.x4[1]; - var54.x4[2] = var79.x4[2] + var53.x4[2]; - var54.x4[3] = var79.x4[3] + var53.x4[3]; - /* 31: storel */ - ptr0[i] = var54; - } - } - -} - -void -video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, - const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, - int p4, int p5, int n, int m) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, - 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, - 85, 86, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 1, 128, - 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20, - 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, - 2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198, - 38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37, - 34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39, - 90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40, - 90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44, - 41, 196, 39, 42, 43, 196, 41, 44, 32, 195, 45, 39, 41, 21, 2, 33, - 0, 45, 16, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_RGBA); -#else - p = orc_program_new (); - orc_program_set_2d (p); - orc_program_set_name (p, "video_convert_orc_convert_AYUV_RGBA"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_AYUV_RGBA); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_parameter (p, 2, "p3"); - orc_program_add_parameter (p, 2, "p4"); - orc_program_add_parameter (p, 2, "p5"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); - orc_program_add_temporary (p, 2, "t9"); - orc_program_add_temporary (p, 2, "t10"); - orc_program_add_temporary (p, 1, "t11"); - orc_program_add_temporary (p, 1, "t12"); - orc_program_add_temporary (p, 1, "t13"); - orc_program_add_temporary (p, 4, "t14"); - - orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, - ORC_VAR_T14, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11, - ORC_VAR_T12, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13, - ORC_VAR_T1, ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8, - ORC_VAR_T10, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ORC_EXECUTOR_M (ex) = m; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_D1] = d1_stride; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_S1] = s1_stride; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - ex->params[ORC_VAR_P5] = p5; - - func = c->exec; - func (ex); -} -#endif - - -/* video_convert_orc_convert_I420_BGRA */ -#ifdef DISABLE_ORC -void -video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, - int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var42; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var43; -#else - orc_int8 var43; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var44; -#else - orc_int8 var44; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var45; -#else - orc_int8 var45; -#endif - orc_union16 var46; - orc_union16 var47; - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var51; -#else - orc_int8 var51; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var52; -#else - orc_union32 var52; -#endif - orc_union32 var53; - orc_int8 var54; - orc_union16 var55; - orc_int8 var56; - orc_int8 var57; - orc_union16 var58; - orc_int8 var59; - orc_int8 var60; - orc_union16 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_int8 var71; - orc_int8 var72; - orc_int8 var73; - orc_union16 var74; - orc_union16 var75; - orc_union32 var76; - - ptr0 = (orc_union32 *) d1; - ptr4 = (orc_int8 *) s1; - ptr5 = (orc_int8 *) s2; - ptr6 = (orc_int8 *) s3; - - /* 1: loadpb */ - var43 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 5: loadpb */ - var44 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpb */ - var45 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 12: loadpw */ - var46.i = p1; - /* 14: loadpw */ - var47.i = p2; - /* 17: loadpw */ - var48.i = p3; - /* 20: loadpw */ - var49.i = p4; - /* 23: loadpw */ - var50.i = p5; - /* 30: loadpb */ - var51 = (int) 0x0000007f; /* 127 or 6.27463e-322f */ - /* 33: loadpb */ - var52.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var42 = ptr4[i]; - /* 2: subb */ - var54 = var42 - var43; - /* 3: splatbw */ - var55.i = ((var54 & 0xff) << 8) | (var54 & 0xff); - /* 4: loadupdb */ - var56 = ptr5[i >> 1]; - /* 6: subb */ - var57 = var56 - var44; - /* 7: splatbw */ - var58.i = ((var57 & 0xff) << 8) | (var57 & 0xff); - /* 8: loadupdb */ - var59 = ptr6[i >> 1]; - /* 10: subb */ - var60 = var59 - var45; - /* 11: splatbw */ - var61.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 13: mulhsw */ - var62.i = (var55.i * var46.i) >> 16; - /* 15: mulhsw */ - var63.i = (var61.i * var47.i) >> 16; - /* 16: addssw */ - var64.i = ORC_CLAMP_SW (var62.i + var63.i); - /* 18: mulhsw */ - var65.i = (var58.i * var48.i) >> 16; - /* 19: addssw */ - var66.i = ORC_CLAMP_SW (var62.i + var65.i); - /* 21: mulhsw */ - var67.i = (var58.i * var49.i) >> 16; - /* 22: addssw */ - var68.i = ORC_CLAMP_SW (var62.i + var67.i); - /* 24: mulhsw */ - var69.i = (var61.i * var50.i) >> 16; - /* 25: addssw */ - var70.i = ORC_CLAMP_SW (var68.i + var69.i); - /* 26: convssswb */ - var71 = ORC_CLAMP_SB (var64.i); - /* 27: convssswb */ - var72 = ORC_CLAMP_SB (var70.i); - /* 28: convssswb */ - var73 = ORC_CLAMP_SB (var66.i); - /* 29: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var73; - _dest.x2[1] = var72; - var74.i = _dest.i; - } - /* 31: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var71; - _dest.x2[1] = var51; - var75.i = _dest.i; - } - /* 32: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var74.i; - _dest.x2[1] = var75.i; - var76.i = _dest.i; - } - /* 34: addb */ - var53.x4[0] = var76.x4[0] + var52.x4[0]; - var53.x4[1] = var76.x4[1] + var52.x4[1]; - var53.x4[2] = var76.x4[2] + var52.x4[2]; - var53.x4[3] = var76.x4[3] + var52.x4[3]; - /* 35: storel */ - ptr0[i] = var53; - } - -} - -#else -static void -_backup_video_convert_orc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - orc_int8 var42; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var43; -#else - orc_int8 var43; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var44; -#else - orc_int8 var44; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var45; -#else - orc_int8 var45; -#endif - orc_union16 var46; - orc_union16 var47; - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_int8 var51; -#else - orc_int8 var51; -#endif -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union32 var52; -#else - orc_union32 var52; -#endif - orc_union32 var53; - orc_int8 var54; - orc_union16 var55; - orc_int8 var56; - orc_int8 var57; - orc_union16 var58; - orc_int8 var59; - orc_int8 var60; - orc_union16 var61; - orc_union16 var62; - orc_union16 var63; - orc_union16 var64; - orc_union16 var65; - orc_union16 var66; - orc_union16 var67; - orc_union16 var68; - orc_union16 var69; - orc_union16 var70; - orc_int8 var71; - orc_int8 var72; - orc_int8 var73; - orc_union16 var74; - orc_union16 var75; - orc_union32 var76; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - ptr5 = (orc_int8 *) ex->arrays[5]; - ptr6 = (orc_int8 *) ex->arrays[6]; - - /* 1: loadpb */ - var43 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 5: loadpb */ - var44 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 9: loadpb */ - var45 = (int) 0x00000080; /* 128 or 6.32404e-322f */ - /* 12: loadpw */ - var46.i = ex->params[24]; - /* 14: loadpw */ - var47.i = ex->params[25]; - /* 17: loadpw */ - var48.i = ex->params[26]; - /* 20: loadpw */ - var49.i = ex->params[27]; - /* 23: loadpw */ - var50.i = ex->params[28]; - /* 30: loadpb */ - var51 = (int) 0x0000007f; /* 127 or 6.27463e-322f */ - /* 33: loadpb */ - var52.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - var52.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var42 = ptr4[i]; - /* 2: subb */ - var54 = var42 - var43; - /* 3: splatbw */ - var55.i = ((var54 & 0xff) << 8) | (var54 & 0xff); - /* 4: loadupdb */ - var56 = ptr5[i >> 1]; - /* 6: subb */ - var57 = var56 - var44; - /* 7: splatbw */ - var58.i = ((var57 & 0xff) << 8) | (var57 & 0xff); - /* 8: loadupdb */ - var59 = ptr6[i >> 1]; - /* 10: subb */ - var60 = var59 - var45; - /* 11: splatbw */ - var61.i = ((var60 & 0xff) << 8) | (var60 & 0xff); - /* 13: mulhsw */ - var62.i = (var55.i * var46.i) >> 16; - /* 15: mulhsw */ - var63.i = (var61.i * var47.i) >> 16; - /* 16: addssw */ - var64.i = ORC_CLAMP_SW (var62.i + var63.i); - /* 18: mulhsw */ - var65.i = (var58.i * var48.i) >> 16; - /* 19: addssw */ - var66.i = ORC_CLAMP_SW (var62.i + var65.i); - /* 21: mulhsw */ - var67.i = (var58.i * var49.i) >> 16; - /* 22: addssw */ - var68.i = ORC_CLAMP_SW (var62.i + var67.i); - /* 24: mulhsw */ - var69.i = (var61.i * var50.i) >> 16; - /* 25: addssw */ - var70.i = ORC_CLAMP_SW (var68.i + var69.i); - /* 26: convssswb */ - var71 = ORC_CLAMP_SB (var64.i); - /* 27: convssswb */ - var72 = ORC_CLAMP_SB (var70.i); - /* 28: convssswb */ - var73 = ORC_CLAMP_SB (var66.i); - /* 29: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var73; - _dest.x2[1] = var72; - var74.i = _dest.i; - } - /* 31: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var71; - _dest.x2[1] = var51; - var75.i = _dest.i; - } - /* 32: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var74.i; - _dest.x2[1] = var75.i; - var76.i = _dest.i; - } - /* 34: addb */ - var53.x4[0] = var76.x4[0] + var52.x4[0]; - var53.x4[1] = var76.x4[1] + var52.x4[1]; - var53.x4[2] = var76.x4[2] + var52.x4[2]; - var53.x4[3] = var76.x4[3] + var52.x4[3]; - /* 35: storel */ - ptr0[i] = var53; - } - -} - -void -video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, - int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, - 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, - 48, 95, 66, 71, 82, 65, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, - 1, 1, 14, 1, 128, 0, 0, 0, 14, 4, 127, 0, 0, 0, 16, 2, - 16, 2, 16, 2, 16, 2, 16, 2, 20, 2, 20, 2, 20, 2, 20, 2, - 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, 4, 65, 38, 4, 16, - 151, 32, 38, 45, 38, 5, 65, 38, 38, 16, 151, 33, 38, 45, 38, 6, - 65, 38, 38, 16, 151, 34, 38, 90, 32, 32, 24, 90, 35, 34, 25, 71, - 35, 32, 35, 90, 37, 33, 26, 71, 37, 32, 37, 90, 36, 33, 27, 71, - 36, 32, 36, 90, 32, 34, 28, 71, 36, 36, 32, 159, 38, 35, 159, 39, - 36, 159, 40, 37, 196, 37, 40, 39, 196, 35, 38, 17, 195, 41, 37, 35, - 21, 2, 33, 0, 41, 16, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_BGRA); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_convert_orc_convert_I420_BGRA"); - orc_program_set_backup_function (p, - _backup_video_convert_orc_convert_I420_BGRA); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_constant (p, 1, 0x00000080, "c1"); - orc_program_add_constant (p, 4, 0x0000007f, "c2"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_parameter (p, 2, "p3"); - orc_program_add_parameter (p, 2, "p4"); - orc_program_add_parameter (p, 2, "p5"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 2, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 1, "t7"); - orc_program_add_temporary (p, 1, "t8"); - orc_program_add_temporary (p, 1, "t9"); - orc_program_add_temporary (p, 4, "t10"); - - orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_S1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S2, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T2, ORC_VAR_T7, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S3, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T3, ORC_VAR_T7, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T6, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P5, - ORC_VAR_D1); - orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T7, ORC_VAR_T4, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T8, ORC_VAR_T5, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T9, ORC_VAR_T6, - ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T9, ORC_VAR_T8, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T7, ORC_VAR_C2, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T10, ORC_VAR_T6, - ORC_VAR_T4, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T10, ORC_VAR_C1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - ex->params[ORC_VAR_P5] = p5; - - func = c->exec; - func (ex); -} -#endif diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc-dist.h gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc-dist.h --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc-dist.h 2014-08-27 10:23:45.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc-dist.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ - -/* autogenerated from gstvideoconvertorc.orc */ - -#ifndef _GSTVIDEOCONVERTORC_H_ -#define _GSTVIDEOCONVERTORC_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _ORC_INTEGER_TYPEDEFS_ -#define _ORC_INTEGER_TYPEDEFS_ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -typedef int8_t orc_int8; -typedef int16_t orc_int16; -typedef int32_t orc_int32; -typedef int64_t orc_int64; -typedef uint8_t orc_uint8; -typedef uint16_t orc_uint16; -typedef uint32_t orc_uint32; -typedef uint64_t orc_uint64; -#define ORC_UINT64_C(x) UINT64_C(x) -#elif defined(_MSC_VER) -typedef signed __int8 orc_int8; -typedef signed __int16 orc_int16; -typedef signed __int32 orc_int32; -typedef signed __int64 orc_int64; -typedef unsigned __int8 orc_uint8; -typedef unsigned __int16 orc_uint16; -typedef unsigned __int32 orc_uint32; -typedef unsigned __int64 orc_uint64; -#define ORC_UINT64_C(x) (x##Ui64) -#define inline __inline -#else -#include -typedef signed char orc_int8; -typedef short orc_int16; -typedef int orc_int32; -typedef unsigned char orc_uint8; -typedef unsigned short orc_uint16; -typedef unsigned int orc_uint32; -#if INT_MAX == LONG_MAX -typedef long long orc_int64; -typedef unsigned long long orc_uint64; -#define ORC_UINT64_C(x) (x##ULL) -#else -typedef long orc_int64; -typedef unsigned long orc_uint64; -#define ORC_UINT64_C(x) (x##UL) -#endif -#endif -typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16; -typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32; -typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64; -#endif -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif - -#ifndef ORC_INTERNAL -#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define ORC_INTERNAL __hidden -#elif defined (__GNUC__) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#else -#define ORC_INTERNAL -#endif -#endif - -void video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); -void video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); -void video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); -void video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); -void video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); -void video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); -void video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); -void video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n); - -#ifdef __cplusplus -} -#endif - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc.orc gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc.orc --- gst-plugins-base1.0-1.4.3/gst/videoconvert/gstvideoconvertorc.orc 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/gstvideoconvertorc.orc 1970-01-01 00:00:00.000000000 +0000 @@ -1,729 +0,0 @@ - -.function video_convert_orc_memcpy_2d -.flags 2d -.dest 1 d1 guint8 -.source 1 s1 guint8 - -copyb d1, s1 - -.function video_convert_orc_convert_I420_UYVY -.dest 4 d1 guint8 -.dest 4 d2 guint8 -.source 2 y1 guint8 -.source 2 y2 guint8 -.source 1 u guint8 -.source 1 v guint8 -.temp 2 uv - -mergebw uv, u, v -x2 mergebw d1, uv, y1 -x2 mergebw d2, uv, y2 - - -.function video_convert_orc_convert_I420_YUY2 -.dest 4 d1 guint8 -.dest 4 d2 guint8 -.source 2 y1 guint8 -.source 2 y2 guint8 -.source 1 u guint8 -.source 1 v guint8 -.temp 2 uv - -mergebw uv, u, v -x2 mergebw d1, y1, uv -x2 mergebw d2, y2, uv - - - -.function video_convert_orc_convert_I420_AYUV -.dest 4 d1 guint8 -.dest 4 d2 guint8 -.source 1 y1 guint8 -.source 1 y2 guint8 -.source 1 u guint8 -.source 1 v guint8 -.const 1 c255 255 -.temp 2 uv -.temp 2 ay -.temp 1 tu -.temp 1 tv - -loadupdb tu, u -loadupdb tv, v -mergebw uv, tu, tv -mergebw ay, c255, y1 -mergewl d1, ay, uv -mergebw ay, c255, y2 -mergewl d2, ay, uv - - -.function video_convert_orc_convert_YUY2_I420 -.dest 2 y1 guint8 -.dest 2 y2 guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 4 yuv1 guint8 -.source 4 yuv2 guint8 -.temp 2 t1 -.temp 2 t2 -.temp 2 ty - -x2 splitwb t1, ty, yuv1 -storew y1, ty -x2 splitwb t2, ty, yuv2 -storew y2, ty -x2 avgub t1, t1, t2 -splitwb v, u, t1 - - -.function video_convert_orc_convert_UYVY_YUY2 -.flags 2d -.dest 4 yuy2 guint8 -.source 4 uyvy guint8 - -x2 swapw yuy2, uyvy - - -.function video_convert_orc_planar_chroma_420_422 -.flags 2d -.dest 1 d1 guint8 -.dest 1 d2 guint8 -.source 1 s guint8 - -copyb d1, s -copyb d2, s - - -.function video_convert_orc_planar_chroma_420_444 -.flags 2d -.dest 2 d1 guint8 -.dest 2 d2 guint8 -.source 1 s guint8 -.temp 2 t - -splatbw t, s -storew d1, t -storew d2, t - - -.function video_convert_orc_planar_chroma_422_444 -.flags 2d -.dest 2 d1 guint8 -.source 1 s guint8 -.temp 2 t - -splatbw t, s -storew d1, t - - -.function video_convert_orc_planar_chroma_444_422 -.flags 2d -.dest 1 d guint8 -.source 2 s guint8 -.temp 1 t1 -.temp 1 t2 - -splitwb t1, t2, s -avgub d, t1, t2 - - -.function video_convert_orc_planar_chroma_444_420 -.flags 2d -.dest 1 d guint8 -.source 2 s1 guint8 -.source 2 s2 guint8 -.temp 2 t -.temp 1 t1 -.temp 1 t2 - -x2 avgub t, s1, s2 -splitwb t1, t2, t -avgub d, t1, t2 - - -.function video_convert_orc_planar_chroma_422_420 -.flags 2d -.dest 1 d guint8 -.source 1 s1 guint8 -.source 1 s2 guint8 - -avgub d, s1, s2 - - -.function video_convert_orc_convert_YUY2_AYUV -.flags 2d -.dest 8 ayuv guint8 -.source 4 yuy2 guint8 -.const 2 c255 0xff -.temp 2 yy -.temp 2 uv -.temp 4 ayay -.temp 4 uvuv - -x2 splitwb uv, yy, yuy2 -x2 mergebw ayay, c255, yy -mergewl uvuv, uv, uv -x2 mergewl ayuv, ayay, uvuv - - -.function video_convert_orc_convert_UYVY_AYUV -.flags 2d -.dest 8 ayuv guint8 -.source 4 uyvy guint8 -.const 2 c255 0xff -.temp 2 yy -.temp 2 uv -.temp 4 ayay -.temp 4 uvuv - -x2 splitwb yy, uv, uyvy -x2 mergebw ayay, c255, yy -mergewl uvuv, uv, uv -x2 mergewl ayuv, ayay, uvuv - - -.function video_convert_orc_convert_YUY2_Y42B -.flags 2d -.dest 2 y guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 4 yuy2 guint8 -.temp 2 uv - -x2 splitwb uv, y, yuy2 -splitwb v, u, uv - - -.function video_convert_orc_convert_UYVY_Y42B -.flags 2d -.dest 2 y guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 4 uyvy guint8 -.temp 2 uv - -x2 splitwb y, uv, uyvy -splitwb v, u, uv - - -.function video_convert_orc_convert_YUY2_Y444 -.flags 2d -.dest 2 y guint8 -.dest 2 uu guint8 -.dest 2 vv guint8 -.source 4 yuy2 guint8 -.temp 2 uv -.temp 1 u -.temp 1 v - -x2 splitwb uv, y, yuy2 -splitwb v, u, uv -splatbw uu, u -splatbw vv, v - - -.function video_convert_orc_convert_UYVY_Y444 -.flags 2d -.dest 2 y guint8 -.dest 2 uu guint8 -.dest 2 vv guint8 -.source 4 uyvy guint8 -.temp 2 uv -.temp 1 u -.temp 1 v - -x2 splitwb y, uv, uyvy -splitwb v, u, uv -splatbw uu, u -splatbw vv, v - - -.function video_convert_orc_convert_UYVY_I420 -.dest 2 y1 guint8 -.dest 2 y2 guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 4 yuv1 guint8 -.source 4 yuv2 guint8 -.temp 2 t1 -.temp 2 t2 -.temp 2 ty - -x2 splitwb ty, t1, yuv1 -storew y1, ty -x2 splitwb ty, t2, yuv2 -storew y2, ty -x2 avgub t1, t1, t2 -splitwb v, u, t1 - - - -.function video_convert_orc_convert_AYUV_I420 -.flags 2d -.dest 2 y1 guint8 -.dest 2 y2 guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 8 ayuv1 guint8 -.source 8 ayuv2 guint8 -.temp 4 ay -.temp 4 uv1 -.temp 4 uv2 -.temp 4 uv -.temp 2 uu -.temp 2 vv -.temp 1 t1 -.temp 1 t2 - -x2 splitlw uv1, ay, ayuv1 -x2 select1wb y1, ay -x2 splitlw uv2, ay, ayuv2 -x2 select1wb y2, ay -x4 avgub uv, uv1, uv2 -x2 splitwb vv, uu, uv -splitwb t1, t2, uu -avgub u, t1, t2 -splitwb t1, t2, vv -avgub v, t1, t2 - - - -.function video_convert_orc_convert_AYUV_YUY2 -.flags 2d -.dest 4 yuy2 guint8 -.source 8 ayuv guint8 -.temp 2 yy -.temp 2 uv1 -.temp 2 uv2 -.temp 4 ayay -.temp 4 uvuv - -x2 splitlw uvuv, ayay, ayuv -splitlw uv1, uv2, uvuv -x2 avgub uv1, uv1, uv2 -x2 select1wb yy, ayay -x2 mergebw yuy2, yy, uv1 - - -.function video_convert_orc_convert_AYUV_UYVY -.flags 2d -.dest 4 yuy2 guint8 -.source 8 ayuv guint8 -.temp 2 yy -.temp 2 uv1 -.temp 2 uv2 -.temp 4 ayay -.temp 4 uvuv - -x2 splitlw uvuv, ayay, ayuv -splitlw uv1, uv2, uvuv -x2 avgub uv1, uv1, uv2 -x2 select1wb yy, ayay -x2 mergebw yuy2, uv1, yy - - - -.function video_convert_orc_convert_AYUV_Y42B -.flags 2d -.dest 2 y guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 8 ayuv guint8 -.temp 4 ayay -.temp 4 uvuv -.temp 2 uv1 -.temp 2 uv2 - -x2 splitlw uvuv, ayay, ayuv -splitlw uv1, uv2, uvuv -x2 avgub uv1, uv1, uv2 -splitwb v, u, uv1 -x2 select1wb y, ayay - - -.function video_convert_orc_convert_AYUV_Y444 -.flags 2d -.dest 1 y guint8 -.dest 1 u guint8 -.dest 1 v guint8 -.source 4 ayuv guint8 -.temp 2 ay -.temp 2 uv - -splitlw uv, ay, ayuv -splitwb v, u, uv -select1wb y, ay - - -.function video_convert_orc_convert_Y42B_YUY2 -.flags 2d -.dest 4 yuy2 guint8 -.source 2 y guint8 -.source 1 u guint8 -.source 1 v guint8 -.temp 2 uv - -mergebw uv, u, v -x2 mergebw yuy2, y, uv - - -.function video_convert_orc_convert_Y42B_UYVY -.flags 2d -.dest 4 uyvy guint8 -.source 2 y guint8 -.source 1 u guint8 -.source 1 v guint8 -.temp 2 uv - -mergebw uv, u, v -x2 mergebw uyvy, uv, y - - -.function video_convert_orc_convert_Y42B_AYUV -.flags 2d -.dest 8 ayuv guint8 -.source 2 yy guint8 -.source 1 u guint8 -.source 1 v guint8 -.const 1 c255 255 -.temp 2 uv -.temp 2 ay -.temp 4 uvuv -.temp 4 ayay - -mergebw uv, u, v -x2 mergebw ayay, c255, yy -mergewl uvuv, uv, uv -x2 mergewl ayuv, ayay, uvuv - - -.function video_convert_orc_convert_Y444_YUY2 -.flags 2d -.dest 4 yuy2 guint8 -.source 2 y guint8 -.source 2 u guint8 -.source 2 v guint8 -.temp 2 uv -.temp 4 uvuv -.temp 2 uv1 -.temp 2 uv2 - -x2 mergebw uvuv, u, v -splitlw uv1, uv2, uvuv -x2 avgub uv, uv1, uv2 -x2 mergebw yuy2, y, uv - - -.function video_convert_orc_convert_Y444_UYVY -.flags 2d -.dest 4 uyvy guint8 -.source 2 y guint8 -.source 2 u guint8 -.source 2 v guint8 -.temp 2 uv -.temp 4 uvuv -.temp 2 uv1 -.temp 2 uv2 - -x2 mergebw uvuv, u, v -splitlw uv1, uv2, uvuv -x2 avgub uv, uv1, uv2 -x2 mergebw uyvy, uv, y - - -.function video_convert_orc_convert_Y444_AYUV -.flags 2d -.dest 4 ayuv guint8 -.source 1 yy guint8 -.source 1 u guint8 -.source 1 v guint8 -.const 1 c255 255 -.temp 2 uv -.temp 2 ay - -mergebw uv, u, v -mergebw ay, c255, yy -mergewl ayuv, ay, uv - - - -.function video_convert_orc_convert_AYUV_ARGB -.flags 2d -.dest 4 argb guint8 -.source 4 ayuv guint8 -.param 2 p1 -.param 2 p2 -.param 2 p3 -.param 2 p4 -.param 2 p5 -.temp 1 a -.temp 1 y -.temp 1 u -.temp 1 v -.temp 2 wy -.temp 2 wu -.temp 2 wv -.temp 2 wr -.temp 2 wg -.temp 2 wb -.temp 1 r -.temp 1 g -.temp 1 b -.temp 4 x -.const 1 c128 128 - -x4 subb x, ayuv, c128 -splitlw wv, wy, x -splitwb y, a, wy -splitwb v, u, wv - -splatbw wy, y -splatbw wu, u -splatbw wv, v - -mulhsw wy, wy, p1 - -mulhsw wr, wv, p2 -addssw wr, wy, wr - -mulhsw wb, wu, p3 -addssw wb, wy, wb - -mulhsw wg, wu, p4 -addssw wg, wy, wg -mulhsw wy, wv, p5 -addssw wg, wg, wy - -convssswb r, wr -convssswb g, wg -convssswb b, wb - -mergebw wr, a, r -mergebw wb, g, b -mergewl x, wr, wb -x4 addb argb, x, c128 - -.function video_convert_orc_convert_AYUV_BGRA -.flags 2d -.dest 4 bgra guint8 -.source 4 ayuv guint8 -.param 2 p1 -.param 2 p2 -.param 2 p3 -.param 2 p4 -.param 2 p5 -.temp 1 a -.temp 1 y -.temp 1 u -.temp 1 v -.temp 2 wy -.temp 2 wu -.temp 2 wv -.temp 2 wr -.temp 2 wg -.temp 2 wb -.temp 1 r -.temp 1 g -.temp 1 b -.temp 4 x -.const 1 c128 128 - -x4 subb x, ayuv, c128 -splitlw wv, wy, x -splitwb y, a, wy -splitwb v, u, wv - -splatbw wy, y -splatbw wu, u -splatbw wv, v - -mulhsw wy, wy, p1 - -mulhsw wr, wv, p2 -addssw wr, wy, wr - -mulhsw wb, wu, p3 -addssw wb, wy, wb - -mulhsw wg, wu, p4 -addssw wg, wy, wg -mulhsw wy, wv, p5 -addssw wg, wg, wy - -convssswb r, wr -convssswb g, wg -convssswb b, wb - -mergebw wb, b, g -mergebw wr, r, a -mergewl x, wb, wr -x4 addb bgra, x, c128 - - -.function video_convert_orc_convert_AYUV_ABGR -.flags 2d -.dest 4 argb guint8 -.source 4 ayuv guint8 -.param 2 p1 -.param 2 p2 -.param 2 p3 -.param 2 p4 -.param 2 p5 -.temp 1 a -.temp 1 y -.temp 1 u -.temp 1 v -.temp 2 wy -.temp 2 wu -.temp 2 wv -.temp 2 wr -.temp 2 wg -.temp 2 wb -.temp 1 r -.temp 1 g -.temp 1 b -.temp 4 x -.const 1 c128 128 - -x4 subb x, ayuv, c128 -splitlw wv, wy, x -splitwb y, a, wy -splitwb v, u, wv - -splatbw wy, y -splatbw wu, u -splatbw wv, v - -mulhsw wy, wy, p1 - -mulhsw wr, wv, p2 -addssw wr, wy, wr - -mulhsw wb, wu, p3 -addssw wb, wy, wb - -mulhsw wg, wu, p4 -addssw wg, wy, wg -mulhsw wy, wv, p5 -addssw wg, wg, wy - -convssswb r, wr -convssswb g, wg -convssswb b, wb - -mergebw wb, a, b -mergebw wr, g, r -mergewl x, wb, wr -x4 addb argb, x, c128 - -.function video_convert_orc_convert_AYUV_RGBA -.flags 2d -.dest 4 argb guint8 -.source 4 ayuv guint8 -.param 2 p1 -.param 2 p2 -.param 2 p3 -.param 2 p4 -.param 2 p5 -.temp 1 a -.temp 1 y -.temp 1 u -.temp 1 v -.temp 2 wy -.temp 2 wu -.temp 2 wv -.temp 2 wr -.temp 2 wg -.temp 2 wb -.temp 1 r -.temp 1 g -.temp 1 b -.temp 4 x -.const 1 c128 128 - -x4 subb x, ayuv, c128 -splitlw wv, wy, x -splitwb y, a, wy -splitwb v, u, wv - -splatbw wy, y -splatbw wu, u -splatbw wv, v - -mulhsw wy, wy, p1 - -mulhsw wr, wv, p2 -addssw wr, wy, wr - -mulhsw wb, wu, p3 -addssw wb, wy, wb - -mulhsw wg, wu, p4 -addssw wg, wy, wg -mulhsw wy, wv, p5 -addssw wg, wg, wy - -convssswb r, wr -convssswb g, wg -convssswb b, wb - -mergebw wr, r, g -mergebw wb, b, a -mergewl x, wr, wb -x4 addb argb, x, c128 - - - -.function video_convert_orc_convert_I420_BGRA -.dest 4 argb guint8 -.source 1 y guint8 -.source 1 u guint8 -.source 1 v guint8 -.param 2 p1 -.param 2 p2 -.param 2 p3 -.param 2 p4 -.param 2 p5 -.temp 2 wy -.temp 2 wu -.temp 2 wv -.temp 2 wr -.temp 2 wg -.temp 2 wb -.temp 1 r -.temp 1 g -.temp 1 b -.temp 4 x -.const 1 c128 128 - -subb r, y, c128 -splatbw wy, r -loadupdb r, u -subb r, r, c128 -splatbw wu, r -loadupdb r, v -subb r, r, c128 -splatbw wv, r - -mulhsw wy, wy, p1 - -mulhsw wr, wv, p2 -addssw wr, wy, wr - -mulhsw wb, wu, p3 -addssw wb, wy, wb - -mulhsw wg, wu, p4 -addssw wg, wy, wg -mulhsw wy, wv, p5 -addssw wg, wg, wy - -convssswb r, wr -convssswb g, wg -convssswb b, wb - -mergebw wb, b, g -mergebw wr, r, 127 -mergewl x, wb, wr -x4 addb argb, x, c128 - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/Makefile.am gst-plugins-base1.0-1.6.1/gst/videoconvert/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/videoconvert/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -1,36 +1,16 @@ plugin_LTLIBRARIES = libgstvideoconvert.la -ORC_SOURCE=gstvideoconvertorc -include $(top_srcdir)/common/orc.mak - -libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c gstcms.c +libgstvideoconvert_la_SOURCES = gstvideoconvert.c nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES) libgstvideoconvert_la_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ - $(GST_CFLAGS) \ - $(ORC_CFLAGS) + $(GST_CFLAGS) libgstvideoconvert_la_LIBADD = \ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ - $(ORC_LIBS) \ $(LIBM) libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideoconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) -noinst_HEADERS = gstvideoconvert.h videoconvert.h gstcms.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideoconvert_la_SOURCES) \ - $(nodist_libgstvideoconvert_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \ - -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \ - $(libgstvideoconvert_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ +noinst_HEADERS = gstvideoconvert.h diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/Makefile.in gst-plugins-base1.0-1.6.1/gst/videoconvert/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/videoconvert/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,31 +14,19 @@ @SET_MAKE@ -# -# This is a makefile.am fragment to build Orc code. -# -# Define ORC_SOURCE and then include this file, such as: -# -# ORC_SOURCE=gstadderorc -# include $(top_srcdir)/common/orc.mak -# -# This fragment will create tmp-orc.c and gstadderorc.h from -# gstadderorc.orc. -# -# When 'make dist' is run at the top level, or 'make orc-update' -# in a directory including this fragment, the generated source -# files will be copied to $(ORC_SOURCE)-dist.[ch]. These files -# should be checked in to git, since they are used if Orc is -# disabled. -# -# Note that this file defines BUILT_SOURCES, so any later usage -# of BUILT_SOURCES in the Makefile.am that includes this file -# must use '+='. -# - VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,8 +90,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) subdir = gst/videoconvert ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -125,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -142,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -178,13 +165,10 @@ am__DEPENDENCIES_1 = libgstvideoconvert_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) am_libgstvideoconvert_la_OBJECTS = \ - libgstvideoconvert_la-gstvideoconvert.lo \ - libgstvideoconvert_la-videoconvert.lo \ - libgstvideoconvert_la-gstcms.lo -am__objects_1 = libgstvideoconvert_la-tmp-orc.lo -nodist_libgstvideoconvert_la_OBJECTS = $(am__objects_1) + libgstvideoconvert_la-gstvideoconvert.lo +nodist_libgstvideoconvert_la_OBJECTS = libgstvideoconvert_la_OBJECTS = $(am_libgstvideoconvert_la_OBJECTS) \ $(nodist_libgstvideoconvert_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -257,6 +241,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -317,6 +302,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -346,6 +333,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -373,7 +362,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -388,6 +376,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -477,13 +466,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -536,6 +524,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -549,39 +538,26 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstvideoconvert.la -ORC_SOURCE = gstvideoconvertorc -EXTRA_DIST = $(ORC_SOURCE).orc -ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h -BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h -orcc_v_gen = $(orcc_v_gen_$(V)) -orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY)) -orcc_v_gen_0 = @echo " ORCC $@"; -cp_v_gen = $(cp_v_gen_$(V)) -cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY)) -cp_v_gen_0 = @echo " CP $@"; -libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c gstcms.c +libgstvideoconvert_la_SOURCES = gstvideoconvert.c nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES) libgstvideoconvert_la_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ - $(GST_CFLAGS) \ - $(ORC_CFLAGS) + $(GST_CFLAGS) libgstvideoconvert_la_LIBADD = \ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ - $(ORC_LIBS) \ $(LIBM) libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideoconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) -noinst_HEADERS = gstvideoconvert.h videoconvert.h gstcms.h -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am +noinst_HEADERS = gstvideoconvert.h +all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -593,7 +569,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoconvert/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/videoconvert/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -602,7 +577,6 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -657,10 +631,7 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-gstcms.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -693,27 +664,6 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-gstvideoconvert.lo `test -f 'gstvideoconvert.c' || echo '$(srcdir)/'`gstvideoconvert.c -libgstvideoconvert_la-videoconvert.lo: videoconvert.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-videoconvert.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo $(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='videoconvert.c' object='libgstvideoconvert_la-videoconvert.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c - -libgstvideoconvert_la-gstcms.lo: gstcms.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-gstcms.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-gstcms.Tpo -c -o libgstvideoconvert_la-gstcms.lo `test -f 'gstcms.c' || echo '$(srcdir)/'`gstcms.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-gstcms.Tpo $(DEPDIR)/libgstvideoconvert_la-gstcms.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstcms.c' object='libgstvideoconvert_la-gstcms.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-gstcms.lo `test -f 'gstcms.c' || echo '$(srcdir)/'`gstcms.c - -libgstvideoconvert_la-tmp-orc.lo: tmp-orc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmp-orc.c' object='libgstvideoconvert_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c - mostlyclean-libtool: -rm -f *.lo @@ -802,19 +752,14 @@ || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am +check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am +install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -844,11 +789,10 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-local \ - clean-pluginLTLIBRARIES mostlyclean-am +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -916,75 +860,25 @@ uninstall-am: uninstall-pluginLTLIBRARIES -.MAKE: all check install install-am install-strip +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-local clean-pluginLTLIBRARIES \ - cscopelist-am ctags ctags-am dist-hook distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-pluginLTLIBRARIES \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ + clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pluginLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -orc-update: tmp-orc.c $(ORC_SOURCE).h - $(top_srcdir)/common/gst-indent tmp-orc.c - cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c - cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h - -@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_TRUE@ $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc - -@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_TRUE@ $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c -@HAVE_ORCC_FALSE@ $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c - -@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c -@HAVE_ORCC_FALSE@ $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h - -clean-local: clean-orc -.PHONY: clean-orc -clean-orc: - rm -f tmp-orc.c $(ORC_SOURCE).h - -dist-hook: dist-hook-orc -.PHONY: dist-hook-orc - -# we try and copy updated orc -dist files below, but don't fail if it -# doesn't work as the srcdir might not be writable -dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h - $(top_srcdir)/common/gst-indent tmp-orc.c - rm -f tmp-orc.c~ - cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \ - cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true - cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \ - cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true - cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c - cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideoconvert_la_SOURCES) \ - $(nodist_libgstvideoconvert_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \ - -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \ - $(libgstvideoconvert_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/videoconvert.c gst-plugins-base1.0-1.6.1/gst/videoconvert/videoconvert.c --- gst-plugins-base1.0-1.4.3/gst/videoconvert/videoconvert.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/videoconvert.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1502 +0,0 @@ -/* GStreamer - * Copyright (C) 2010 David Schleef - * Copyright (C) 2010 Sebastian Dröge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "videoconvert.h" - -#include -#include -#include - -#include "gstvideoconvertorc.h" - - -static void videoconvert_convert_generic (VideoConvert * convert, - GstVideoFrame * dest, const GstVideoFrame * src); -static void videoconvert_convert_matrix8 (VideoConvert * convert, - gpointer pixels); -static void videoconvert_convert_matrix16 (VideoConvert * convert, - gpointer pixels); -static gboolean videoconvert_convert_lookup_fastpath (VideoConvert * convert); -static gboolean videoconvert_convert_compute_matrix (VideoConvert * convert); -static gboolean videoconvert_convert_compute_resample (VideoConvert * convert); -static void videoconvert_dither_verterr (VideoConvert * convert, - guint16 * pixels, int j); -static void videoconvert_dither_halftone (VideoConvert * convert, - guint16 * pixels, int j); - - -VideoConvert * -videoconvert_convert_new (GstVideoInfo * in_info, GstVideoInfo * out_info) -{ - VideoConvert *convert; - gint width; - - convert = g_malloc0 (sizeof (VideoConvert)); - - convert->in_info = *in_info; - convert->out_info = *out_info; - convert->dither16 = NULL; - - convert->width = GST_VIDEO_INFO_WIDTH (in_info); - convert->height = GST_VIDEO_INFO_HEIGHT (in_info); - - if (!videoconvert_convert_lookup_fastpath (convert)) { - convert->convert = videoconvert_convert_generic; - if (!videoconvert_convert_compute_matrix (convert)) - goto no_convert; - - if (!videoconvert_convert_compute_resample (convert)) - goto no_convert; - } - - width = convert->width; - - convert->lines = out_info->finfo->pack_lines; - convert->errline = g_malloc0 (sizeof (guint16) * width * 4); - - return convert; - - /* ERRORS */ -no_convert: - { - videoconvert_convert_free (convert); - return NULL; - } -} - -void -videoconvert_convert_free (VideoConvert * convert) -{ - gint i; - - if (convert->upsample) - gst_video_chroma_resample_free (convert->upsample); - if (convert->downsample) - gst_video_chroma_resample_free (convert->downsample); - - for (i = 0; i < convert->n_tmplines; i++) - g_free (convert->tmplines[i]); - g_free (convert->tmplines); - g_free (convert->errline); - - g_free (convert); -} - -void -videoconvert_convert_set_dither (VideoConvert * convert, int type) -{ - switch (type) { - case 0: - default: - convert->dither16 = NULL; - break; - case 1: - convert->dither16 = videoconvert_dither_verterr; - break; - case 2: - convert->dither16 = videoconvert_dither_halftone; - break; - } -} - -void -videoconvert_convert_convert (VideoConvert * convert, - GstVideoFrame * dest, const GstVideoFrame * src) -{ - convert->convert (convert, dest, src); -} - -#define SCALE (8) -#define SCALE_F ((float) (1 << SCALE)) - -static void -videoconvert_convert_matrix8 (VideoConvert * convert, gpointer pixels) -{ - int i; - int r, g, b; - int y, u, v; - guint8 *p = pixels; - - for (i = 0; i < convert->width; i++) { - r = p[i * 4 + 1]; - g = p[i * 4 + 2]; - b = p[i * 4 + 3]; - - y = (convert->cmatrix[0][0] * r + convert->cmatrix[0][1] * g + - convert->cmatrix[0][2] * b + convert->cmatrix[0][3]) >> SCALE; - u = (convert->cmatrix[1][0] * r + convert->cmatrix[1][1] * g + - convert->cmatrix[1][2] * b + convert->cmatrix[1][3]) >> SCALE; - v = (convert->cmatrix[2][0] * r + convert->cmatrix[2][1] * g + - convert->cmatrix[2][2] * b + convert->cmatrix[2][3]) >> SCALE; - - p[i * 4 + 1] = CLAMP (y, 0, 255); - p[i * 4 + 2] = CLAMP (u, 0, 255); - p[i * 4 + 3] = CLAMP (v, 0, 255); - } -} - -static void -videoconvert_convert_matrix16 (VideoConvert * convert, gpointer pixels) -{ - int i; - int r, g, b; - int y, u, v; - guint16 *p = pixels; - - for (i = 0; i < convert->width; i++) { - r = p[i * 4 + 1]; - g = p[i * 4 + 2]; - b = p[i * 4 + 3]; - - y = (convert->cmatrix[0][0] * r + convert->cmatrix[0][1] * g + - convert->cmatrix[0][2] * b + convert->cmatrix[0][3]) >> SCALE; - u = (convert->cmatrix[1][0] * r + convert->cmatrix[1][1] * g + - convert->cmatrix[1][2] * b + convert->cmatrix[1][3]) >> SCALE; - v = (convert->cmatrix[2][0] * r + convert->cmatrix[2][1] * g + - convert->cmatrix[2][2] * b + convert->cmatrix[2][3]) >> SCALE; - - p[i * 4 + 1] = CLAMP (y, 0, 65535); - p[i * 4 + 2] = CLAMP (u, 0, 65535); - p[i * 4 + 3] = CLAMP (v, 0, 65535); - } -} - -static gboolean -get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, gdouble * Kb) -{ - gboolean res = TRUE; - - switch (matrix) { - /* RGB */ - default: - case GST_VIDEO_COLOR_MATRIX_RGB: - res = FALSE; - break; - /* YUV */ - case GST_VIDEO_COLOR_MATRIX_FCC: - *Kr = 0.30; - *Kb = 0.11; - break; - case GST_VIDEO_COLOR_MATRIX_BT709: - *Kr = 0.2126; - *Kb = 0.0722; - break; - case GST_VIDEO_COLOR_MATRIX_BT601: - *Kr = 0.2990; - *Kb = 0.1140; - break; - case GST_VIDEO_COLOR_MATRIX_SMPTE240M: - *Kr = 0.212; - *Kb = 0.087; - break; - } - GST_DEBUG ("matrix: %d, Kr %f, Kb %f", matrix, *Kr, *Kb); - return res; -} - -static gboolean -videoconvert_convert_compute_matrix (VideoConvert * convert) -{ - GstVideoInfo *in_info, *out_info; - ColorMatrix dst; - gint i, j; - const GstVideoFormatInfo *sfinfo, *dfinfo; - const GstVideoFormatInfo *suinfo, *duinfo; - gint offset[4], scale[4]; - gdouble Kr = 0, Kb = 0; - - in_info = &convert->in_info; - out_info = &convert->out_info; - - sfinfo = in_info->finfo; - dfinfo = out_info->finfo; - - if (sfinfo->unpack_func == NULL) - goto no_unpack_func; - - if (dfinfo->pack_func == NULL) - goto no_pack_func; - - suinfo = gst_video_format_get_info (sfinfo->unpack_format); - duinfo = gst_video_format_get_info (dfinfo->unpack_format); - - convert->in_bits = GST_VIDEO_FORMAT_INFO_DEPTH (suinfo, 0); - convert->out_bits = GST_VIDEO_FORMAT_INFO_DEPTH (duinfo, 0); - - GST_DEBUG ("in bits %d, out bits %d", convert->in_bits, convert->out_bits); - - if (in_info->colorimetry.range == out_info->colorimetry.range && - in_info->colorimetry.matrix == out_info->colorimetry.matrix) { - GST_DEBUG ("using identity color transform"); - convert->matrix = NULL; - return TRUE; - } - - /* calculate intermediate format for the matrix. When unpacking, we expand - * input to 16 when one of the inputs is 16 bits */ - if (convert->in_bits == 16 || convert->out_bits == 16) { - convert->matrix = videoconvert_convert_matrix16; - - if (GST_VIDEO_FORMAT_INFO_IS_RGB (suinfo)) - suinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_ARGB64); - else - suinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_AYUV64); - - if (GST_VIDEO_FORMAT_INFO_IS_RGB (duinfo)) - duinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_ARGB64); - else - duinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_AYUV64); - } else { - convert->matrix = videoconvert_convert_matrix8; - } - - color_matrix_set_identity (&dst); - - /* 1, bring color components to [0..1.0] range */ - gst_video_color_range_offsets (in_info->colorimetry.range, suinfo, offset, - scale); - - color_matrix_offset_components (&dst, -offset[0], -offset[1], -offset[2]); - - color_matrix_scale_components (&dst, 1 / ((float) scale[0]), - 1 / ((float) scale[1]), 1 / ((float) scale[2])); - - /* 2. bring components to R'G'B' space */ - if (get_Kr_Kb (in_info->colorimetry.matrix, &Kr, &Kb)) - color_matrix_YCbCr_to_RGB (&dst, Kr, Kb); - - /* 3. inverse transfer function. R'G'B' to linear RGB */ - - /* 4. from RGB to XYZ using the primaries */ - - /* 5. from XYZ to RGB using the primaries */ - - /* 6. transfer function. linear RGB to R'G'B' */ - - /* 7. bring components to YCbCr space */ - if (get_Kr_Kb (out_info->colorimetry.matrix, &Kr, &Kb)) - color_matrix_RGB_to_YCbCr (&dst, Kr, Kb); - - /* 8, bring color components to nominal range */ - gst_video_color_range_offsets (out_info->colorimetry.range, duinfo, offset, - scale); - - color_matrix_scale_components (&dst, (float) scale[0], (float) scale[1], - (float) scale[2]); - - color_matrix_offset_components (&dst, offset[0], offset[1], offset[2]); - - /* because we're doing fixed point matrix coefficients */ - color_matrix_scale_components (&dst, SCALE_F, SCALE_F, SCALE_F); - - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - convert->cmatrix[i][j] = rint (dst.m[i][j]); - - GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[0][0], - convert->cmatrix[0][1], convert->cmatrix[0][2], convert->cmatrix[0][3]); - GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[1][0], - convert->cmatrix[1][1], convert->cmatrix[1][2], convert->cmatrix[1][3]); - GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[2][0], - convert->cmatrix[2][1], convert->cmatrix[2][2], convert->cmatrix[2][3]); - GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[3][0], - convert->cmatrix[3][1], convert->cmatrix[3][2], convert->cmatrix[3][3]); - - return TRUE; - - /* ERRORS */ -no_unpack_func: - { - GST_ERROR ("no unpack_func for format %s", - gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (in_info))); - return FALSE; - } -no_pack_func: - { - GST_ERROR ("no pack_func for format %s", - gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (out_info))); - return FALSE; - } -} - -static void -videoconvert_dither_verterr (VideoConvert * convert, guint16 * pixels, int j) -{ - int i; - guint16 *errline = convert->errline; - unsigned int mask = 0xff; - - for (i = 0; i < 4 * convert->width; i++) { - int x = pixels[i] + errline[i]; - if (x > 65535) - x = 65535; - pixels[i] = x; - errline[i] = x & mask; - } -} - -static void -videoconvert_dither_halftone (VideoConvert * convert, guint16 * pixels, int j) -{ - int i; - static guint16 halftone[8][8] = { - {0, 128, 32, 160, 8, 136, 40, 168}, - {192, 64, 224, 96, 200, 72, 232, 104}, - {48, 176, 16, 144, 56, 184, 24, 152}, - {240, 112, 208, 80, 248, 120, 216, 88}, - {12, 240, 44, 172, 4, 132, 36, 164}, - {204, 76, 236, 108, 196, 68, 228, 100}, - {60, 188, 28, 156, 52, 180, 20, 148}, - {252, 142, 220, 92, 244, 116, 212, 84} - }; - - for (i = 0; i < convert->width * 4; i++) { - int x; - x = pixels[i] + halftone[(i >> 2) & 7][j & 7]; - if (x > 65535) - x = 65535; - pixels[i] = x; - } -} - -static void -alloc_tmplines (VideoConvert * convert, guint lines, gint width) -{ - gint i; - - convert->n_tmplines = lines; - convert->tmplines = g_malloc (lines * sizeof (gpointer)); - for (i = 0; i < lines; i++) - convert->tmplines[i] = g_malloc (sizeof (guint16) * (width + 8) * 4); -} - -static gboolean -videoconvert_convert_compute_resample (VideoConvert * convert) -{ - GstVideoInfo *in_info, *out_info; - const GstVideoFormatInfo *sfinfo, *dfinfo; - gint width; - - in_info = &convert->in_info; - out_info = &convert->out_info; - - sfinfo = in_info->finfo; - dfinfo = out_info->finfo; - - width = convert->width; - - if (sfinfo->w_sub[2] != dfinfo->w_sub[2] || - sfinfo->h_sub[2] != dfinfo->h_sub[2] || - in_info->chroma_site != out_info->chroma_site) { - convert->upsample = gst_video_chroma_resample_new (0, - in_info->chroma_site, 0, sfinfo->unpack_format, sfinfo->w_sub[2], - sfinfo->h_sub[2]); - - - convert->downsample = gst_video_chroma_resample_new (0, - out_info->chroma_site, 0, dfinfo->unpack_format, -dfinfo->w_sub[2], - -dfinfo->h_sub[2]); - - } else { - convert->upsample = NULL; - convert->downsample = NULL; - } - - if (convert->upsample) { - gst_video_chroma_resample_get_info (convert->upsample, - &convert->up_n_lines, &convert->up_offset); - } else { - convert->up_n_lines = 1; - convert->up_offset = 0; - } - if (convert->downsample) { - gst_video_chroma_resample_get_info (convert->downsample, - &convert->down_n_lines, &convert->down_offset); - } else { - convert->down_n_lines = 1; - convert->down_offset = 0; - } - GST_DEBUG ("upsample: %p, site: %d, offset %d, n_lines %d", convert->upsample, - in_info->chroma_site, convert->up_offset, convert->up_n_lines); - GST_DEBUG ("downsample: %p, site: %d, offset %d, n_lines %d", - convert->downsample, out_info->chroma_site, convert->down_offset, - convert->down_n_lines); - - alloc_tmplines (convert, convert->down_n_lines + convert->up_n_lines, width); - - return TRUE; -} - -#define TO_16(x) (((x)<<8) | (x)) - -static void -convert_to16 (gpointer line, gint width) -{ - guint8 *line8 = line; - guint16 *line16 = line; - gint i; - - for (i = (width - 1) * 4; i >= 0; i--) - line16[i] = TO_16 (line8[i]); -} - -static void -convert_to8 (gpointer line, gint width) -{ - guint8 *line8 = line; - guint16 *line16 = line; - gint i; - - for (i = 0; i < width * 4; i++) - line8[i] = line16[i] >> 8; -} - -#define UNPACK_FRAME(frame,dest,line,width) \ - frame->info.finfo->unpack_func (frame->info.finfo, \ - (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ - GST_VIDEO_PACK_FLAG_INTERLACED : \ - GST_VIDEO_PACK_FLAG_NONE), \ - dest, frame->data, frame->info.stride, 0, \ - line, width) -#define PACK_FRAME(frame,dest,line,width) \ - frame->info.finfo->pack_func (frame->info.finfo, \ - (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ - GST_VIDEO_PACK_FLAG_INTERLACED : \ - GST_VIDEO_PACK_FLAG_NONE), \ - dest, 0, frame->data, frame->info.stride, \ - frame->info.chroma_site, line, width); - -static void -videoconvert_convert_generic (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int j, k; - gint width, height, lines, max_lines; - guint in_bits, out_bits; - gconstpointer pal; - gsize palsize; - guint up_n_lines, down_n_lines; - gint up_offset, down_offset; - gint in_lines, out_lines; - gint up_line, down_line; - gint start_offset, stop_offset; - gpointer in_tmplines[8]; - gpointer out_tmplines[8]; - - height = convert->height; - width = convert->width; - - in_bits = convert->in_bits; - out_bits = convert->out_bits; - - lines = convert->lines; - up_n_lines = convert->up_n_lines; - up_offset = convert->up_offset; - down_n_lines = convert->down_n_lines; - down_offset = convert->down_offset; - max_lines = convert->n_tmplines; - - in_lines = 0; - out_lines = 0; - - GST_DEBUG ("up_offset %d, up_n_lines %u", up_offset, up_n_lines); - - start_offset = MIN (up_offset, down_offset); - stop_offset = height + start_offset + MAX (up_n_lines, down_n_lines); - - for (; start_offset < stop_offset; start_offset++) { - guint idx, start; - - idx = CLAMP (start_offset, 0, height); - in_tmplines[in_lines] = convert->tmplines[idx % max_lines]; - out_tmplines[out_lines] = in_tmplines[in_lines]; - GST_DEBUG ("start_offset %d/%d, %d, idx %u, in %d, out %d", start_offset, - stop_offset, up_offset, idx, in_lines, out_lines); - - up_line = up_offset + in_lines; - - /* extract the next line */ - if (up_line >= 0 && up_line < height) { - GST_DEBUG ("unpack line %d into %d", up_line, in_lines); - UNPACK_FRAME (src, in_tmplines[in_lines], up_line, width); - } - - if (start_offset >= up_offset) - in_lines++; - - if (start_offset >= down_offset) - out_lines++; - - if (in_lines < up_n_lines) - continue; - - in_lines = 0; - - /* we have enough lines to upsample */ - if (convert->upsample) { - GST_DEBUG ("doing upsample"); - gst_video_chroma_resample (convert->upsample, in_tmplines, width); - } - - /* convert upsampled lines */ - for (k = 0; k < up_n_lines; k++) { - down_line = up_offset + k; - - /* only takes lines with valid output */ - if (down_line < 0 || down_line >= height) - continue; - - GST_DEBUG ("handle line %d, %d/%d, down_line %d", k, out_lines, - down_n_lines, down_line); - - if (out_bits == 16 || in_bits == 16) { - /* FIXME, we can scale in the conversion matrix */ - if (in_bits == 8) - convert_to16 (in_tmplines[k], width); - - if (convert->matrix) - convert->matrix (convert, in_tmplines[k]); - if (convert->dither16) - convert->dither16 (convert, in_tmplines[k], down_line); - - if (out_bits == 8) - convert_to8 (in_tmplines[k], width); - } else { - if (convert->matrix) - convert->matrix (convert, in_tmplines[k]); - } - } - - start = 0; - while (out_lines >= down_n_lines) { - if (convert->downsample) { - GST_DEBUG ("doing downsample %u", start); - gst_video_chroma_resample (convert->downsample, - &out_tmplines[start], width); - } - - for (j = 0; j < down_n_lines; j += lines) { - idx = down_offset + j; - - if (idx < height) { - GST_DEBUG ("packing line %d %d %d", j + start, down_offset, idx); - /* FIXME, not correct if lines > 1 */ - PACK_FRAME (dest, out_tmplines[j + start], idx, width); - } - } - down_offset += down_n_lines; - start += down_n_lines; - out_lines -= down_n_lines; - } - /* we didn't process these lines, move them up for the next round */ - for (j = 0; j < out_lines; j++) { - GST_DEBUG ("move line %d->%d", j + start, j); - out_tmplines[j] = out_tmplines[j + start]; - } - - up_offset += up_n_lines; - } - if ((pal = - gst_video_format_get_palette (GST_VIDEO_FRAME_FORMAT (dest), - &palsize))) { - memcpy (GST_VIDEO_FRAME_PLANE_DATA (dest, 1), pal, palsize); - } -} - -#define FRAME_GET_PLANE_STRIDE(frame, plane) \ - GST_VIDEO_FRAME_PLANE_STRIDE (frame, plane) -#define FRAME_GET_PLANE_LINE(frame, plane, line) \ - (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, plane))) + \ - FRAME_GET_PLANE_STRIDE (frame, plane) * (line)) - -#define FRAME_GET_COMP_STRIDE(frame, comp) \ - GST_VIDEO_FRAME_COMP_STRIDE (frame, comp) -#define FRAME_GET_COMP_LINE(frame, comp, line) \ - (gpointer)(((guint8*)(GST_VIDEO_FRAME_COMP_DATA (frame, comp))) + \ - FRAME_GET_COMP_STRIDE (frame, comp) * (line)) - -#define FRAME_GET_STRIDE(frame) FRAME_GET_PLANE_STRIDE (frame, 0) -#define FRAME_GET_LINE(frame,line) FRAME_GET_PLANE_LINE (frame, 0, line) - -#define FRAME_GET_Y_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_Y, line) -#define FRAME_GET_U_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_U, line) -#define FRAME_GET_V_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_V, line) -#define FRAME_GET_A_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_A, line) - -#define FRAME_GET_Y_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_Y) -#define FRAME_GET_U_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_U) -#define FRAME_GET_V_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_V) -#define FRAME_GET_A_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_A) - -/* Fast paths */ - -#define GET_LINE_OFFSETS(interlaced,line,l1,l2) \ - if (interlaced) { \ - l1 = (line & 2 ? line - 1 : line); \ - l2 = l1 + 2; \ - } else { \ - l1 = line; \ - l2 = l1 + 1; \ - } - - -static void -convert_I420_YUY2 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); - gint l1, l2; - - for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { - GET_LINE_OFFSETS (interlaced, i, l1, l2); - - video_convert_orc_convert_I420_YUY2 (FRAME_GET_LINE (dest, l1), - FRAME_GET_LINE (dest, l2), - FRAME_GET_Y_LINE (src, l1), - FRAME_GET_Y_LINE (src, l2), - FRAME_GET_U_LINE (src, i >> 1), - FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2); - } - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_I420_UYVY (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); - gint l1, l2; - - for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { - GET_LINE_OFFSETS (interlaced, i, l1, l2); - - video_convert_orc_convert_I420_UYVY (FRAME_GET_LINE (dest, l1), - FRAME_GET_LINE (dest, l2), - FRAME_GET_Y_LINE (src, l1), - FRAME_GET_Y_LINE (src, l2), - FRAME_GET_U_LINE (src, i >> 1), - FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2); - } - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_I420_AYUV (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); - gint l1, l2; - - for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { - GET_LINE_OFFSETS (interlaced, i, l1, l2); - - video_convert_orc_convert_I420_AYUV (FRAME_GET_LINE (dest, l1), - FRAME_GET_LINE (dest, l2), - FRAME_GET_Y_LINE (src, l1), - FRAME_GET_Y_LINE (src, l2), - FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1), width); - } - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_I420_Y42B (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_420_422 (FRAME_GET_U_LINE (dest, 0), - 2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (dest, 1), - 2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2); - - video_convert_orc_planar_chroma_420_422 (FRAME_GET_V_LINE (dest, 0), - 2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (dest, 1), - 2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2); -} - -static void -convert_I420_Y444 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_420_444 (FRAME_GET_U_LINE (dest, 0), - 2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (dest, 1), - 2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2); - - video_convert_orc_planar_chroma_420_444 (FRAME_GET_V_LINE (dest, 0), - 2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (dest, 1), - 2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2); - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_YUY2_I420 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); - gint l1, l2; - - for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { - GET_LINE_OFFSETS (interlaced, i, l1, l2); - - video_convert_orc_convert_YUY2_I420 (FRAME_GET_Y_LINE (dest, l1), - FRAME_GET_Y_LINE (dest, l2), - FRAME_GET_U_LINE (dest, i >> 1), - FRAME_GET_V_LINE (dest, i >> 1), - FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2); - } - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_YUY2_AYUV (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_YUY2_AYUV (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_YUY2_Y42B (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_YUY2_Y42B (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_YUY2_Y444 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_YUY2_Y444 (FRAME_GET_COMP_LINE (dest, 0, 0), - FRAME_GET_COMP_STRIDE (dest, 0), FRAME_GET_COMP_LINE (dest, 1, 0), - FRAME_GET_COMP_STRIDE (dest, 1), FRAME_GET_COMP_LINE (dest, 2, 0), - FRAME_GET_COMP_STRIDE (dest, 2), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - - -static void -convert_UYVY_I420 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); - gint l1, l2; - - for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { - GET_LINE_OFFSETS (interlaced, i, l1, l2); - - video_convert_orc_convert_UYVY_I420 (FRAME_GET_COMP_LINE (dest, 0, l1), - FRAME_GET_COMP_LINE (dest, 0, l2), - FRAME_GET_COMP_LINE (dest, 1, i >> 1), - FRAME_GET_COMP_LINE (dest, 2, i >> 1), - FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2); - } - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_UYVY_AYUV (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_UYVY_AYUV (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_UYVY_YUY2 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_UYVY_YUY2 (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_UYVY_Y42B (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_UYVY_Y42B (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_UYVY_Y444 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_UYVY_Y444 (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_AYUV_I420 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - /* only for even width/height */ - video_convert_orc_convert_AYUV_I420 (FRAME_GET_Y_LINE (dest, 0), - 2 * FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (dest, 1), - 2 * FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - 2 * FRAME_GET_STRIDE (src), FRAME_GET_LINE (src, 1), - 2 * FRAME_GET_STRIDE (src), width / 2, height / 2); -} - -static void -convert_AYUV_YUY2 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - /* only for even width */ - video_convert_orc_convert_AYUV_YUY2 (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), width / 2, height); -} - -static void -convert_AYUV_UYVY (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - /* only for even width */ - video_convert_orc_convert_AYUV_UYVY (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), width / 2, height); -} - -static void -convert_AYUV_Y42B (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - /* only works for even width */ - video_convert_orc_convert_AYUV_Y42B (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), width / 2, height); -} - -static void -convert_AYUV_Y444 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_AYUV_Y444 (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), width, height); -} - -static void -convert_Y42B_I420 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_422_420 (FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - 2 * FRAME_GET_U_STRIDE (src), FRAME_GET_U_LINE (src, 1), - 2 * FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2); - - video_convert_orc_planar_chroma_422_420 (FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - 2 * FRAME_GET_V_STRIDE (src), FRAME_GET_V_LINE (src, 1), - 2 * FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2); - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_Y42B_Y444 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_422_444 (FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), (width + 1) / 2, height); - - video_convert_orc_planar_chroma_422_444 (FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_Y42B_YUY2 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_Y42B_YUY2 (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_Y42B_UYVY (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_Y42B_UYVY (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), (width + 1) / 2, height); -} - -static void -convert_Y42B_AYUV (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - /* only for even width */ - video_convert_orc_convert_Y42B_AYUV (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), width / 2, height); -} - -static void -convert_Y444_I420 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_444_420 (FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - 2 * FRAME_GET_U_STRIDE (src), FRAME_GET_U_LINE (src, 1), - 2 * FRAME_GET_U_STRIDE (src), width / 2, height / 2); - - video_convert_orc_planar_chroma_444_420 (FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - 2 * FRAME_GET_V_STRIDE (src), FRAME_GET_V_LINE (src, 1), - 2 * FRAME_GET_V_STRIDE (src), width / 2, height / 2); - - /* now handle last line */ - if (height & 1) { - UNPACK_FRAME (src, convert->tmplines[0], height - 1, width); - PACK_FRAME (dest, convert->tmplines[0], height - 1, width); - } -} - -static void -convert_Y444_Y42B (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0), - FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), width, height); - - video_convert_orc_planar_chroma_444_422 (FRAME_GET_U_LINE (dest, 0), - FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), width / 2, height); - - video_convert_orc_planar_chroma_444_422 (FRAME_GET_V_LINE (dest, 0), - FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), width / 2, height); -} - -static void -convert_Y444_YUY2 (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_Y444_YUY2 (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), width / 2, height); -} - -static void -convert_Y444_UYVY (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_Y444_UYVY (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), width / 2, height); -} - -static void -convert_Y444_AYUV (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_Y444_AYUV (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0), - FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0), - FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0), - FRAME_GET_V_STRIDE (src), width, height); -} - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -static void -convert_AYUV_ARGB (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_AYUV_ARGB (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2], - convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2], - width, height); -} - -static void -convert_AYUV_BGRA (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_AYUV_BGRA (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2], - convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2], - width, height); -} - -static void -convert_AYUV_ABGR (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_AYUV_ABGR (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2], - convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2], - width, height); -} - -static void -convert_AYUV_RGBA (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - gint width = convert->width; - gint height = convert->height; - - video_convert_orc_convert_AYUV_RGBA (FRAME_GET_LINE (dest, 0), - FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0), - FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2], - convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2], - width, height); -} - -static void -convert_I420_BGRA (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src) -{ - int i; - gint width = convert->width; - gint height = convert->height; - - for (i = 0; i < height; i++) { - video_convert_orc_convert_I420_BGRA (FRAME_GET_LINE (dest, i), - FRAME_GET_Y_LINE (src, i), - FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1), - convert->cmatrix[0][0], convert->cmatrix[0][2], - convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2], - width); - } -} -#endif - - - -/* Fast paths */ - -typedef struct -{ - GstVideoFormat in_format; - GstVideoColorMatrix in_matrix; - GstVideoFormat out_format; - GstVideoColorMatrix out_matrix; - gboolean keeps_color_matrix; - gboolean keeps_interlaced; - gboolean needs_color_matrix; - gint width_align, height_align; - void (*convert) (VideoConvert * convert, GstVideoFrame * dest, - const GstVideoFrame * src); -} VideoTransform; - -static const VideoTransform transforms[] = { - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_YUY2}, - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_UYVY}, - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_AYUV}, - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_I420_Y42B}, - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_I420_Y444}, - - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_YUY2}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_UYVY}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_I420_AYUV}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_I420_Y42B}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_I420_Y444}, - - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_YUY2_I420}, - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_YUY2_I420}, - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, convert_UYVY_YUY2}, /* alias */ - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_YUY2_AYUV}, - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_YUY2_Y42B}, - {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_YUY2_Y444}, - - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_I420}, - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_I420}, - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_YUY2}, - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_AYUV}, - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_Y42B}, - {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_UYVY_Y444}, - - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 1, - convert_AYUV_I420}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 1, - convert_AYUV_I420}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_AYUV_YUY2}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_AYUV_UYVY}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_AYUV_Y42B}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_AYUV_Y444}, - - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_Y42B_I420}, - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0, - convert_Y42B_I420}, - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_Y42B_YUY2}, - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_Y42B_UYVY}, - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_Y42B_AYUV}, - {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_Y42B_Y444}, - - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 0, - convert_Y444_I420}, - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 0, - convert_Y444_I420}, - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_Y444_YUY2}, - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_Y444_UYVY}, - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, - convert_Y444_AYUV}, - {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0, - convert_Y444_Y42B}, - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_ARGB, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, - convert_AYUV_ARGB}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, - convert_AYUV_BGRA}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_xRGB, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_ARGB}, /* alias */ - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_BGRA}, /* alias */ - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_ABGR, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, - convert_AYUV_ABGR}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_RGBA, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, - convert_AYUV_RGBA}, - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_xBGR, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_ABGR}, /* alias */ - {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_RGBx, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_RGBA}, /* alias */ - - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0, - convert_I420_BGRA}, - {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0, - convert_I420_BGRA}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0, - convert_I420_BGRA}, - {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx, - GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0, - convert_I420_BGRA}, -#endif -}; - -static gboolean -videoconvert_convert_lookup_fastpath (VideoConvert * convert) -{ - int i; - GstVideoFormat in_format, out_format; - GstVideoColorMatrix in_matrix, out_matrix; - gboolean interlaced; - gint width, height; - - in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info); - out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info); - - width = GST_VIDEO_INFO_WIDTH (&convert->in_info); - height = GST_VIDEO_INFO_HEIGHT (&convert->in_info); - - in_matrix = convert->in_info.colorimetry.matrix; - out_matrix = convert->out_info.colorimetry.matrix; - - interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info); - interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info); - - for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) { - if (transforms[i].in_format == in_format && - transforms[i].out_format == out_format && - (transforms[i].keeps_color_matrix || - (transforms[i].in_matrix == in_matrix && - transforms[i].out_matrix == out_matrix)) && - (transforms[i].keeps_interlaced || !interlaced) && - (transforms[i].width_align & width) == 0 && - (transforms[i].height_align & height) == 0) { - GST_DEBUG ("using fastpath"); - if (transforms[i].needs_color_matrix) - if (!videoconvert_convert_compute_matrix (convert)) - goto no_convert; - convert->convert = transforms[i].convert; - alloc_tmplines (convert, 1, GST_VIDEO_INFO_WIDTH (&convert->in_info)); - return TRUE; - } - } - GST_DEBUG ("no fastpath found"); - return FALSE; - -no_convert: - { - GST_DEBUG ("can't create matrix"); - return FALSE; - } -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoconvert/videoconvert.h gst-plugins-base1.0-1.6.1/gst/videoconvert/videoconvert.h --- gst-plugins-base1.0-1.4.3/gst/videoconvert/videoconvert.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoconvert/videoconvert.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/* Video conversion functions - * Copyright (C) 2010 David Schleef - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef __COLORSPACE_H__ -#define __COLORSPACE_H__ - -#include -#include "gstcms.h" - -G_BEGIN_DECLS - -typedef struct _VideoConvert VideoConvert; - -typedef enum { - DITHER_NONE, - DITHER_VERTERR, - DITHER_HALFTONE -} ColorSpaceDitherMethod; - -struct _VideoConvert { - GstVideoInfo in_info; - GstVideoInfo out_info; - - gint width; - gint height; - - gint in_bits; - gint out_bits; - gint cmatrix[4][4]; - - ColorSpaceDitherMethod dither; - - guint lines; - - guint n_tmplines; - gpointer *tmplines; - guint16 *errline; - - GstVideoChromaResample *upsample; - guint up_n_lines; - gint up_offset; - GstVideoChromaResample *downsample; - guint down_n_lines; - gint down_offset; - - void (*convert) (VideoConvert *convert, GstVideoFrame *dest, const GstVideoFrame *src); - void (*matrix) (VideoConvert *convert, gpointer pixels); - void (*dither16) (VideoConvert *convert, guint16 * pixels, int j); - -}; - -VideoConvert * videoconvert_convert_new (GstVideoInfo *in_info, - GstVideoInfo *out_info); -void videoconvert_convert_free (VideoConvert * convert); - -void videoconvert_convert_set_dither (VideoConvert * convert, int type); - -void videoconvert_convert_convert (VideoConvert * convert, - GstVideoFrame *dest, const GstVideoFrame *src); - - -G_END_DECLS - -#endif /* __GST_COLORSPACE_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst/videorate/gstvideorate.c gst-plugins-base1.0-1.6.1/gst/videorate/gstvideorate.c --- gst-plugins-base1.0-1.4.3/gst/videorate/gstvideorate.c 2014-09-04 09:51:47.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videorate/gstvideorate.c 2015-10-22 08:01:34.000000000 +0000 @@ -55,13 +55,16 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videorate ! video/x-raw,framerate=15/1 ! xvimagesink - * ]| Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing. - * To create the test Ogg/Theora file refer to the documentation of theoraenc. + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! autovideosink + * ]| Decode a video file and adjust the framerate to 15 fps before playing. + * To create a test Ogg/Theora file refer to the documentation of theoraenc. * |[ - * gst-launch -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg + * gst-launch-1.0 -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg * ]| Capture video from a V4L device, and adjust the stream to 12.5 fps before * encoding to Ogg/Theora. + * |[ + * gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=1/5 ! jpegenc ! multifilesink location=snapshot-%05d.jpg + * ]| Decode a video file and save a snapshot every 5 seconds as consecutively numbered jpeg file. * */ @@ -70,6 +73,7 @@ #endif #include "gstvideorate.h" +#include GST_DEBUG_CATEGORY_STATIC (video_rate_debug); #define GST_CAT_DEFAULT video_rate_debug @@ -107,14 +111,16 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png") + GST_STATIC_CAPS ("video/x-raw(ANY);" "video/x-bayer(ANY);" + "image/jpeg(ANY);" "image/png(ANY)") ); static GstStaticPadTemplate gst_video_rate_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png") + GST_STATIC_CAPS ("video/x-raw(ANY);" "video/x-bayer(ANY);" + "image/jpeg(ANY);" "image/png(ANY)") ); static void gst_video_rate_swap_prev (GstVideoRate * videorate, @@ -136,6 +142,9 @@ static GstFlowReturn gst_video_rate_transform_ip (GstBaseTransform * trans, GstBuffer * buf); +static gboolean gst_video_rate_propose_allocation (GstBaseTransform * trans, + GstQuery * decide_query, GstQuery * query); + static gboolean gst_video_rate_start (GstBaseTransform * trans); static gboolean gst_video_rate_stop (GstBaseTransform * trans); @@ -170,6 +179,8 @@ base_class->stop = GST_DEBUG_FUNCPTR (gst_video_rate_stop); base_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_rate_fixate_caps); base_class->query = GST_DEBUG_FUNCPTR (gst_video_rate_query); + base_class->propose_allocation = + GST_DEBUG_FUNCPTR (gst_video_rate_propose_allocation); g_object_class_install_property (object_class, PROP_IN, g_param_spec_uint64 ("in", "In", @@ -365,6 +376,19 @@ s = gst_caps_get_structure (caps, i); s1 = gst_structure_copy (s); + + if (videorate->updating_caps && direction == GST_PAD_SINK) { + GST_INFO_OBJECT (trans, + "Only updating caps %" GST_PTR_FORMAT " with framerate" " %d/%d", + caps, videorate->to_rate_numerator, videorate->to_rate_denominator); + + gst_structure_set (s1, "framerate", GST_TYPE_FRACTION, + videorate->to_rate_numerator, videorate->to_rate_denominator, NULL); + ret = gst_caps_merge_structure (ret, s1); + + continue; + } + s2 = gst_structure_copy (s); s3 = NULL; @@ -429,10 +453,13 @@ G_MAXINT, 1, NULL); } if (s1 != NULL) - ret = gst_caps_merge_structure (ret, s1); - ret = gst_caps_merge_structure (ret, s2); + ret = gst_caps_merge_structure_full (ret, s1, + gst_caps_features_copy (gst_caps_get_features (caps, i))); + ret = gst_caps_merge_structure_full (ret, s2, + gst_caps_features_copy (gst_caps_get_features (caps, i))); if (s3 != NULL) - ret = gst_caps_merge_structure (ret, s3); + ret = gst_caps_merge_structure_full (ret, s3, + gst_caps_features_copy (gst_caps_get_features (caps, i))); } if (filter) { GstCaps *intersection; @@ -451,6 +478,7 @@ { GstStructure *s; gint num, denom; + const GValue *par; s = gst_caps_get_structure (caps, 0); if (G_UNLIKELY (!gst_structure_get_fraction (s, "framerate", &num, &denom))) @@ -461,6 +489,9 @@ s = gst_caps_get_structure (othercaps, 0); gst_structure_fixate_field_nearest_fraction (s, "framerate", num, denom); + if ((par = gst_structure_get_value (s, "pixel-aspect-ratio"))) + gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1, 1); + return othercaps; } @@ -541,6 +572,7 @@ videorate->last_ts = GST_CLOCK_TIME_NONE; videorate->discont = TRUE; videorate->average = 0; + videorate->force_variable_rate = FALSE; gst_video_rate_swap_prev (videorate, NULL, 0); gst_segment_init (&videorate->segment, GST_FORMAT_TIME); @@ -606,6 +638,8 @@ videorate->to_rate_denominator * GST_SECOND, videorate->to_rate_numerator); GST_BUFFER_DURATION (outbuf) = videorate->next_ts - push_ts; + } else if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (outbuf))) { + videorate->next_ts = GST_BUFFER_PTS (outbuf) + GST_BUFFER_DURATION (outbuf); } /* We do not need to update time in VFR (variable frame rate) mode */ @@ -805,10 +839,12 @@ gboolean live; guint64 latency; guint64 avg_period; + gboolean drop_only; GstPad *peer; GST_OBJECT_LOCK (videorate); avg_period = videorate->average_period_set; + drop_only = videorate->drop_only; GST_OBJECT_UNLOCK (videorate); if (avg_period == 0 && (peer = gst_pad_get_peer (otherpad))) { @@ -819,7 +855,8 @@ GST_TIME_FORMAT " max %" GST_TIME_FORMAT, GST_TIME_ARGS (min), GST_TIME_ARGS (max)); - if (videorate->from_rate_numerator != 0) { + /* Drop only has no latency, other modes have one frame latency */ + if (!drop_only && videorate->from_rate_numerator != 0) { /* add latency. We don't really know since we hold on to the frames * until we get a next frame, which can be anything. We assume * however that this will take from_rate time. */ @@ -860,6 +897,60 @@ return res; } +static gboolean +gst_video_rate_propose_allocation (GstBaseTransform * trans, + GstQuery * decide_query, GstQuery * query) +{ + GstBaseTransformClass *klass = GST_BASE_TRANSFORM_CLASS (parent_class); + gboolean res; + + /* We should always be passthrough */ + g_return_val_if_fail (decide_query == NULL, FALSE); + + res = klass->propose_allocation (trans, NULL, query); + + if (res) { + guint i = 0; + guint n_allocation; + guint down_min = 0; + + n_allocation = gst_query_get_n_allocation_pools (query); + + while (i < n_allocation) { + GstBufferPool *pool = NULL; + guint size, min, max; + + gst_query_parse_nth_allocation_pool (query, i, &pool, &size, &min, &max); + + if (min == max) { + if (pool) + gst_object_unref (pool); + gst_query_remove_nth_allocation_pool (query, i); + n_allocation--; + down_min = MAX (min, down_min); + continue; + } + + gst_query_set_nth_allocation_pool (query, i, pool, size, min + 1, max); + if (pool) + gst_object_unref (pool); + i++; + } + + if (n_allocation == 0) { + GstCaps *caps; + GstVideoInfo info; + + gst_query_parse_allocation (query, &caps, NULL); + gst_video_info_from_caps (&info, caps); + + gst_query_add_allocation_pool (query, NULL, info.size, down_min + 1, 0); + } + } + + return res; +} + static GstFlowReturn gst_video_rate_trans_ip_max_avg (GstVideoRate * videorate, GstBuffer * buf) { @@ -913,6 +1004,55 @@ return GST_BASE_TRANSFORM_FLOW_DROPPED; } +/* Check if downstream forces variable framerate (0/1) and if + * it is the case, use variable framerate ourself + * Otherwise compute the framerate from the 2 buffers that we + * have already received and make use of it as wanted framerate + */ +static void +gst_video_rate_check_variable_rate (GstVideoRate * videorate, + GstBuffer * buffer) +{ + GstStructure *st; + gint fps_d, fps_n; + GstCaps *srcpadcaps, *tmpcaps; + GstPad *pad = NULL; + + srcpadcaps = + gst_pad_get_current_caps (GST_BASE_TRANSFORM_SRC_PAD (videorate)); + + gst_video_guess_framerate (GST_BUFFER_PTS (buffer) - + GST_BUFFER_PTS (videorate->prevbuf), &fps_n, &fps_d); + + tmpcaps = gst_caps_copy (srcpadcaps); + st = gst_caps_get_structure (tmpcaps, 0); + gst_structure_set (st, "framerate", GST_TYPE_FRACTION, fps_n, fps_d, NULL); + gst_caps_unref (srcpadcaps); + + pad = gst_pad_get_peer (GST_BASE_TRANSFORM_SRC_PAD (videorate)); + if (pad && !gst_pad_query_accept_caps (pad, tmpcaps)) { + videorate->force_variable_rate = TRUE; + GST_DEBUG_OBJECT (videorate, "Downstream forces variable framerate" + " respecting it"); + + goto done; + } + + videorate->to_rate_numerator = fps_n; + videorate->to_rate_denominator = fps_d; + + GST_INFO_OBJECT (videorate, "Computed framerate to %d/%d", + videorate->to_rate_numerator, videorate->to_rate_denominator); + + videorate->updating_caps = TRUE; + gst_base_transform_update_src_caps (GST_BASE_TRANSFORM (videorate), tmpcaps); + +done: + gst_caps_unref (tmpcaps); + if (pad) + gst_object_unref (pad); +} + static GstFlowReturn gst_video_rate_transform_ip (GstBaseTransform * trans, GstBuffer * buffer) { @@ -929,6 +1069,11 @@ videorate->to_rate_denominator == 0) goto not_negotiated; + if (videorate->to_rate_numerator == 0 && videorate->prevbuf && + !videorate->force_variable_rate) { + gst_video_rate_check_variable_rate (videorate, buffer); + } + GST_OBJECT_LOCK (videorate); avg_period = videorate->average_period_set; GST_OBJECT_UNLOCK (videorate); @@ -983,7 +1128,7 @@ intime = in_ts + videorate->segment.base; /* we need to have two buffers to compare */ - if (videorate->prevbuf == NULL) { + if (videorate->prevbuf == NULL || videorate->drop_only) { gst_video_rate_swap_prev (videorate, buffer, intime); videorate->in++; if (!GST_CLOCK_TIME_IS_VALID (videorate->next_ts)) { @@ -997,6 +1142,24 @@ videorate->next_ts = videorate->segment.start + videorate->segment.base; } } + + /* In drop-only mode we can already decide here if we should output the + * current frame or drop it because it's coming earlier than our minimum + * allowed frame period. This also keeps latency down to 0 frames + */ + if (videorate->drop_only) { + if (intime >= videorate->next_ts) { + GstFlowReturn r; + + /* on error the _flush function posted a warning already */ + if ((r = gst_video_rate_flush_prev (videorate, FALSE)) != GST_FLOW_OK) { + res = r; + goto done; + } + } + /* No need to keep the buffer around for longer */ + gst_buffer_replace (&videorate->prevbuf, NULL); + } } else { GstClockTime prevtime; gint count = 0; @@ -1042,6 +1205,12 @@ GST_TIME_ARGS (diff1), GST_TIME_ARGS (diff2), GST_TIME_ARGS (videorate->next_ts)); + if (!GST_BUFFER_DURATION_IS_VALID (videorate->prevbuf) && + intime > prevtime) { + /* Make sure that we have a duration for previous buffer */ + GST_BUFFER_DURATION (videorate->prevbuf) = intime - prevtime; + } + /* output first one when its the best */ if (diff1 <= diff2) { GstFlowReturn r; @@ -1130,6 +1299,7 @@ guint prop_id, const GValue * value, GParamSpec * pspec) { GstVideoRate *videorate = GST_VIDEO_RATE (object); + gboolean latency_changed = FALSE; GST_OBJECT_LOCK (videorate); switch (prop_id) { @@ -1142,10 +1312,15 @@ case PROP_SKIP_TO_FIRST: videorate->skip_to_first = g_value_get_boolean (value); break; - case PROP_DROP_ONLY: + case PROP_DROP_ONLY:{ + gboolean new_value = g_value_get_boolean (value); + + /* Latency changes if we switch drop-only mode */ + latency_changed = new_value != videorate->drop_only; videorate->drop_only = g_value_get_boolean (value); goto reconfigure; break; + } case PROP_AVERAGE_PERIOD: videorate->average_period_set = g_value_get_uint64 (value); break; @@ -1163,6 +1338,11 @@ reconfigure: GST_OBJECT_UNLOCK (videorate); gst_base_transform_reconfigure_src (GST_BASE_TRANSFORM (videorate)); + + if (latency_changed) { + gst_element_post_message (GST_ELEMENT (videorate), + gst_message_new_latency (GST_OBJECT (videorate))); + } } static void diff -Nru gst-plugins-base1.0-1.4.3/gst/videorate/gstvideorate.h gst-plugins-base1.0-1.6.1/gst/videorate/gstvideorate.h --- gst-plugins-base1.0-1.4.3/gst/videorate/gstvideorate.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videorate/gstvideorate.h 2015-10-22 08:01:34.000000000 +0000 @@ -65,6 +65,8 @@ guint64 average_period; GstClockTimeDiff wanted_diff; /* target average diff */ GstClockTimeDiff average; /* moving average period */ + gboolean force_variable_rate; + gboolean updating_caps; /* segment handling */ GstSegment segment; diff -Nru gst-plugins-base1.0-1.4.3/gst/videorate/Makefile.am gst-plugins-base1.0-1.6.1/gst/videorate/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/videorate/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videorate/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -3,21 +3,10 @@ plugin_LTLIBRARIES = libgstvideorate.la libgstvideorate_la_SOURCES = gstvideorate.c -libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) +libgstvideorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) +libgstvideorate_la_LIBADD = \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) libgstvideorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideorate -:SHARED libgstvideorate \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideorate_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \ - -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \ - $(libgstvideorate_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/videorate/Makefile.in gst-plugins-base1.0-1.6.1/gst/videorate/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/videorate/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videorate/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst/videorate -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -154,8 +163,8 @@ am__installdirs = "$(DESTDIR)$(plugindir)" LTLIBRARIES = $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = -libgstvideorate_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) +libgstvideorate_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libgstvideorate_la_OBJECTS = libgstvideorate_la-gstvideorate.lo libgstvideorate_la_OBJECTS = $(am_libgstvideorate_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -227,6 +236,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -287,6 +297,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -316,6 +328,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -343,7 +357,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -358,6 +371,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -447,13 +461,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -506,6 +519,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -521,9 +535,13 @@ noinst_HEADERS = gstvideorate.h plugin_LTLIBRARIES = libgstvideorate.la libgstvideorate_la_SOURCES = gstvideorate.c -libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) +libgstvideorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) +libgstvideorate_la_LIBADD = \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) + libgstvideorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) all: all-am @@ -541,7 +559,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videorate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/videorate/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -850,20 +867,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideorate -:SHARED libgstvideorate \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideorate_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \ - -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \ - $(libgstvideorate_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscale.c gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscale.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscale.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscale.c 2015-10-22 08:01:34.000000000 +0000 @@ -34,15 +34,14 @@ * * Example pipelines * |[ - * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! ximagesink - * ]| Decode an Ogg/Theora and display the video using ximagesink. Since - * ximagesink cannot perform scaling, the video scaling will be performed by - * videoscale when you resize the video window. + * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! autovideosink + * ]| Decode an Ogg/Theora and display the video. If the video sink chosen + * cannot perform scaling, the video scaling will be performed by videoscale + * when you resize the video window. * To create the test Ogg/Theora file refer to the documentation of theoraenc. * |[ - * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw, width=50 ! xvimagesink - * ]| Decode an Ogg/Theora and display the video using xvimagesink with a width - * of 50. + * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! video/x-raw,width=100 ! autovideosink + * ]| Decode an Ogg/Theora and display the video with a width of 100. * */ @@ -78,14 +77,10 @@ #include #include "gstvideoscale.h" -#include "gstvideoscaleorc.h" -#include "vs_image.h" -#include "vs_4tap.h" -#include "vs_fill_borders.h" - -/* debug variable definition */ -GST_DEBUG_CATEGORY (video_scale_debug); -GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); + +#define GST_CAT_DEFAULT video_scale_debug +GST_DEBUG_CATEGORY_STATIC (video_scale_debug); +GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); #define DEFAULT_PROP_METHOD GST_VIDEO_SCALE_BILINEAR #define DEFAULT_PROP_ADD_BORDERS TRUE @@ -94,6 +89,7 @@ #define DEFAULT_PROP_DITHER FALSE #define DEFAULT_PROP_SUBMETHOD 1 #define DEFAULT_PROP_ENVELOPE 2.0 +#define DEFAULT_PROP_GAMMA_DECODE FALSE enum { @@ -104,7 +100,8 @@ PROP_SHARPEN, PROP_DITHER, PROP_SUBMETHOD, - PROP_ENVELOPE + PROP_ENVELOPE, + PROP_GAMMA_DECODE, }; #undef GST_VIDEO_SIZE_RANGE @@ -112,7 +109,6 @@ /* FIXME: add v210 support * FIXME: add v216 support - * FIXME: add NV21 support * FIXME: add UYVP support * FIXME: add A420 support * FIXME: add YUV9 support @@ -121,12 +117,7 @@ * FIXME: add r210 support */ -/* FIXME: if we can do NV12, NV21 shouldn't be so hard */ -#define GST_VIDEO_FORMATS "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, " \ - "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, " \ - "BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, " \ - "v308, RGB16, RGB15, ARGB64, AYUV64, NV12 } " - +#define GST_VIDEO_FORMATS GST_VIDEO_FORMATS_ALL static GstStaticCaps gst_video_scale_format_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS) ";" @@ -140,9 +131,15 @@ static const GEnumValue video_scale_methods[] = { {GST_VIDEO_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"}, - {GST_VIDEO_SCALE_BILINEAR, "Bilinear", "bilinear"}, - {GST_VIDEO_SCALE_4TAP, "4-tap", "4-tap"}, - {GST_VIDEO_SCALE_LANCZOS, "Lanczos (experimental/unstable)", "lanczos"}, + {GST_VIDEO_SCALE_BILINEAR, "Bilinear (2-tap)", "bilinear"}, + {GST_VIDEO_SCALE_4TAP, "4-tap Sinc", "4-tap"}, + {GST_VIDEO_SCALE_LANCZOS, "Lanczos", "lanczos"}, + {GST_VIDEO_SCALE_BILINEAR2, "Bilinear (multi-tap)", "bilinear2"}, + {GST_VIDEO_SCALE_SINC, "Sinc (multi-tap)", "sinc"}, + {GST_VIDEO_SCALE_HERMITE, "Hermite (multi-tap)", "hermite"}, + {GST_VIDEO_SCALE_SPLINE, "Spline (multi-tap)", "spline"}, + {GST_VIDEO_SCALE_CATROM, "Catmull-Rom (multi-tap)", "catrom"}, + {GST_VIDEO_SCALE_MITCHELL, "Mitchell (multi-tap)", "mitchell"}, {0, NULL, NULL}, }; @@ -202,9 +199,6 @@ static void gst_video_scale_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static GstFlowReturn do_scale (GstVideoFilter * filter, VSImage dest[4], - VSImage src[4]); - #define gst_video_scale_parent_class parent_class G_DEFINE_TYPE (GstVideoScale, gst_video_scale, GST_TYPE_VIDEO_FILTER); @@ -261,9 +255,15 @@ "Size of filter envelope", 1.0, 5.0, DEFAULT_PROP_ENVELOPE, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_GAMMA_DECODE, + g_param_spec_boolean ("gamma-decode", "Gamma Decode", + "Decode gamma before scaling", DEFAULT_PROP_GAMMA_DECODE, + G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gst_element_class_set_static_metadata (element_class, "Video scaler", "Filter/Converter/Video/Scaler", - "Resizes video", "Wim Taymans "); + "Resizes video", "Wim Taymans "); gst_element_class_add_pad_template (element_class, gst_video_scale_sink_template_factory ()); @@ -283,7 +283,6 @@ static void gst_video_scale_init (GstVideoScale * videoscale) { - videoscale->tmp_buf = NULL; videoscale->method = DEFAULT_PROP_METHOD; videoscale->add_borders = DEFAULT_PROP_ADD_BORDERS; videoscale->submethod = DEFAULT_PROP_SUBMETHOD; @@ -291,13 +290,14 @@ videoscale->sharpen = DEFAULT_PROP_SHARPEN; videoscale->dither = DEFAULT_PROP_DITHER; videoscale->envelope = DEFAULT_PROP_ENVELOPE; + videoscale->gamma_decode = DEFAULT_PROP_GAMMA_DECODE; } static void gst_video_scale_finalize (GstVideoScale * videoscale) { - if (videoscale->tmp_buf) - g_free (videoscale->tmp_buf); + if (videoscale->convert) + gst_video_converter_free (videoscale->convert); G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (videoscale)); } @@ -345,6 +345,11 @@ vscale->envelope = g_value_get_double (value); GST_OBJECT_UNLOCK (vscale); break; + case PROP_GAMMA_DECODE: + GST_OBJECT_LOCK (vscale); + vscale->gamma_decode = g_value_get_boolean (value); + GST_OBJECT_UNLOCK (vscale); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -393,53 +398,22 @@ g_value_set_double (value, vscale->envelope); GST_OBJECT_UNLOCK (vscale); break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + case PROP_GAMMA_DECODE: + GST_OBJECT_LOCK (vscale); + g_value_set_boolean (value, vscale->gamma_decode); + GST_OBJECT_UNLOCK (vscale); break; - } -} - -static GstCaps * -get_formats_filter (GstVideoScaleMethod method) -{ - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - case GST_VIDEO_SCALE_BILINEAR: - return NULL; - case GST_VIDEO_SCALE_4TAP: - { - static GstStaticCaps fourtap_filter = - GST_STATIC_CAPS ("video/x-raw(ANY)," - "format = (string) { RGBx, xRGB, BGRx, xBGR, RGBA, " - "ARGB, BGRA, ABGR, AYUV, ARGB64, AYUV64, " - "RGB, BGR, v308, YUY2, YVYU, UYVY, " - "GRAY8, GRAY16_LE, GRAY16_BE, I420, YV12, " - "Y444, Y42B, Y41B, RGB16, RGB15 }"); - return gst_static_caps_get (&fourtap_filter); - } - case GST_VIDEO_SCALE_LANCZOS: - { - static GstStaticCaps lanczos_filter = - GST_STATIC_CAPS ("video/x-raw(ANY)," - "format = (string) { RGBx, xRGB, BGRx, xBGR, RGBA, " - "ARGB, BGRA, ABGR, AYUV, ARGB64, AYUV64, " - "I420, YV12, Y444, Y42B, Y41B }"); - return gst_static_caps_get (&lanczos_filter); - } default: - g_assert_not_reached (); + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } - return NULL; } static GstCaps * gst_video_scale_transform_caps (GstBaseTransform * trans, GstPadDirection direction, GstCaps * caps, GstCaps * filter) { - GstVideoScale *videoscale = GST_VIDEO_SCALE (trans); - GstVideoScaleMethod method; - GstCaps *ret, *mfilter; + GstCaps *ret; GstStructure *structure; GstCapsFeatures *features; gint i, n; @@ -448,20 +422,6 @@ "Transforming caps %" GST_PTR_FORMAT " in direction %s", caps, (direction == GST_PAD_SINK) ? "sink" : "src"); - GST_OBJECT_LOCK (videoscale); - method = videoscale->method; - GST_OBJECT_UNLOCK (videoscale); - - /* filter the supported formats */ - /* FIXME: Ideally we would still allow passthrough for the color formats - * that are unsupported by the selected method */ - if ((mfilter = get_formats_filter (method))) { - caps = gst_caps_intersect_full (caps, mfilter, GST_CAPS_INTERSECT_FIRST); - gst_caps_unref (mfilter); - } else { - gst_caps_ref (caps); - } - ret = gst_caps_new_empty (); n = gst_caps_get_size (caps); for (i = 0; i < n; i++) { @@ -489,7 +449,6 @@ GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, NULL); } } - gst_caps_append_structure_full (ret, structure, gst_caps_features_copy (features)); } @@ -503,7 +462,6 @@ ret = intersection; } - gst_caps_unref (caps); GST_DEBUG_OBJECT (trans, "returning caps: %" GST_PTR_FORMAT, ret); return ret; @@ -554,16 +512,111 @@ } } - if (videoscale->tmp_buf) - g_free (videoscale->tmp_buf); - videoscale->tmp_buf = g_malloc (out_info->width * sizeof (guint64) * 4); - if (in_info->width == out_info->width && in_info->height == out_info->height && videoscale->borders_w == 0 && videoscale->borders_h == 0) { gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), TRUE); } else { + GstStructure *options; GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, "setup videoscaling"); gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), FALSE); + + options = gst_structure_new_empty ("videoscale"); + + switch (videoscale->method) { + case GST_VIDEO_SCALE_NEAREST: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_NEAREST, + NULL); + break; + case GST_VIDEO_SCALE_BILINEAR: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR, + GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 2, NULL); + break; + case GST_VIDEO_SCALE_4TAP: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC, + GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 4, NULL); + break; + case GST_VIDEO_SCALE_LANCZOS: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LANCZOS, + NULL); + break; + case GST_VIDEO_SCALE_BILINEAR2: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR, + NULL); + break; + case GST_VIDEO_SCALE_SINC: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC, + NULL); + break; + case GST_VIDEO_SCALE_HERMITE: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC, + GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0, + GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0, + NULL); + break; + case GST_VIDEO_SCALE_SPLINE: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC, + GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0, + GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0, + NULL); + break; + case GST_VIDEO_SCALE_CATROM: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC, + GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0, + GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.5, + NULL); + break; + case GST_VIDEO_SCALE_MITCHELL: + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC, + GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0, + GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0, + NULL); + break; + } + gst_structure_set (options, + GST_VIDEO_RESAMPLER_OPT_ENVELOPE, G_TYPE_DOUBLE, videoscale->envelope, + GST_VIDEO_RESAMPLER_OPT_SHARPNESS, G_TYPE_DOUBLE, videoscale->sharpness, + GST_VIDEO_RESAMPLER_OPT_SHARPEN, G_TYPE_DOUBLE, videoscale->sharpen, + GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, videoscale->borders_w / 2, + GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, videoscale->borders_h / 2, + GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT, + out_info->width - videoscale->borders_w, + GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, + out_info->height - videoscale->borders_h, + GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_TYPE_VIDEO_MATRIX_MODE, + GST_VIDEO_MATRIX_MODE_NONE, GST_VIDEO_CONVERTER_OPT_DITHER_METHOD, + GST_TYPE_VIDEO_DITHER_METHOD, GST_VIDEO_DITHER_NONE, + GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, GST_TYPE_VIDEO_CHROMA_MODE, + GST_VIDEO_CHROMA_MODE_NONE, NULL); + + if (videoscale->gamma_decode) { + gst_structure_set (options, + GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, GST_TYPE_VIDEO_GAMMA_MODE, + GST_VIDEO_GAMMA_MODE_REMAP, NULL); + } + + if (videoscale->convert) + gst_video_converter_free (videoscale->convert); + videoscale->convert = gst_video_converter_new (in_info, out_info, options); } GST_DEBUG_OBJECT (videoscale, "from=%dx%d (par=%d/%d dar=%d/%d), size %" @@ -928,6 +981,7 @@ &to_par_n, &to_par_d)) { GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL), ("Error calculating the output scaled size - integer overflow")); + gst_structure_free (tmp); goto done; } @@ -1014,440 +1068,22 @@ return othercaps; } -static void -gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame, - gint component, gint b_w, gint b_h, gboolean interlaced, gint field) -{ - GstVideoFormat format; - gint width, height; - - format = GST_VIDEO_FRAME_FORMAT (frame); - width = GST_VIDEO_FRAME_WIDTH (frame); - height = GST_VIDEO_FRAME_HEIGHT (frame); - - image->real_width = GST_VIDEO_FRAME_COMP_WIDTH (frame, component); - image->real_height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, component); - image->width = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame->info.finfo, - component, MAX (1, width - b_w)); - image->height = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame->info.finfo, - component, MAX (1, height - b_h)); - - if (interlaced) { - image->real_height /= 2; - image->height /= 2; - } - - image->border_top = (image->real_height - image->height) / 2; - image->border_bottom = image->real_height - image->height - image->border_top; - - if (format == GST_VIDEO_FORMAT_YUY2 || format == GST_VIDEO_FORMAT_YVYU - || format == GST_VIDEO_FORMAT_UYVY) { - g_assert (component == 0); - - image->border_left = (image->real_width - image->width) / 2; - - if (image->border_left % 2 == 1) - image->border_left--; - image->border_right = image->real_width - image->width - image->border_left; - } else { - image->border_left = (image->real_width - image->width) / 2; - image->border_right = image->real_width - image->width - image->border_left; - } - - image->real_pixels = GST_VIDEO_FRAME_PLANE_DATA (frame, component); - image->stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, component); - - if (interlaced) { - if (field == 1) - image->real_pixels += image->stride; - image->stride *= 2; - } - - image->pixels = - image->real_pixels + image->border_top * image->stride + - image->border_left * GST_VIDEO_FRAME_COMP_PSTRIDE (frame, component); - -} - -static const guint8 * -_get_black_for_format (GstVideoFormat format) -{ - static const guint8 black[][4] = { - {255, 0, 0, 0}, /* 0 = ARGB, ABGR, xRGB, xBGR */ - {0, 0, 0, 255}, /* 1 = RGBA, BGRA, RGBx, BGRx */ - {255, 16, 128, 128}, /* 2 = AYUV */ - {0, 0, 0, 0}, /* 3 = RGB and BGR */ - {16, 128, 128, 0}, /* 4 = v301 */ - {16, 128, 16, 128}, /* 5 = YUY2, YUYV */ - {128, 16, 128, 16}, /* 6 = UYVY */ - {16, 0, 0, 0}, /* 7 = Y */ - {0, 0, 0, 0} /* 8 = RGB565, RGB666 */ - }; - - switch (format) { - case GST_VIDEO_FORMAT_ARGB: - case GST_VIDEO_FORMAT_ABGR: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_xBGR: - case GST_VIDEO_FORMAT_ARGB64: - return black[0]; - case GST_VIDEO_FORMAT_RGBA: - case GST_VIDEO_FORMAT_BGRA: - case GST_VIDEO_FORMAT_RGBx: - case GST_VIDEO_FORMAT_BGRx: - return black[1]; - case GST_VIDEO_FORMAT_AYUV: - case GST_VIDEO_FORMAT_AYUV64: - return black[2]; - case GST_VIDEO_FORMAT_RGB: - case GST_VIDEO_FORMAT_BGR: - return black[3]; - case GST_VIDEO_FORMAT_v308: - return black[4]; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_YVYU: - return black[5]; - case GST_VIDEO_FORMAT_UYVY: - return black[6]; - case GST_VIDEO_FORMAT_GRAY8: - return black[7]; - case GST_VIDEO_FORMAT_GRAY16_LE: - case GST_VIDEO_FORMAT_GRAY16_BE: - return NULL; /* Handled by the caller */ - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - case GST_VIDEO_FORMAT_Y444: - case GST_VIDEO_FORMAT_Y42B: - case GST_VIDEO_FORMAT_Y41B: - case GST_VIDEO_FORMAT_NV12: - return black[4]; /* Y, U, V, 0 */ - case GST_VIDEO_FORMAT_RGB16: - case GST_VIDEO_FORMAT_RGB15: - return black[8]; - default: - return NULL; - } -} +#define GET_LINE(frame, line) \ + (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, 0))) + \ + GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0) * (line)) static GstFlowReturn gst_video_scale_transform_frame (GstVideoFilter * filter, GstVideoFrame * in_frame, GstVideoFrame * out_frame) { - GstVideoScale *videoscale = GST_VIDEO_SCALE (filter); + GstVideoScale *videoscale = GST_VIDEO_SCALE_CAST (filter); GstFlowReturn ret = GST_FLOW_OK; - VSImage dest[4] = { {NULL,}, }; - VSImage src[4] = { {NULL,}, }; - gint i; - gboolean interlaced; - - interlaced = GST_VIDEO_FRAME_IS_INTERLACED (in_frame); - - for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (in_frame); i++) { - gst_video_scale_setup_vs_image (&src[i], in_frame, i, 0, 0, interlaced, 0); - gst_video_scale_setup_vs_image (&dest[i], out_frame, i, - videoscale->borders_w, videoscale->borders_h, interlaced, 0); - } - ret = do_scale (filter, dest, src); - if (interlaced) { - for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (in_frame); i++) { - gst_video_scale_setup_vs_image (&src[i], in_frame, i, 0, 0, interlaced, - 1); - gst_video_scale_setup_vs_image (&dest[i], out_frame, i, - videoscale->borders_w, videoscale->borders_h, interlaced, 1); - } - ret = do_scale (filter, dest, src); - } - return ret; -} - -static GstFlowReturn -do_scale (GstVideoFilter * filter, VSImage dest[4], VSImage src[4]) -{ - GstVideoScale *videoscale = GST_VIDEO_SCALE (filter); - GstFlowReturn ret = GST_FLOW_OK; - gint method; - const guint8 *black; - GstVideoFormat format; - gboolean add_borders; - - GST_OBJECT_LOCK (videoscale); - method = videoscale->method; - add_borders = videoscale->add_borders; - GST_OBJECT_UNLOCK (videoscale); + GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, "doing video scaling"); - format = GST_VIDEO_INFO_FORMAT (&filter->in_info); - black = _get_black_for_format (format); - - if (filter->in_info.width == 1) { - method = GST_VIDEO_SCALE_NEAREST; - } - if (method == GST_VIDEO_SCALE_4TAP && - (filter->in_info.width < 4 || filter->in_info.height < 4)) { - method = GST_VIDEO_SCALE_BILINEAR; - } - - GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, - "doing videoscale format %s", GST_VIDEO_INFO_NAME (&filter->in_info)); - - switch (format) { - case GST_VIDEO_FORMAT_RGBx: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_BGRx: - case GST_VIDEO_FORMAT_xBGR: - case GST_VIDEO_FORMAT_RGBA: - case GST_VIDEO_FORMAT_ARGB: - case GST_VIDEO_FORMAT_BGRA: - case GST_VIDEO_FORMAT_ABGR: - case GST_VIDEO_FORMAT_AYUV: - if (add_borders) - vs_fill_borders_RGBA (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_RGBA (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_RGBA (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_RGBA (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_LANCZOS: - vs_image_scale_lanczos_AYUV (&dest[0], &src[0], videoscale->tmp_buf, - videoscale->sharpness, videoscale->dither, videoscale->submethod, - videoscale->envelope, videoscale->sharpen); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_ARGB64: - case GST_VIDEO_FORMAT_AYUV64: - if (add_borders) - vs_fill_borders_AYUV64 (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_AYUV64 (&dest[0], &src[0], - videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_LANCZOS: - vs_image_scale_lanczos_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf, - videoscale->sharpness, videoscale->dither, videoscale->submethod, - videoscale->envelope, videoscale->sharpen); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_RGB: - case GST_VIDEO_FORMAT_BGR: - case GST_VIDEO_FORMAT_v308: - if (add_borders) - vs_fill_borders_RGB (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_RGB (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_RGB (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_RGB (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_YVYU: - if (add_borders) - vs_fill_borders_YUYV (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_YUYV (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_YUYV (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_YUYV (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_UYVY: - if (add_borders) - vs_fill_borders_UYVY (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_UYVY (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_UYVY (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_UYVY (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_GRAY8: - if (add_borders) - vs_fill_borders_Y (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_GRAY16_LE: - case GST_VIDEO_FORMAT_GRAY16_BE: - if (add_borders) - vs_fill_borders_Y16 (&dest[0], 0); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_Y16 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_Y16 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_Y16 (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - case GST_VIDEO_FORMAT_Y444: - case GST_VIDEO_FORMAT_Y42B: - case GST_VIDEO_FORMAT_Y41B: - if (add_borders) { - vs_fill_borders_Y (&dest[0], black); - vs_fill_borders_Y (&dest[1], black + 1); - vs_fill_borders_Y (&dest[2], black + 2); - } - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf); - vs_image_scale_nearest_Y (&dest[1], &src[1], videoscale->tmp_buf); - vs_image_scale_nearest_Y (&dest[2], &src[2], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf); - vs_image_scale_linear_Y (&dest[1], &src[1], videoscale->tmp_buf); - vs_image_scale_linear_Y (&dest[2], &src[2], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf); - vs_image_scale_4tap_Y (&dest[1], &src[1], videoscale->tmp_buf); - vs_image_scale_4tap_Y (&dest[2], &src[2], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_LANCZOS: - vs_image_scale_lanczos_Y (&dest[0], &src[0], videoscale->tmp_buf, - videoscale->sharpness, videoscale->dither, videoscale->submethod, - videoscale->envelope, videoscale->sharpen); - vs_image_scale_lanczos_Y (&dest[1], &src[1], videoscale->tmp_buf, - videoscale->sharpness, videoscale->dither, videoscale->submethod, - videoscale->envelope, videoscale->sharpen); - vs_image_scale_lanczos_Y (&dest[2], &src[2], videoscale->tmp_buf, - videoscale->sharpness, videoscale->dither, videoscale->submethod, - videoscale->envelope, videoscale->sharpen); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_NV12: - if (add_borders) { - vs_fill_borders_Y (&dest[0], black); - vs_fill_borders_Y16 (&dest[1], (black[1] << 8) | black[2]); - } - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf); - vs_image_scale_nearest_NV12 (&dest[1], &src[1], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf); - vs_image_scale_linear_NV12 (&dest[1], &src[1], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_RGB16: - if (add_borders) - vs_fill_borders_RGB565 (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_RGB565 (&dest[0], &src[0], - videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_RGB565 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_RGB565 (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - case GST_VIDEO_FORMAT_RGB15: - if (add_borders) - vs_fill_borders_RGB555 (&dest[0], black); - switch (method) { - case GST_VIDEO_SCALE_NEAREST: - vs_image_scale_nearest_RGB555 (&dest[0], &src[0], - videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_BILINEAR: - vs_image_scale_linear_RGB555 (&dest[0], &src[0], videoscale->tmp_buf); - break; - case GST_VIDEO_SCALE_4TAP: - vs_image_scale_4tap_RGB555 (&dest[0], &src[0], videoscale->tmp_buf); - break; - default: - goto unknown_mode; - } - break; - default: - goto unsupported; - } + gst_video_converter_frame (videoscale->convert, in_frame, out_frame); return ret; - - /* ERRORS */ -unsupported: - { - GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL), - ("Unsupported format %d for scaling method %d", format, method)); - return GST_FLOW_ERROR; - } -unknown_mode: - { - GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL), - ("Unknown scaling method %d", videoscale->method)); - return GST_FLOW_ERROR; - } } static gboolean @@ -1500,8 +1136,6 @@ "videoscale element"); GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE"); - vs_4tap_init (); - return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscale.h gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscale.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscale.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscale.h 2015-10-22 08:01:34.000000000 +0000 @@ -24,13 +24,8 @@ #include #include -#include "vs_image.h" - G_BEGIN_DECLS -GST_DEBUG_CATEGORY_EXTERN (video_scale_debug); -#define GST_CAT_DEFAULT video_scale_debug - #define GST_TYPE_VIDEO_SCALE \ (gst_video_scale_get_type()) #define GST_VIDEO_SCALE(obj) \ @@ -47,9 +42,15 @@ /** * GstVideoScaleMethod: * @GST_VIDEO_SCALE_NEAREST: use nearest neighbour scaling (fast and ugly) - * @GST_VIDEO_SCALE_BILINEAR: use bilinear scaling (slower but prettier). - * @GST_VIDEO_SCALE_4TAP: use a 4-tap filter for scaling (slow). + * @GST_VIDEO_SCALE_BILINEAR: use 2-tap bilinear scaling (slower but prettier). + * @GST_VIDEO_SCALE_4TAP: use a 4-tap sinc filter for scaling (slow). * @GST_VIDEO_SCALE_LANCZOS: use a multitap Lanczos filter for scaling (slow). + * @GST_VIDEO_SCALE_BILINEAR2: use a multitap bilinear filter + * @GST_VIDEO_SCALE_SINC: use a multitap sinc filter + * @GST_VIDEO_SCALE_HERMITE: use a multitap bicubic Hermite filter + * @GST_VIDEO_SCALE_SPLINE: use a multitap bicubic spline filter + * @GST_VIDEO_SCALE_CATROM: use a multitap bicubic Catmull-Rom filter + * @GST_VIDEO_SCALE_MITCHELL: use a multitap bicubic Mitchell filter * * The videoscale method to use. */ @@ -57,7 +58,14 @@ GST_VIDEO_SCALE_NEAREST, GST_VIDEO_SCALE_BILINEAR, GST_VIDEO_SCALE_4TAP, - GST_VIDEO_SCALE_LANCZOS + GST_VIDEO_SCALE_LANCZOS, + + GST_VIDEO_SCALE_BILINEAR2, + GST_VIDEO_SCALE_SINC, + GST_VIDEO_SCALE_HERMITE, + GST_VIDEO_SCALE_SPLINE, + GST_VIDEO_SCALE_CATROM, + GST_VIDEO_SCALE_MITCHELL } GstVideoScaleMethod; typedef struct _GstVideoScale GstVideoScale; @@ -79,12 +87,12 @@ gboolean dither; int submethod; double envelope; + gboolean gamma_decode; + + GstVideoConverter *convert; gint borders_h; gint borders_w; - - /*< private >*/ - guint8 *tmp_buf; }; struct _GstVideoScaleClass { diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc-dist.c gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc-dist.c 2014-09-24 08:19:15.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc-dist.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2561 +0,0 @@ - -/* autogenerated from gstvideoscaleorc.orc */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include - -#ifndef _ORC_INTEGER_TYPEDEFS_ -#define _ORC_INTEGER_TYPEDEFS_ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -typedef int8_t orc_int8; -typedef int16_t orc_int16; -typedef int32_t orc_int32; -typedef int64_t orc_int64; -typedef uint8_t orc_uint8; -typedef uint16_t orc_uint16; -typedef uint32_t orc_uint32; -typedef uint64_t orc_uint64; -#define ORC_UINT64_C(x) UINT64_C(x) -#elif defined(_MSC_VER) -typedef signed __int8 orc_int8; -typedef signed __int16 orc_int16; -typedef signed __int32 orc_int32; -typedef signed __int64 orc_int64; -typedef unsigned __int8 orc_uint8; -typedef unsigned __int16 orc_uint16; -typedef unsigned __int32 orc_uint32; -typedef unsigned __int64 orc_uint64; -#define ORC_UINT64_C(x) (x##Ui64) -#define inline __inline -#else -#include -typedef signed char orc_int8; -typedef short orc_int16; -typedef int orc_int32; -typedef unsigned char orc_uint8; -typedef unsigned short orc_uint16; -typedef unsigned int orc_uint32; -#if INT_MAX == LONG_MAX -typedef long long orc_int64; -typedef unsigned long long orc_uint64; -#define ORC_UINT64_C(x) (x##ULL) -#else -typedef long orc_int64; -typedef unsigned long orc_uint64; -#define ORC_UINT64_C(x) (x##UL) -#endif -#endif -typedef union -{ - orc_int16 i; - orc_int8 x2[2]; -} orc_union16; -typedef union -{ - orc_int32 i; - float f; - orc_int16 x2[2]; - orc_int8 x4[4]; -} orc_union32; -typedef union -{ - orc_int64 i; - double f; - orc_int32 x2[2]; - float x2f[2]; - orc_int16 x4[4]; -} orc_union64; -#endif -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif - -#ifndef ORC_INTERNAL -#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define ORC_INTERNAL __hidden -#elif defined (__GNUC__) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#else -#define ORC_INTERNAL -#endif -#endif - - -#ifndef DISABLE_ORC -#include -#endif -void video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, - const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, - int p1, int n); -void video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, - const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, - int p1, int p2, int n); -void video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n); -void video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n); -void video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, - int n); -void video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1, - const guint16 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n); -void video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, - int p2, int p3, int p4, int n); - - -/* begin Orc C target preamble */ -#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x))) -#define ORC_ABS(a) ((a)<0 ? -(a) : (a)) -#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b)) -#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b)) -#define ORC_SB_MAX 127 -#define ORC_SB_MIN (-1-ORC_SB_MAX) -#define ORC_UB_MAX 255 -#define ORC_UB_MIN 0 -#define ORC_SW_MAX 32767 -#define ORC_SW_MIN (-1-ORC_SW_MAX) -#define ORC_UW_MAX 65535 -#define ORC_UW_MIN 0 -#define ORC_SL_MAX 2147483647 -#define ORC_SL_MIN (-1-ORC_SL_MAX) -#define ORC_UL_MAX 4294967295U -#define ORC_UL_MIN 0 -#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX) -#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX) -#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX) -#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX) -#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX) -#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX) -#define ORC_SWAP_W(x) ((((x)&0xffU)<<8) | (((x)&0xff00U)>>8)) -#define ORC_SWAP_L(x) ((((x)&0xffU)<<24) | (((x)&0xff00U)<<8) | (((x)&0xff0000U)>>8) | (((x)&0xff000000U)>>24)) -#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56)) -#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset))) -#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff)) -#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0)) -#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff))) -#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0)) -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif -/* end Orc C target preamble */ - - - -/* video_scale_orc_merge_linear_u8 */ -#ifdef DISABLE_ORC -void -video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, - const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, - int p1, int n) -{ - int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var36; - orc_int8 var37; - orc_union16 var38; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var39; -#else - orc_union16 var39; -#endif - orc_int8 var40; - orc_int8 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_int8 var47; - - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_int8 *) s1; - ptr5 = (orc_int8 *) s2; - - /* 6: loadpw */ - var38.i = p1; - /* 8: loadpw */ - var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var41 = ptr4[i]; - /* 1: loadb */ - var36 = ptr4[i]; - /* 2: convubw */ - var42.i = (orc_uint8) var36; - /* 3: loadb */ - var37 = ptr5[i]; - /* 4: convubw */ - var43.i = (orc_uint8) var37; - /* 5: subw */ - var44.i = var43.i - var42.i; - /* 7: mullw */ - var45.i = (var44.i * var38.i) & 0xffff; - /* 9: addw */ - var46.i = var45.i + var39.i; - /* 10: convhwb */ - var47 = ((orc_uint16) var46.i) >> 8; - /* 11: addb */ - var40 = var47 + var41; - /* 12: storeb */ - ptr0[i] = var40; - } - -} - -#else -static void -_backup_video_scale_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var36; - orc_int8 var37; - orc_union16 var38; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var39; -#else - orc_union16 var39; -#endif - orc_int8 var40; - orc_int8 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_int8 var47; - - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - ptr5 = (orc_int8 *) ex->arrays[5]; - - /* 6: loadpw */ - var38.i = ex->params[24]; - /* 8: loadpw */ - var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var41 = ptr4[i]; - /* 1: loadb */ - var36 = ptr4[i]; - /* 2: convubw */ - var42.i = (orc_uint8) var36; - /* 3: loadb */ - var37 = ptr5[i]; - /* 4: convubw */ - var43.i = (orc_uint8) var37; - /* 5: subw */ - var44.i = var43.i - var42.i; - /* 7: mullw */ - var45.i = (var44.i * var38.i) & 0xffff; - /* 9: addw */ - var46.i = var45.i + var39.i; - /* 10: convhwb */ - var47 = ((orc_uint16) var46.i) >> 8; - /* 11: addb */ - var40 = var47 + var41; - /* 12: storeb */ - ptr0[i] = var40; - } - -} - -void -video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, - const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, - int p1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 31, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 109, 101, 114, 103, 101, 95, 108, 105, 110, 101, 97, 114, - 95, - 117, 56, 11, 1, 1, 12, 1, 1, 12, 1, 1, 14, 4, 128, 0, 0, - 0, 16, 1, 20, 2, 20, 2, 20, 1, 20, 1, 43, 34, 4, 150, 32, - 4, 150, 33, 5, 98, 33, 33, 32, 89, 33, 33, 24, 70, 33, 33, 16, - 158, 35, 33, 33, 0, 35, 34, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_linear_u8); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_merge_linear_u8"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_linear_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_constant (p, 4, 0x00000080, "c1"); - orc_program_add_parameter (p, 1, "p1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - - orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_P1] = p1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_merge_linear_u16 */ -#ifdef DISABLE_ORC -void -video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, - const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, - int p1, int p2, int n) -{ - int i; - orc_union16 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - orc_union16 var34; - orc_union16 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union32 var41; - orc_union32 var42; - - ptr0 = (orc_union16 *) d1; - ptr4 = (orc_union16 *) s1; - ptr5 = (orc_union16 *) s2; - - /* 1: loadpw */ - var35.i = p1; - /* 4: loadpw */ - var37.i = p2; - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 2: muluwl */ - var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i); - /* 3: loadw */ - var36 = ptr5[i]; - /* 5: muluwl */ - var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i); - /* 6: addl */ - var41.i = var39.i + var40.i; - /* 7: shrul */ - var42.i = ((orc_uint32) var41.i) >> 16; - /* 8: convlw */ - var38.i = var42.i; - /* 9: storew */ - ptr0[i] = var38; - } - -} - -#else -static void -_backup_video_scale_orc_merge_linear_u16 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union16 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - const orc_union16 *ORC_RESTRICT ptr5; - orc_union16 var34; - orc_union16 var35; - orc_union16 var36; - orc_union16 var37; - orc_union16 var38; - orc_union32 var39; - orc_union32 var40; - orc_union32 var41; - orc_union32 var42; - - ptr0 = (orc_union16 *) ex->arrays[0]; - ptr4 = (orc_union16 *) ex->arrays[4]; - ptr5 = (orc_union16 *) ex->arrays[5]; - - /* 1: loadpw */ - var35.i = ex->params[24]; - /* 4: loadpw */ - var37.i = ex->params[25]; - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 2: muluwl */ - var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i); - /* 3: loadw */ - var36 = ptr5[i]; - /* 5: muluwl */ - var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i); - /* 6: addl */ - var41.i = var39.i + var40.i; - /* 7: shrul */ - var42.i = ((orc_uint32) var41.i) >> 16; - /* 8: convlw */ - var38.i = var42.i; - /* 9: storew */ - ptr0[i] = var38; - } - -} - -void -video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, - const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, - int p1, int p2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 32, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 109, 101, 114, 103, 101, 95, 108, 105, 110, 101, 97, 114, - 95, - 117, 49, 54, 11, 2, 2, 12, 2, 2, 12, 2, 2, 14, 4, 16, 0, - 0, 0, 16, 2, 16, 2, 20, 4, 20, 4, 177, 32, 4, 24, 177, 33, - 5, 25, 103, 32, 32, 33, 126, 32, 32, 16, 163, 0, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_linear_u16); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_merge_linear_u16"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_linear_u16); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_source (p, 2, "s2"); - orc_program_add_constant (p, 4, 0x00000010, "c1"); - orc_program_add_parameter (p, 2, "p1"); - orc_program_add_parameter (p, 2, "p2"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - - orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_splat_u16 */ -#ifdef DISABLE_ORC -void -video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n) -{ - int i; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 var32; - orc_union16 var33; - - ptr0 = (orc_union16 *) d1; - - /* 0: loadpw */ - var32.i = p1; - - for (i = 0; i < n; i++) { - /* 1: copyw */ - var33.i = var32.i; - /* 2: storew */ - ptr0[i] = var33; - } - -} - -#else -static void -_backup_video_scale_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union16 *ORC_RESTRICT ptr0; - orc_union16 var32; - orc_union16 var33; - - ptr0 = (orc_union16 *) ex->arrays[0]; - - /* 0: loadpw */ - var32.i = ex->params[24]; - - for (i = 0; i < n; i++) { - /* 1: copyw */ - var33.i = var32.i; - /* 2: storew */ - ptr0[i] = var33; - } - -} - -void -video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 49, 54, 11, 2, 2, 16, - 2, 79, 0, 24, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u16); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_splat_u16"); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u16); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_parameter (p, 2, "p1"); - - orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_P1] = p1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_splat_u32 */ -#ifdef DISABLE_ORC -void -video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 var32; - orc_union32 var33; - - ptr0 = (orc_union32 *) d1; - - /* 0: loadpl */ - var32.i = p1; - - for (i = 0; i < n; i++) { - /* 1: copyl */ - var33.i = var32.i; - /* 2: storel */ - ptr0[i] = var33; - } - -} - -#else -static void -_backup_video_scale_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 var32; - orc_union32 var33; - - ptr0 = (orc_union32 *) ex->arrays[0]; - - /* 0: loadpl */ - var32.i = ex->params[24]; - - for (i = 0; i < n; i++) { - /* 1: copyl */ - var33.i = var32.i; - /* 2: storel */ - ptr0[i] = var33; - } - -} - -void -video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11, 4, 4, 16, - 4, 112, 0, 24, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u32); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_splat_u32"); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u32); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_parameter (p, 4, "p1"); - - orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->params[ORC_VAR_P1] = p1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_splat_u64 */ -#ifdef DISABLE_ORC -void -video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n) -{ - int i; - orc_union64 *ORC_RESTRICT ptr0; - orc_union64 var32; - orc_union64 var33; - - ptr0 = (orc_union64 *) d1; - - /* 0: loadpq */ - var32.i = p1; - - for (i = 0; i < n; i++) { - /* 1: copyq */ - var33.i = var32.i; - /* 2: storeq */ - ptr0[i] = var33; - } - -} - -#else -static void -_backup_video_scale_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union64 *ORC_RESTRICT ptr0; - orc_union64 var32; - orc_union64 var33; - - ptr0 = (orc_union64 *) ex->arrays[0]; - - /* 0: loadpq */ - var32.i = - (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + - (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); - - for (i = 0; i < n; i++) { - /* 1: copyq */ - var33.i = var32.i; - /* 2: storeq */ - ptr0[i] = var33; - } - -} - -void -video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 54, 52, 11, 8, 8, 18, - 8, 137, 0, 24, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u64); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_splat_u64"); - orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u64); - orc_program_add_destination (p, 8, "d1"); - orc_program_add_parameter_int64 (p, 8, "p1"); - - orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - { - orc_union64 tmp; - tmp.i = p1; - ex->params[ORC_VAR_P1] = tmp.x2[0]; - ex->params[ORC_VAR_T1] = tmp.x2[1]; - } - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_downsample_u8 */ -#ifdef DISABLE_ORC -void -video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_union16 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var34.i; - var36 = _src.x2[1]; - var37 = _src.x2[0]; - } - /* 2: avgub */ - var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var35; - } - -} - -#else -static void -_backup_video_scale_orc_downsample_u8 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_union16 *ORC_RESTRICT ptr4; - orc_union16 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_union16 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: loadw */ - var34 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var34.i; - var36 = _src.x2[1]; - var37 = _src.x2[0]; - } - /* 2: avgub */ - var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; - /* 3: storeb */ - ptr0[i] = var35; - } - -} - -void -video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 29, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117, - 56, - 11, 1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0, - 32, 33, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u8); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_downsample_u8"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 2, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_downsample_u16 */ -#ifdef DISABLE_ORC -void -video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1, - const guint16 * ORC_RESTRICT s1, int n) -{ - int i; - orc_union16 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var34; - orc_union16 var35; - orc_union16 var36; - orc_union16 var37; - - ptr0 = (orc_union16 *) d1; - ptr4 = (orc_union32 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var34 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var34.i; - var36.i = _src.x2[1]; - var37.i = _src.x2[0]; - } - /* 2: avguw */ - var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1; - /* 3: storew */ - ptr0[i] = var35; - } - -} - -#else -static void -_backup_video_scale_orc_downsample_u16 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union16 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var34; - orc_union16 var35; - orc_union16 var36; - orc_union16 var37; - - ptr0 = (orc_union16 *) ex->arrays[0]; - ptr4 = (orc_union32 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: loadl */ - var34 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var34.i; - var36.i = _src.x2[1]; - var37.i = _src.x2[0]; - } - /* 2: avguw */ - var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1; - /* 3: storew */ - ptr0[i] = var35; - } - -} - -void -video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1, - const guint16 * ORC_RESTRICT s1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 30, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117, - 49, - 54, 11, 2, 2, 12, 4, 4, 20, 2, 20, 2, 198, 32, 33, 4, 76, - 0, 32, 33, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u16); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_downsample_u16"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u16); - orc_program_add_destination (p, 2, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "avguw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_downsample_u32 */ -#ifdef DISABLE_ORC -void -video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var34; - orc_union32 var35; - orc_union32 var36; - orc_union32 var37; - - ptr0 = (orc_union32 *) d1; - ptr4 = (orc_union64 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var34 = ptr4[i]; - /* 1: splitql */ - { - orc_union64 _src; - _src.i = var34.i; - var36.i = _src.x2[1]; - var37.i = _src.x2[0]; - } - /* 2: avgub */ - var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1; - var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1; - var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1; - var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1; - /* 3: storel */ - ptr0[i] = var35; - } - -} - -#else -static void -_backup_video_scale_orc_downsample_u32 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var34; - orc_union32 var35; - orc_union32 var36; - orc_union32 var37; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr4 = (orc_union64 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var34 = ptr4[i]; - /* 1: splitql */ - { - orc_union64 _src; - _src.i = var34.i; - var36.i = _src.x2[1]; - var37.i = _src.x2[0]; - } - /* 2: avgub */ - var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1; - var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1; - var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1; - var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1; - /* 3: storel */ - ptr0[i] = var35; - } - -} - -void -video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 30, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117, - 51, - 50, 11, 4, 4, 12, 8, 8, 20, 4, 20, 4, 197, 32, 33, 4, 21, - 2, 39, 0, 32, 33, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u32); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_downsample_u32"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_u32); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - - orc_program_append_2 (p, "splitql", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_downsample_yuyv */ -#ifdef DISABLE_ORC -void -video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var38; - orc_union32 var39; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_union16 var47; - - ptr0 = (orc_union32 *) d1; - ptr4 = (orc_union64 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var38 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var38.x4[0]; - var40.x4[0] = _src.x2[1]; - var41.x4[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[1]; - var40.x4[1] = _src.x2[1]; - var41.x4[1] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[2]; - var40.x4[2] = _src.x2[1]; - var41.x4[2] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[3]; - var40.x4[3] = _src.x2[1]; - var41.x4[3] = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var42.x2[0] = _src.x2[1]; - var43.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var42.x2[1] = _src.x2[1]; - var43.x2[1] = _src.x2[0]; - } - /* 3: avgub */ - var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; - var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; - /* 4: splitlw */ - { - orc_union32 _src; - _src.i = var41.i; - var45.i = _src.x2[1]; - var46.i = _src.x2[0]; - } - /* 5: avgub */ - var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1; - var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[0]; - _dest.x2[1] = var47.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[1]; - _dest.x2[1] = var47.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - -} - -#else -static void -_backup_video_scale_orc_downsample_yuyv (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union64 *ORC_RESTRICT ptr4; - orc_union64 var38; - orc_union32 var39; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_union16 var47; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr4 = (orc_union64 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: loadq */ - var38 = ptr4[i]; - /* 1: splitwb */ - { - orc_union16 _src; - _src.i = var38.x4[0]; - var40.x4[0] = _src.x2[1]; - var41.x4[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[1]; - var40.x4[1] = _src.x2[1]; - var41.x4[1] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[2]; - var40.x4[2] = _src.x2[1]; - var41.x4[2] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var38.x4[3]; - var40.x4[3] = _src.x2[1]; - var41.x4[3] = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var40.x2[0]; - var42.x2[0] = _src.x2[1]; - var43.x2[0] = _src.x2[0]; - } - { - orc_union16 _src; - _src.i = var40.x2[1]; - var42.x2[1] = _src.x2[1]; - var43.x2[1] = _src.x2[0]; - } - /* 3: avgub */ - var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; - var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; - /* 4: splitlw */ - { - orc_union32 _src; - _src.i = var41.i; - var45.i = _src.x2[1]; - var46.i = _src.x2[0]; - } - /* 5: avgub */ - var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1; - var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1; - /* 6: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[0]; - _dest.x2[1] = var47.x2[0]; - var39.x2[0] = _dest.i; - } - { - orc_union16 _dest; - _dest.x2[0] = var44.x2[1]; - _dest.x2[1] = var47.x2[1]; - var39.x2[1] = _dest.i; - } - /* 7: storel */ - ptr0[i] = var39; - } - -} - -void -video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 31, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 121, - 117, - 121, 118, 11, 4, 4, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, - 20, 2, 20, 2, 21, 2, 199, 32, 33, 4, 21, 1, 199, 34, 35, 32, - 21, 1, 39, 36, 34, 35, 198, 34, 35, 33, 21, 1, 39, 37, 34, 35, - 21, 1, 196, 0, 36, 37, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_yuyv); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_downsample_yuyv"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_downsample_yuyv); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 8, "s1"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 2, "t3"); - orc_program_add_temporary (p, 2, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - - orc_program_append_2 (p, "splitwb", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T1, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "avgub", 1, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_resample_nearest_u8 */ -#ifdef DISABLE_ORC -void -video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_int8 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: ldresnearb */ - var32 = ptr4[(p1 + i * p2) >> 16]; - /* 1: storeb */ - ptr0[i] = var32; - } - -} - -#else -static void -_backup_video_scale_orc_resample_nearest_u8 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: ldresnearb */ - var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16]; - /* 1: storeb */ - ptr0[i] = var32; - } - -} - -void -video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 35, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 110, 101, 97, - 114, - 101, 115, 116, 95, 117, 56, 11, 1, 1, 12, 1, 1, 16, 4, 16, 4, - 48, 0, 4, 24, 25, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_nearest_u8); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_resample_nearest_u8"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_nearest_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - - orc_program_append_2 (p, "ldresnearb", 0, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_P1, ORC_VAR_P2); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_resample_bilinear_u8 */ -#ifdef DISABLE_ORC -void -video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_int8 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: ldreslinb */ - { - int tmp = p1 + i * p2; - var32 = - ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storeb */ - ptr0[i] = var32; - } - -} - -#else -static void -_backup_video_scale_orc_resample_bilinear_u8 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - orc_int8 var32; - - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: ldreslinb */ - { - int tmp = ex->params[24] + i * ex->params[25]; - var32 = - ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storeb */ - ptr0[i] = var32; - } - -} - -void -video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 36, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 98, 105, 108, - 105, - 110, 101, 97, 114, 95, 117, 56, 11, 1, 1, 12, 1, 1, 16, 4, 16, - 4, 50, 0, 4, 24, 25, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_bilinear_u8); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_resample_bilinear_u8"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_bilinear_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - - orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_P1, ORC_VAR_P2); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_resample_nearest_u32 */ -#ifdef DISABLE_ORC -void -video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - - ptr0 = (orc_union32 *) d1; - ptr4 = (orc_union32 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: ldresnearl */ - var32 = ptr4[(p1 + i * p2) >> 16]; - /* 1: storel */ - ptr0[i] = var32; - } - -} - -#else -static void -_backup_video_scale_orc_resample_nearest_u32 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr4 = (orc_union32 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: ldresnearl */ - var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16]; - /* 1: storel */ - ptr0[i] = var32; - } - -} - -void -video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 36, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 110, 101, 97, - 114, - 101, 115, 116, 95, 117, 51, 50, 11, 4, 4, 12, 4, 4, 16, 4, 16, - 4, 49, 0, 4, 24, 25, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_nearest_u32); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_resample_nearest_u32"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_nearest_u32); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - - orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_P1, ORC_VAR_P2); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_resample_bilinear_u32 */ -#ifdef DISABLE_ORC -void -video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - - ptr0 = (orc_union32 *) d1; - ptr4 = (orc_union32 *) s1; - - - for (i = 0; i < n; i++) { - /* 0: ldreslinl */ - { - int tmp = p1 + i * p2; - orc_union32 a = ptr4[tmp >> 16]; - orc_union32 b = ptr4[(tmp >> 16) + 1]; - var32.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storel */ - ptr0[i] = var32; - } - -} - -#else -static void -_backup_video_scale_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr4 = (orc_union32 *) ex->arrays[4]; - - - for (i = 0; i < n; i++) { - /* 0: ldreslinl */ - { - int tmp = ex->params[24] + i * ex->params[25]; - orc_union32 a = ptr4[tmp >> 16]; - orc_union32 b = ptr4[(tmp >> 16) + 1]; - var32.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storel */ - ptr0[i] = var32; - } - -} - -void -video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 37, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 98, 105, 108, - 105, - 110, 101, 97, 114, 95, 117, 51, 50, 11, 4, 4, 12, 4, 4, 16, 4, - 16, 4, 51, 0, 4, 24, 25, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_bilinear_u32); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_resample_bilinear_u32"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_bilinear_u32); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - - orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_P1, ORC_VAR_P2); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_resample_merge_bilinear_u32 */ -#ifdef DISABLE_ORC -void -video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n) -{ - int i; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union64 var41; - orc_union64 var42; - orc_union64 var43; - orc_union64 var44; - orc_union32 var45; - - ptr0 = (orc_union32 *) d1; - ptr1 = (orc_union32 *) d2; - ptr4 = (orc_union32 *) s1; - ptr5 = (orc_union32 *) s2; - - /* 6: loadpw */ - var37.x4[0] = p1; - var37.x4[1] = p1; - var37.x4[2] = p1; - var37.x4[3] = p1; - - for (i = 0; i < n; i++) { - /* 0: ldreslinl */ - { - int tmp = p2 + i * p3; - orc_union32 a = ptr5[tmp >> 16]; - orc_union32 b = ptr5[(tmp >> 16) + 1]; - var39.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storel */ - ptr1[i] = var39; - /* 2: loadl */ - var40 = ptr4[i]; - /* 3: convubw */ - var41.x4[0] = (orc_uint8) var40.x4[0]; - var41.x4[1] = (orc_uint8) var40.x4[1]; - var41.x4[2] = (orc_uint8) var40.x4[2]; - var41.x4[3] = (orc_uint8) var40.x4[3]; - /* 4: convubw */ - var42.x4[0] = (orc_uint8) var39.x4[0]; - var42.x4[1] = (orc_uint8) var39.x4[1]; - var42.x4[2] = (orc_uint8) var39.x4[2]; - var42.x4[3] = (orc_uint8) var39.x4[3]; - /* 5: subw */ - var43.x4[0] = var42.x4[0] - var41.x4[0]; - var43.x4[1] = var42.x4[1] - var41.x4[1]; - var43.x4[2] = var42.x4[2] - var41.x4[2]; - var43.x4[3] = var42.x4[3] - var41.x4[3]; - /* 7: mullw */ - var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff; - var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff; - var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff; - var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff; - /* 8: convhwb */ - var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8; - var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8; - var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8; - var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8; - /* 9: addb */ - var38.x4[0] = var45.x4[0] + var40.x4[0]; - var38.x4[1] = var45.x4[1] + var40.x4[1]; - var38.x4[2] = var45.x4[2] + var40.x4[2]; - var38.x4[3] = var45.x4[3] + var40.x4[3]; - /* 10: storel */ - ptr0[i] = var38; - } - -} - -#else -static void -_backup_video_scale_orc_resample_merge_bilinear_u32 (OrcExecutor * - ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; - orc_union32 *ORC_RESTRICT ptr1; - const orc_union32 *ORC_RESTRICT ptr4; - const orc_union32 *ORC_RESTRICT ptr5; - orc_union64 var37; - orc_union32 var38; - orc_union32 var39; - orc_union32 var40; - orc_union64 var41; - orc_union64 var42; - orc_union64 var43; - orc_union64 var44; - orc_union32 var45; - - ptr0 = (orc_union32 *) ex->arrays[0]; - ptr1 = (orc_union32 *) ex->arrays[1]; - ptr4 = (orc_union32 *) ex->arrays[4]; - ptr5 = (orc_union32 *) ex->arrays[5]; - - /* 6: loadpw */ - var37.x4[0] = ex->params[24]; - var37.x4[1] = ex->params[24]; - var37.x4[2] = ex->params[24]; - var37.x4[3] = ex->params[24]; - - for (i = 0; i < n; i++) { - /* 0: ldreslinl */ - { - int tmp = ex->params[25] + i * ex->params[26]; - orc_union32 a = ptr5[tmp >> 16]; - orc_union32 b = ptr5[(tmp >> 16) + 1]; - var39.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var39.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; - } - /* 1: storel */ - ptr1[i] = var39; - /* 2: loadl */ - var40 = ptr4[i]; - /* 3: convubw */ - var41.x4[0] = (orc_uint8) var40.x4[0]; - var41.x4[1] = (orc_uint8) var40.x4[1]; - var41.x4[2] = (orc_uint8) var40.x4[2]; - var41.x4[3] = (orc_uint8) var40.x4[3]; - /* 4: convubw */ - var42.x4[0] = (orc_uint8) var39.x4[0]; - var42.x4[1] = (orc_uint8) var39.x4[1]; - var42.x4[2] = (orc_uint8) var39.x4[2]; - var42.x4[3] = (orc_uint8) var39.x4[3]; - /* 5: subw */ - var43.x4[0] = var42.x4[0] - var41.x4[0]; - var43.x4[1] = var42.x4[1] - var41.x4[1]; - var43.x4[2] = var42.x4[2] - var41.x4[2]; - var43.x4[3] = var42.x4[3] - var41.x4[3]; - /* 7: mullw */ - var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff; - var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff; - var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff; - var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff; - /* 8: convhwb */ - var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8; - var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8; - var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8; - var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8; - /* 9: addb */ - var38.x4[0] = var45.x4[0] + var40.x4[0]; - var38.x4[1] = var45.x4[1] + var40.x4[1]; - var38.x4[2] = var45.x4[2] + var40.x4[2]; - var38.x4[3] = var45.x4[3] + var40.x4[3]; - /* 10: storel */ - ptr0[i] = var38; - } - -} - -void -video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, - guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, - const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 43, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 109, 101, 114, - 103, - 101, 95, 98, 105, 108, 105, 110, 101, 97, 114, 95, 117, 51, 50, 11, 4, - 4, 11, 4, 4, 12, 4, 4, 12, 4, 4, 16, 4, 16, 4, 16, 4, - 20, 4, 20, 4, 20, 4, 20, 8, 20, 8, 51, 33, 5, 25, 26, 128, - 1, 33, 113, 32, 4, 21, 2, 150, 35, 32, 21, 2, 150, 36, 33, 21, - 2, 98, 36, 36, 35, 21, 2, 89, 36, 36, 24, 21, 2, 158, 34, 36, - 21, 2, 33, 0, 34, 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_merge_bilinear_u32); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_resample_merge_bilinear_u32"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_resample_merge_bilinear_u32); - orc_program_add_destination (p, 4, "d1"); - orc_program_add_destination (p, 4, "d2"); - orc_program_add_source (p, 4, "s1"); - orc_program_add_source (p, 4, "s2"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - orc_program_add_parameter (p, 4, "p3"); - orc_program_add_temporary (p, 4, "t1"); - orc_program_add_temporary (p, 4, "t2"); - orc_program_add_temporary (p, 4, "t3"); - orc_program_add_temporary (p, 8, "t4"); - orc_program_add_temporary (p, 8, "t5"); - - orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_T2, ORC_VAR_S2, - ORC_VAR_P2, ORC_VAR_P3); - orc_program_append_2 (p, "storel", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "convhwb", 2, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1, - ORC_VAR_D1); - orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T1, - ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_D2] = d2; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - - func = c->exec; - func (ex); -} -#endif - - -/* video_scale_orc_merge_bicubic_u8 */ -#ifdef DISABLE_ORC -void -video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, - int p2, int p3, int p4, int n) -{ - int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - orc_int8 var38; - orc_int8 var39; - orc_int8 var40; - orc_int8 var41; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var42; -#else - orc_union16 var42; -#endif - orc_int8 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_union16 var47; - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; - - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_int8 *) s1; - ptr5 = (orc_int8 *) s2; - ptr6 = (orc_int8 *) s3; - ptr7 = (orc_int8 *) s4; - - /* 1: loadpb */ - var35 = p2; - /* 4: loadpb */ - var37 = p3; - /* 8: loadpb */ - var39 = p1; - /* 12: loadpb */ - var41 = p4; - /* 15: loadpw */ - var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var34 = ptr5[i]; - /* 2: mulubw */ - var44.i = ((orc_uint8) var34) * ((orc_uint8) var35); - /* 3: loadb */ - var36 = ptr6[i]; - /* 5: mulubw */ - var45.i = ((orc_uint8) var36) * ((orc_uint8) var37); - /* 6: addw */ - var46.i = var44.i + var45.i; - /* 7: loadb */ - var38 = ptr4[i]; - /* 9: mulubw */ - var47.i = ((orc_uint8) var38) * ((orc_uint8) var39); - /* 10: subw */ - var48.i = var46.i - var47.i; - /* 11: loadb */ - var40 = ptr7[i]; - /* 13: mulubw */ - var49.i = ((orc_uint8) var40) * ((orc_uint8) var41); - /* 14: subw */ - var50.i = var48.i - var49.i; - /* 16: addw */ - var51.i = var50.i + var42.i; - /* 17: shrsw */ - var52.i = var51.i >> 6; - /* 18: convsuswb */ - var43 = ORC_CLAMP_UB (var52.i); - /* 19: storeb */ - ptr0[i] = var43; - } - -} - -#else -static void -_backup_video_scale_orc_merge_bicubic_u8 (OrcExecutor * ORC_RESTRICT ex) -{ - int i; - int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - const orc_int8 *ORC_RESTRICT ptr6; - const orc_int8 *ORC_RESTRICT ptr7; - orc_int8 var34; - orc_int8 var35; - orc_int8 var36; - orc_int8 var37; - orc_int8 var38; - orc_int8 var39; - orc_int8 var40; - orc_int8 var41; -#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) - volatile orc_union16 var42; -#else - orc_union16 var42; -#endif - orc_int8 var43; - orc_union16 var44; - orc_union16 var45; - orc_union16 var46; - orc_union16 var47; - orc_union16 var48; - orc_union16 var49; - orc_union16 var50; - orc_union16 var51; - orc_union16 var52; - - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - ptr5 = (orc_int8 *) ex->arrays[5]; - ptr6 = (orc_int8 *) ex->arrays[6]; - ptr7 = (orc_int8 *) ex->arrays[7]; - - /* 1: loadpb */ - var35 = ex->params[25]; - /* 4: loadpb */ - var37 = ex->params[26]; - /* 8: loadpb */ - var39 = ex->params[24]; - /* 12: loadpb */ - var41 = ex->params[27]; - /* 15: loadpw */ - var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ - - for (i = 0; i < n; i++) { - /* 0: loadb */ - var34 = ptr5[i]; - /* 2: mulubw */ - var44.i = ((orc_uint8) var34) * ((orc_uint8) var35); - /* 3: loadb */ - var36 = ptr6[i]; - /* 5: mulubw */ - var45.i = ((orc_uint8) var36) * ((orc_uint8) var37); - /* 6: addw */ - var46.i = var44.i + var45.i; - /* 7: loadb */ - var38 = ptr4[i]; - /* 9: mulubw */ - var47.i = ((orc_uint8) var38) * ((orc_uint8) var39); - /* 10: subw */ - var48.i = var46.i - var47.i; - /* 11: loadb */ - var40 = ptr7[i]; - /* 13: mulubw */ - var49.i = ((orc_uint8) var40) * ((orc_uint8) var41); - /* 14: subw */ - var50.i = var48.i - var49.i; - /* 16: addw */ - var51.i = var50.i + var42.i; - /* 17: shrsw */ - var52.i = var51.i >> 6; - /* 18: convsuswb */ - var43 = ORC_CLAMP_UB (var52.i); - /* 19: storeb */ - ptr0[i] = var43; - } - -} - -void -video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, - const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, - int p2, int p3, int p4, int n) -{ - OrcExecutor _ex, *ex = &_ex; - static volatile int p_inited = 0; - static OrcCode *c = 0; - void (*func) (OrcExecutor *); - - if (!p_inited) { - orc_once_mutex_lock (); - if (!p_inited) { - OrcProgram *p; - -#if 1 - static const orc_uint8 bc[] = { - 1, 9, 32, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111, - 114, 99, 95, 109, 101, 114, 103, 101, 95, 98, 105, 99, 117, 98, 105, 99, - 95, 117, 56, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, - 1, 1, 14, 4, 32, 0, 0, 0, 14, 4, 6, 0, 0, 0, 16, 4, - 16, 4, 16, 4, 16, 4, 20, 2, 20, 2, 175, 32, 5, 25, 175, 33, - 6, 26, 70, 32, 32, 33, 175, 33, 4, 24, 98, 32, 32, 33, 175, 33, - 7, 27, 98, 32, 32, 33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, - 32, 2, 0, - }; - p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_bicubic_u8); -#else - p = orc_program_new (); - orc_program_set_name (p, "video_scale_orc_merge_bicubic_u8"); - orc_program_set_backup_function (p, - _backup_video_scale_orc_merge_bicubic_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_source (p, 1, "s3"); - orc_program_add_source (p, 1, "s4"); - orc_program_add_constant (p, 4, 0x00000020, "c1"); - orc_program_add_constant (p, 4, 0x00000006, "c2"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); - orc_program_add_parameter (p, 4, "p3"); - orc_program_add_parameter (p, 4, "p4"); - orc_program_add_temporary (p, 2, "t1"); - orc_program_add_temporary (p, 2, "t2"); - - orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_P2, - ORC_VAR_D1); - orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P3, - ORC_VAR_D1); - orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_P1, - ORC_VAR_D1); - orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_P4, - ORC_VAR_D1); - orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, - ORC_VAR_D1); - orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, - ORC_VAR_D1); - orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, - ORC_VAR_D1, ORC_VAR_D1); -#endif - - orc_program_compile (p); - c = orc_program_take_code (p); - orc_program_free (p); - } - p_inited = TRUE; - orc_once_mutex_unlock (); - } - ex->arrays[ORC_VAR_A2] = c; - ex->program = 0; - - ex->n = n; - ex->arrays[ORC_VAR_D1] = d1; - ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->arrays[ORC_VAR_S3] = (void *) s3; - ex->arrays[ORC_VAR_S4] = (void *) s4; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; - ex->params[ORC_VAR_P3] = p3; - ex->params[ORC_VAR_P4] = p4; - - func = c->exec; - func (ex); -} -#endif diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc-dist.h gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc-dist.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc-dist.h 2014-08-27 10:24:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc-dist.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ - -/* autogenerated from gstvideoscaleorc.orc */ - -#ifndef _GSTVIDEOSCALEORC_H_ -#define _GSTVIDEOSCALEORC_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - -#ifndef _ORC_INTEGER_TYPEDEFS_ -#define _ORC_INTEGER_TYPEDEFS_ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -typedef int8_t orc_int8; -typedef int16_t orc_int16; -typedef int32_t orc_int32; -typedef int64_t orc_int64; -typedef uint8_t orc_uint8; -typedef uint16_t orc_uint16; -typedef uint32_t orc_uint32; -typedef uint64_t orc_uint64; -#define ORC_UINT64_C(x) UINT64_C(x) -#elif defined(_MSC_VER) -typedef signed __int8 orc_int8; -typedef signed __int16 orc_int16; -typedef signed __int32 orc_int32; -typedef signed __int64 orc_int64; -typedef unsigned __int8 orc_uint8; -typedef unsigned __int16 orc_uint16; -typedef unsigned __int32 orc_uint32; -typedef unsigned __int64 orc_uint64; -#define ORC_UINT64_C(x) (x##Ui64) -#define inline __inline -#else -#include -typedef signed char orc_int8; -typedef short orc_int16; -typedef int orc_int32; -typedef unsigned char orc_uint8; -typedef unsigned short orc_uint16; -typedef unsigned int orc_uint32; -#if INT_MAX == LONG_MAX -typedef long long orc_int64; -typedef unsigned long long orc_uint64; -#define ORC_UINT64_C(x) (x##ULL) -#else -typedef long orc_int64; -typedef unsigned long orc_uint64; -#define ORC_UINT64_C(x) (x##UL) -#endif -#endif -typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16; -typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32; -typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64; -#endif -#ifndef ORC_RESTRICT -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define ORC_RESTRICT restrict -#elif defined(__GNUC__) && __GNUC__ >= 4 -#define ORC_RESTRICT __restrict__ -#else -#define ORC_RESTRICT -#endif -#endif - -#ifndef ORC_INTERNAL -#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define ORC_INTERNAL __hidden -#elif defined (__GNUC__) -#define ORC_INTERNAL __attribute__((visibility("hidden"))) -#else -#define ORC_INTERNAL -#endif -#endif - -void video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n); -void video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, int p1, int p2, int n); -void video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n); -void video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n); -void video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n); -void video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); -void video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); -void video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n); -void video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n); - -#ifdef __cplusplus -} -#endif - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc.orc gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc.orc --- gst-plugins-base1.0-1.4.3/gst/videoscale/gstvideoscaleorc.orc 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/gstvideoscaleorc.orc 1970-01-01 00:00:00.000000000 +0000 @@ -1,197 +0,0 @@ - -.function video_scale_orc_merge_linear_u8 -.dest 1 d1 -.source 1 s1 -.source 1 s2 -.param 1 p1 -.temp 2 t1 -.temp 2 t2 -.temp 1 a -.temp 1 t - -loadb a, s1 -convubw t1, s1 -convubw t2, s2 -subw t2, t2, t1 -mullw t2, t2, p1 -addw t2, t2, 128 -convhwb t, t2 -addb d1, t, a - - - -.function video_scale_orc_merge_linear_u16 -.dest 2 d1 -.source 2 s1 -.source 2 s2 -.param 2 p1 -.param 2 p2 -.temp 4 t1 -.temp 4 t2 - -# This is slightly different thatn the u8 case, since muluwl -# tends to be much faster than mulll -muluwl t1, s1, p1 -muluwl t2, s2, p2 -addl t1, t1, t2 -shrul t1, t1, 16 -convlw d1, t1 - - -.function video_scale_orc_splat_u16 -.dest 2 d1 -.param 2 p1 - -copyw d1, p1 - - -.function video_scale_orc_splat_u32 -.dest 4 d1 -.param 4 p1 - -copyl d1, p1 - - -.function video_scale_orc_splat_u64 -.dest 8 d1 -.longparam 8 p1 - -copyq d1, p1 - - -.function video_scale_orc_downsample_u8 -.dest 1 d1 guint8 -.source 2 s1 guint8 -.temp 1 t1 -.temp 1 t2 - -splitwb t1, t2, s1 -avgub d1, t1, t2 - - -.function video_scale_orc_downsample_u16 -.dest 2 d1 guint16 -.source 4 s1 guint16 -.temp 2 t1 -.temp 2 t2 - -splitlw t1, t2, s1 -avguw d1, t1, t2 - - -.function video_scale_orc_downsample_u32 -.dest 4 d1 guint8 -.source 8 s1 guint8 -.temp 4 t1 -.temp 4 t2 - -splitql t1, t2, s1 -x4 avgub d1, t1, t2 - - -.function video_scale_orc_downsample_yuyv -.dest 4 d1 guint8 -.source 8 s1 guint8 -.temp 4 yyyy -.temp 4 uvuv -.temp 2 t1 -.temp 2 t2 -.temp 2 yy -.temp 2 uv - -x4 splitwb yyyy, uvuv, s1 -x2 splitwb t1, t2, yyyy -x2 avgub yy, t1, t2 -splitlw t1, t2, uvuv -x2 avgub uv, t1, t2 -x2 mergebw d1, yy, uv - - - -.function video_scale_orc_resample_nearest_u8 -.dest 1 d1 guint8 -.source 1 s1 guint8 -.param 4 p1 -.param 4 p2 - -ldresnearb d1, s1, p1, p2 - - -.function video_scale_orc_resample_bilinear_u8 -.dest 1 d1 guint8 -.source 1 s1 guint8 -.param 4 p1 -.param 4 p2 - -ldreslinb d1, s1, p1, p2 - - -.function video_scale_orc_resample_nearest_u32 -.dest 4 d1 guint8 -.source 4 s1 guint8 -.param 4 p1 -.param 4 p2 - -ldresnearl d1, s1, p1, p2 - - -.function video_scale_orc_resample_bilinear_u32 -.dest 4 d1 guint8 -.source 4 s1 guint8 -.param 4 p1 -.param 4 p2 - -ldreslinl d1, s1, p1, p2 - - -.function video_scale_orc_resample_merge_bilinear_u32 -.dest 4 d1 guint8 -.dest 4 d2 guint8 -.source 4 s1 guint8 -.source 4 s2 guint8 -.temp 4 a -.temp 4 b -.temp 4 t -.temp 8 t1 -.temp 8 t2 -.param 4 p1 -.param 4 p2 -.param 4 p3 - -ldreslinl b, s2, p2, p3 -storel d2, b -loadl a, s1 -x4 convubw t1, a -x4 convubw t2, b -x4 subw t2, t2, t1 -x4 mullw t2, t2, p1 -x4 convhwb t, t2 -x4 addb d1, t, a - - - -.function video_scale_orc_merge_bicubic_u8 -.dest 1 d1 guint8 -.source 1 s1 guint8 -.source 1 s2 guint8 -.source 1 s3 guint8 -.source 1 s4 guint8 -.param 4 p1 -.param 4 p2 -.param 4 p3 -.param 4 p4 -.temp 2 t1 -.temp 2 t2 - -mulubw t1, s2, p2 -mulubw t2, s3, p3 -addw t1, t1, t2 -mulubw t2, s1, p1 -subw t1, t1, t2 -mulubw t2, s4, p4 -subw t1, t1, t2 -addw t1, t1, 32 -shrsw t1, t1, 6 -convsuswb d1, t1 - - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/Makefile.am gst-plugins-base1.0-1.6.1/gst/videoscale/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/videoscale/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -1,43 +1,13 @@ plugin_LTLIBRARIES = libgstvideoscale.la -ORC_SOURCE=gstvideoscaleorc -include $(top_srcdir)/common/orc.mak +libgstvideoscale_la_SOURCES = gstvideoscale.c -libgstvideoscale_la_SOURCES = \ - gstvideoscale.c \ - vs_image.c \ - vs_scanline.c \ - vs_4tap.c \ - vs_fill_borders.c \ - vs_lanczos.c - -nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES) - -libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS) +libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideoscale_la_LIBADD = \ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ - $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM) + $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) libgstvideoscale_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = \ - gstvideoscale.h \ - vs_image.h \ - vs_scanline.h \ - vs_4tap.h \ - vs_fill_borders.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideoscale -:SHARED libgstvideoscale \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideoscale_la_SOURCES) \ - $(nodist_libgstvideoscale_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \ - -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \ - $(libgstvideoscale_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ + gstvideoscale.h diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/Makefile.in gst-plugins-base1.0-1.6.1/gst/videoscale/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/videoscale/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,31 +14,19 @@ @SET_MAKE@ -# -# This is a makefile.am fragment to build Orc code. -# -# Define ORC_SOURCE and then include this file, such as: -# -# ORC_SOURCE=gstadderorc -# include $(top_srcdir)/common/orc.mak -# -# This fragment will create tmp-orc.c and gstadderorc.h from -# gstadderorc.orc. -# -# When 'make dist' is run at the top level, or 'make orc-update' -# in a directory including this fragment, the generated source -# files will be copied to $(ORC_SOURCE)-dist.[ch]. These files -# should be checked in to git, since they are used if Orc is -# disabled. -# -# Note that this file defines BUILT_SOURCES, so any later usage -# of BUILT_SOURCES in the Makefile.am that includes this file -# must use '+='. -# - VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,9 +90,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) \ - README subdir = gst/videoscale ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -126,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -143,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -179,17 +165,9 @@ am__DEPENDENCIES_1 = libgstvideoscale_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_libgstvideoscale_la_OBJECTS = libgstvideoscale_la-gstvideoscale.lo \ - libgstvideoscale_la-vs_image.lo \ - libgstvideoscale_la-vs_scanline.lo \ - libgstvideoscale_la-vs_4tap.lo \ - libgstvideoscale_la-vs_fill_borders.lo \ - libgstvideoscale_la-vs_lanczos.lo -am__objects_1 = libgstvideoscale_la-tmp-orc.lo -nodist_libgstvideoscale_la_OBJECTS = $(am__objects_1) -libgstvideoscale_la_OBJECTS = $(am_libgstvideoscale_la_OBJECTS) \ - $(nodist_libgstvideoscale_la_OBJECTS) + $(am__DEPENDENCIES_1) +am_libgstvideoscale_la_OBJECTS = libgstvideoscale_la-gstvideoscale.lo +libgstvideoscale_la_OBJECTS = $(am_libgstvideoscale_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @@ -232,8 +210,7 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(libgstvideoscale_la_SOURCES) \ - $(nodist_libgstvideoscale_la_SOURCES) +SOURCES = $(libgstvideoscale_la_SOURCES) DIST_SOURCES = $(libgstvideoscale_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ @@ -260,6 +237,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -320,6 +298,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -349,6 +329,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -376,7 +358,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -391,6 +372,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -480,13 +462,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -539,6 +520,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -552,45 +534,22 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstvideoscale.la -ORC_SOURCE = gstvideoscaleorc -EXTRA_DIST = $(ORC_SOURCE).orc -ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h -BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h -orcc_v_gen = $(orcc_v_gen_$(V)) -orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY)) -orcc_v_gen_0 = @echo " ORCC $@"; -cp_v_gen = $(cp_v_gen_$(V)) -cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY)) -cp_v_gen_0 = @echo " CP $@"; -libgstvideoscale_la_SOURCES = \ - gstvideoscale.c \ - vs_image.c \ - vs_scanline.c \ - vs_4tap.c \ - vs_fill_borders.c \ - vs_lanczos.c - -nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES) -libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS) +libgstvideoscale_la_SOURCES = gstvideoscale.c +libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideoscale_la_LIBADD = \ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ - $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM) + $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) libgstvideoscale_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = \ - gstvideoscale.h \ - vs_image.h \ - vs_scanline.h \ - vs_4tap.h \ - vs_fill_borders.h + gstvideoscale.h -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am +all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -602,7 +561,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoscale/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/videoscale/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -611,7 +569,6 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -667,12 +624,6 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-gstvideoscale.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_image.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -705,48 +656,6 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-gstvideoscale.lo `test -f 'gstvideoscale.c' || echo '$(srcdir)/'`gstvideoscale.c -libgstvideoscale_la-vs_image.lo: vs_image.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_image.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo $(DEPDIR)/libgstvideoscale_la-vs_image.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vs_image.c' object='libgstvideoscale_la-vs_image.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c - -libgstvideoscale_la-vs_scanline.lo: vs_scanline.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_scanline.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo $(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vs_scanline.c' object='libgstvideoscale_la-vs_scanline.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c - -libgstvideoscale_la-vs_4tap.lo: vs_4tap.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_4tap.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo $(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vs_4tap.c' object='libgstvideoscale_la-vs_4tap.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c - -libgstvideoscale_la-vs_fill_borders.lo: vs_fill_borders.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_fill_borders.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vs_fill_borders.c' object='libgstvideoscale_la-vs_fill_borders.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c - -libgstvideoscale_la-vs_lanczos.lo: vs_lanczos.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_lanczos.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vs_lanczos.c' object='libgstvideoscale_la-vs_lanczos.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c - -libgstvideoscale_la-tmp-orc.lo: tmp-orc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmp-orc.c' object='libgstvideoscale_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c - mostlyclean-libtool: -rm -f *.lo @@ -835,19 +744,14 @@ || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am +check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(plugindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am +install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -877,11 +781,10 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-local \ - clean-pluginLTLIBRARIES mostlyclean-am +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -949,75 +852,25 @@ uninstall-am: uninstall-pluginLTLIBRARIES -.MAKE: all check install install-am install-strip +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-local clean-pluginLTLIBRARIES \ - cscopelist-am ctags ctags-am dist-hook distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-pluginLTLIBRARIES \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-am uninstall uninstall-am \ + clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pluginLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile -orc-update: tmp-orc.c $(ORC_SOURCE).h - $(top_srcdir)/common/gst-indent tmp-orc.c - cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c - cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h - -@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_TRUE@ $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc - -@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_TRUE@ $(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc -@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c -@HAVE_ORCC_FALSE@ $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c - -@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c -@HAVE_ORCC_FALSE@ $(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h - -clean-local: clean-orc -.PHONY: clean-orc -clean-orc: - rm -f tmp-orc.c $(ORC_SOURCE).h - -dist-hook: dist-hook-orc -.PHONY: dist-hook-orc - -# we try and copy updated orc -dist files below, but don't fail if it -# doesn't work as the srcdir might not be writable -dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h - $(top_srcdir)/common/gst-indent tmp-orc.c - rm -f tmp-orc.c~ - cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \ - cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true - cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \ - cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true - cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c - cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideoscale -:SHARED libgstvideoscale \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideoscale_la_SOURCES) \ - $(nodist_libgstvideoscale_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \ - -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \ - $(libgstvideoscale_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_4tap.c gst-plugins-base1.0-1.6.1/gst/videoscale/vs_4tap.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_4tap.c 2014-09-24 07:11:45.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_4tap.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1502 +0,0 @@ -/* - * Image Scaling Functions (4 tap) - * Copyright (c) 2005 David A. Schleef - * Copyright (c) 2009 Sebastian Dröge - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "vs_image.h" -#include "vs_scanline.h" - -#include "vs_4tap.h" - -#include - -#define SHIFT 10 - -static int16_t vs_4tap_taps[256][4]; - - -static void vs_scanline_resample_4tap_Y (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_Y (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_RGBA (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_RGBA (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_RGB (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_RGB (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_YUYV (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_YUYV (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_UYVY (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_UYVY (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_RGB565 (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_RGB565 (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_RGB555 (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_RGB555 (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_Y16 (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_Y16 (uint8_t * dest, uint8_t * src1, - uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc); - -static void vs_scanline_resample_4tap_AYUV64 (uint16_t * dest, uint16_t * src, - int n, int src_width, int *xacc, int increment); -static void vs_scanline_merge_4tap_AYUV64 (uint16_t * dest, uint16_t * src1, - uint16_t * src2, uint16_t * src3, uint16_t * src4, int n, int acc); - -static double -vs_4tap_func (double x) -{ -#if 0 - if (x < -1) - return 0; - if (x > 1) - return 0; - if (x < 0) - return 1 + x; - return 1 - x; -#endif -#if 0 - if (x == 0) - return 1; - return sin (G_PI * x) / (G_PI * x) * (1 - 0.25 * x * x); -#endif -#if 1 - if (x == 0) - return 1; - return sin (G_PI * x) / (G_PI * x); -#endif -} - -void -vs_4tap_init (void) -{ - int i; - double a, b, c, d; - double sum; - - for (i = 0; i < 256; i++) { - a = vs_4tap_func (-1 - i / 256.0); - b = vs_4tap_func (0 - i / 256.0); - c = vs_4tap_func (1 - i / 256.0); - d = vs_4tap_func (2 - i / 256.0); - sum = a + b + c + d; - - vs_4tap_taps[i][0] = rint ((1 << SHIFT) * (a / sum)); - vs_4tap_taps[i][1] = rint ((1 << SHIFT) * (b / sum)); - vs_4tap_taps[i][2] = rint ((1 << SHIFT) * (c / sum)); - vs_4tap_taps[i][3] = rint ((1 << SHIFT) * (d / sum)); - } -} - - -void -vs_scanline_resample_4tap_Y (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xff00) >> 8; - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[j - 1]; - y += vs_4tap_taps[x][1] * src[j]; - y += vs_4tap_taps[x][2] * src[j + 1]; - y += vs_4tap_taps[x][3] * src[j + 2]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j - 1, 0, src_width - 1)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j, 0, src_width - 1)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j + 1, 0, src_width - 1)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j + 2, 0, src_width - 1)]; - } - y += (1 << (SHIFT - 1)); - dest[i] = CLAMP (y >> SHIFT, 0, 255); - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int a, b, c, d; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < n; i++) { - y = a * src1[i]; - y += b * src2[i]; - y += c * src3[i]; - y += d * src4[i]; - y += (1 << (SHIFT - 1)); - dest[i] = CLAMP (y >> SHIFT, 0, 255); - } -} - - -void -vs_image_scale_4tap_Y (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_Y (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_Y (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_Y (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_Y16 (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xff00) >> 8; - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * s[j - 1]; - y += vs_4tap_taps[x][1] * s[j]; - y += vs_4tap_taps[x][2] * s[j + 1]; - y += vs_4tap_taps[x][3] * s[j + 2]; - } else { - y = vs_4tap_taps[x][0] * s[CLAMP (j - 1, 0, src_width - 1)]; - y += vs_4tap_taps[x][1] * s[CLAMP (j, 0, src_width - 1)]; - y += vs_4tap_taps[x][2] * s[CLAMP (j + 1, 0, src_width - 1)]; - y += vs_4tap_taps[x][3] * s[CLAMP (j + 2, 0, src_width - 1)]; - } - y += (1 << (SHIFT - 1)); - d[i] = CLAMP (y >> SHIFT, 0, 65535); - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int a, b, c, d; - uint16_t *de = (uint16_t *) dest, *s1 = (uint16_t *) src1; - uint16_t *s2 = (uint16_t *) src2, *s3 = (uint16_t *) src3; - uint16_t *s4 = (uint16_t *) src4; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < n; i++) { - y = a * s1[i]; - y += b * s2[i]; - y += c * s3[i]; - y += d * s4[i]; - y += (1 << (SHIFT - 1)); - de[i] = CLAMP (y >> SHIFT, 0, 65535); - } -} - - -void -vs_image_scale_4tap_Y16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_Y16 (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_Y16 (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_Y16 (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_RGBA (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - int off; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - for (off = 0; off < 4; off++) { - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[(j - 1) * 4 + off]; - y += vs_4tap_taps[x][1] * src[j * 4 + off]; - y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off]; - y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off]; - } else { - y = vs_4tap_taps[x][0] * - src[CLAMP ((j - 1), 0, src_width - 1) * 4 + off]; - y += vs_4tap_taps[x][1] * - src[CLAMP ((j + 0), 0, src_width - 1) * 4 + off]; - y += vs_4tap_taps[x][2] * - src[CLAMP ((j + 1), 0, src_width - 1) * 4 + off]; - y += vs_4tap_taps[x][3] * - src[CLAMP ((j + 2), 0, src_width - 1) * 4 + off]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255); - } - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int off; - int a, b, c, d; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < n; i++) { - for (off = 0; off < 4; off++) { - y = a * src1[i * 4 + off]; - y += b * src2[i * 4 + off]; - y += c * src3[i * 4 + off]; - y += d * src4[i * 4 + off]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255); - } - } -} - -void -vs_image_scale_4tap_RGBA (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_RGBA (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_RGBA (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_RGBA (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_RGB (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - int off; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - for (off = 0; off < 3; off++) { - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[(j - 1) * 3 + off]; - y += vs_4tap_taps[x][1] * src[j * 3 + off]; - y += vs_4tap_taps[x][2] * src[(j + 1) * 3 + off]; - y += vs_4tap_taps[x][3] * src[(j + 2) * 3 + off]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 3 + off, 0, - 3 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 3 + off, 0, - 3 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 3 + off, 0, - 3 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 3 + off, 0, - 3 * (src_width - 1) + off)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255); - } - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int off; - int a, b, c, d; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < n; i++) { - for (off = 0; off < 3; off++) { - y = a * src1[i * 3 + off]; - y += b * src2[i * 3 + off]; - y += c * src3[i * 3 + off]; - y += d * src4[i * 3 + off]; - y += (1 << (SHIFT - 1)); - dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255); - } - } -} - -void -vs_image_scale_4tap_RGB (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_RGB (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_RGB (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_RGB (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_YUYV (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - int quads = (n + 1) / 2; - int last_y = 2 * (src_width - 1); - int last_u = - MAX ((2 * (src_width - 1) % 4 == - 0) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1); - int last_v = - MAX ((2 * (src_width - 1) % 4 == - 2) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1); - - acc = *xacc; - for (i = 0; i < quads; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[j * 2 + 0 - 2]; - y += vs_4tap_taps[x][1] * src[j * 2 + 0]; - y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2]; - y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255); - - j = acc >> 17; - x = (acc & 0x1ffff) >> 9; - - if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 1 - 4, 1)]; - y += vs_4tap_taps[x][1] * src[j * 4 + 1]; - y += vs_4tap_taps[x][2] * src[j * 4 + 1 + 4]; - y += vs_4tap_taps[x][3] * src[j * 4 + 1 + 8]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 1 - 4, 1, last_u)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 1, 1, last_u)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 1 + 4, 1, last_u)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 1 + 8, 1, last_u)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255); - - if (2 * i + 1 < n) { - if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 3 - 4, 3)]; - y += vs_4tap_taps[x][1] * src[j * 4 + 3]; - y += vs_4tap_taps[x][2] * src[j * 4 + 3 + 4]; - y += vs_4tap_taps[x][3] * src[j * 4 + 3 + 8]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 3 - 4, 3, last_v)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 3, 3, last_v)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 3 + 4, 3, last_v)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 3 + 8, 3, last_v)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255); - } - - acc += increment; - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (2 * i + 1 < n) { - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[j * 2 + 0 - 2]; - y += vs_4tap_taps[x][1] * src[j * 2 + 0]; - y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2]; - y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255); - acc += increment; - } - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int a, b, c, d; - int quads = (n + 1) / 2; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < quads; i++) { - y = a * src1[i * 4 + 0]; - y += b * src2[i * 4 + 0]; - y += c * src3[i * 4 + 0]; - y += d * src4[i * 4 + 0]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255); - - y = a * src1[i * 4 + 1]; - y += b * src2[i * 4 + 1]; - y += c * src3[i * 4 + 1]; - y += d * src4[i * 4 + 1]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255); - - if (2 * i + 1 < n) { - y = a * src1[i * 4 + 2]; - y += b * src2[i * 4 + 2]; - y += c * src3[i * 4 + 2]; - y += d * src4[i * 4 + 2]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255); - - y = a * src1[i * 4 + 3]; - y += b * src2[i * 4 + 3]; - y += c * src3[i * 4 + 3]; - y += d * src4[i * 4 + 3]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255); - } - } -} - -void -vs_image_scale_4tap_YUYV (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_YUYV (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_YUYV (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_YUYV (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_UYVY (uint8_t * dest, uint8_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - int quads = (n + 1) / 2; - int last_y = 2 * (src_width - 1) + 1; - int last_u = - MAX ((2 * (src_width - 1) % 4 == - 0) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0); - int last_v = - MAX ((2 * (src_width - 1) % 4 == - 2) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0); - - acc = *xacc; - for (i = 0; i < quads; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 1)]; - y += vs_4tap_taps[x][1] * src[j * 2 + 1]; - y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2]; - y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255); - - j = acc >> 17; - x = (acc & 0x1ffff) >> 9; - - if (2 * j - 2 >= 0 && 2 * j + 4 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 0 - 4, 0)]; - y += vs_4tap_taps[x][1] * src[j * 4 + 0]; - y += vs_4tap_taps[x][2] * src[j * 4 + 0 + 4]; - y += vs_4tap_taps[x][3] * src[j * 4 + 0 + 8]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 0 - 4, 0, last_u)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 0, 0, last_u)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 0 + 4, 0, last_u)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 0 + 8, 0, last_u)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255); - - if (2 * i + 1 < n) { - if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 2 - 4, 2)]; - y += vs_4tap_taps[x][1] * src[j * 4 + 2]; - y += vs_4tap_taps[x][2] * src[j * 4 + 2 + 4]; - y += vs_4tap_taps[x][3] * src[j * 4 + 2 + 8]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 2 - 4, 2, last_v)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 2, 2, last_v)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 2 + 4, 2, last_v)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 2 + 8, 2, last_v)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255); - } - - acc += increment; - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (2 * i + 1 < n) { - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 0)]; - y += vs_4tap_taps[x][1] * src[j * 2 + 1]; - y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2]; - y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)]; - y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)]; - y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255); - acc += increment; - } - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_UYVY (uint8_t * dest, uint8_t * src1, uint8_t * src2, - uint8_t * src3, uint8_t * src4, int n, int acc) -{ - int i; - int y; - int a, b, c, d; - int quads = (n + 1) / 2; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < quads; i++) { - y = a * src1[i * 4 + 0]; - y += b * src2[i * 4 + 0]; - y += c * src3[i * 4 + 0]; - y += d * src4[i * 4 + 0]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255); - - y = a * src1[i * 4 + 1]; - y += b * src2[i * 4 + 1]; - y += c * src3[i * 4 + 1]; - y += d * src4[i * 4 + 1]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255); - - if (2 * i + 1 < n) { - y = a * src1[i * 4 + 2]; - y += b * src2[i * 4 + 2]; - y += c * src3[i * 4 + 2]; - y += d * src4[i * 4 + 2]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255); - - y = a * src1[i * 4 + 3]; - y += b * src2[i * 4 + 3]; - y += c * src3[i * 4 + 3]; - y += d * src4[i * 4 + 3]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255); - } - } -} - -void -vs_image_scale_4tap_UYVY (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_UYVY (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_UYVY (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_UYVY (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -/* note that src and dest are uint16_t, and thus endian dependent */ - -#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13) -#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9) -#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2) - -#define RGB565(r,g,b) \ - ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f)) - -void -vs_scanline_resample_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y, y_r, y_b, y_g; - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB565_R (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB565_R (src[j]); - y += vs_4tap_taps[x][2] * RGB565_R (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB565_R (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB565_R (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB565_R (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB565_R (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB565_R (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_r = CLAMP (y >> SHIFT, 0, 255); - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB565_G (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB565_G (src[j]); - y += vs_4tap_taps[x][2] * RGB565_G (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB565_G (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB565_G (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB565_G (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB565_G (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB565_G (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_g = CLAMP (y >> SHIFT, 0, 255); - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB565_B (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB565_B (src[j]); - y += vs_4tap_taps[x][2] * RGB565_B (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB565_B (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB565_B (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB565_B (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB565_B (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB565_B (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_b = CLAMP (y >> SHIFT, 0, 255); - - dest[i] = RGB565 (y_r, y_g, y_b); - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8, - uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc) -{ - int i; - int y, y_r, y_b, y_g; - int a, b, c, d; - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src1 = (uint16_t *) src1_u8; - uint16_t *src2 = (uint16_t *) src2_u8; - uint16_t *src3 = (uint16_t *) src3_u8; - uint16_t *src4 = (uint16_t *) src4_u8; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - - for (i = 0; i < n; i++) { - y = a * RGB565_R (src1[i]); - y += b * RGB565_R (src2[i]); - y += c * RGB565_R (src3[i]); - y += d * RGB565_R (src4[i]); - y += (1 << (SHIFT - 1)); - y_r = CLAMP (y >> SHIFT, 0, 255); - - y = a * RGB565_G (src1[i]); - y += b * RGB565_G (src2[i]); - y += c * RGB565_G (src3[i]); - y += d * RGB565_G (src4[i]); - y += (1 << (SHIFT - 1)); - y_g = CLAMP (y >> SHIFT, 0, 255); - - y = a * RGB565_B (src1[i]); - y += b * RGB565_B (src2[i]); - y += c * RGB565_B (src3[i]); - y += d * RGB565_B (src4[i]); - y += (1 << (SHIFT - 1)); - y_b = CLAMP (y >> SHIFT, 0, 255); - - dest[i] = RGB565 (y_r, y_g, y_b); - } -} - -void -vs_image_scale_4tap_RGB565 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_RGB565 (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_RGB565 (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_RGB565 (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -/* note that src and dest are uint16_t, and thus endian dependent */ - -#define RGB555_R(x) (((x)&0x7c00)>>7 | ((x)&0x7c00)>>12) -#define RGB555_G(x) (((x)&0x03e0)>>2 | ((x)&0x03e0)>>7) -#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2) - -#define RGB555(r,g,b) \ - ((((r)<<7)&0x7c00) | (((g)<<2)&0x03e0) | (((b)>>3)&0x001f)) - -void -vs_scanline_resample_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y, y_r, y_b, y_g; - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB555_R (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB555_R (src[j]); - y += vs_4tap_taps[x][2] * RGB555_R (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB555_R (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB555_R (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB555_R (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB555_R (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB555_R (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_r = CLAMP (y >> SHIFT, 0, 255); - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB555_G (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB555_G (src[j]); - y += vs_4tap_taps[x][2] * RGB555_G (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB555_G (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB555_G (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB555_G (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB555_G (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB555_G (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_g = CLAMP (y >> SHIFT, 0, 255); - - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * RGB555_B (src[(j - 1)]); - y += vs_4tap_taps[x][1] * RGB555_B (src[j]); - y += vs_4tap_taps[x][2] * RGB555_B (src[(j + 1)]); - y += vs_4tap_taps[x][3] * RGB555_B (src[(j + 2)]); - } else { - y = vs_4tap_taps[x][0] * RGB555_B (src[CLAMP ((j - 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][1] * RGB555_B (src[CLAMP (j, 0, src_width - 1)]); - y += vs_4tap_taps[x][2] * RGB555_B (src[CLAMP ((j + 1), 0, - src_width - 1)]); - y += vs_4tap_taps[x][3] * RGB555_B (src[CLAMP ((j + 2), 0, - src_width - 1)]); - } - y += (1 << (SHIFT - 1)); - y_b = CLAMP (y >> SHIFT, 0, 255); - - dest[i] = RGB555 (y_r, y_g, y_b); - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8, - uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc) -{ - int i; - int y, y_r, y_b, y_g; - int a, b, c, d; - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src1 = (uint16_t *) src1_u8; - uint16_t *src2 = (uint16_t *) src2_u8; - uint16_t *src3 = (uint16_t *) src3_u8; - uint16_t *src4 = (uint16_t *) src4_u8; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - - for (i = 0; i < n; i++) { - y = a * RGB555_R (src1[i]); - y += b * RGB555_R (src2[i]); - y += c * RGB555_R (src3[i]); - y += d * RGB555_R (src4[i]); - y += (1 << (SHIFT - 1)); - y_r = CLAMP (y >> SHIFT, 0, 255); - - y = a * RGB555_G (src1[i]); - y += b * RGB555_G (src2[i]); - y += c * RGB555_G (src3[i]); - y += d * RGB555_G (src4[i]); - y += (1 << (SHIFT - 1)); - y_g = CLAMP (y >> SHIFT, 0, 255); - - y = a * RGB555_B (src1[i]); - y += b * RGB555_B (src2[i]); - y += c * RGB555_B (src3[i]); - y += d * RGB555_B (src4[i]); - y += (1 << (SHIFT - 1)); - y_b = CLAMP (y >> SHIFT, 0, 255); - - dest[i] = RGB555 (y_r, y_g, y_b); - } -} - -void -vs_image_scale_4tap_RGB555 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_RGB555 (tmpbuf + i * dest->stride, - src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width, - src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint8_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_RGB555 (tmpbuf + ((k + 3) & 3) * dest->stride, - src->pixels + (k + 3) * src->stride, - dest->width, src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride; - vs_scanline_merge_4tap_RGB555 (dest->pixels + i * dest->stride, - t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} - -void -vs_scanline_resample_4tap_AYUV64 (uint16_t * dest, uint16_t * src, - int n, int src_width, int *xacc, int increment) -{ - int i; - int j; - int acc; - int x; - int y; - int off; - - acc = *xacc; - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 8; - - for (off = 0; off < 4; off++) { - if (j - 1 >= 0 && j + 2 < src_width) { - y = vs_4tap_taps[x][0] * src[(j - 1) * 4 + off]; - y += vs_4tap_taps[x][1] * src[j * 4 + off]; - y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off]; - y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off]; - } else { - y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 4 + off, 0, - 4 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + off, 0, - 4 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 4 + off, 0, - 4 * (src_width - 1) + off)]; - y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 4 + off, 0, - 4 * (src_width - 1) + off)]; - } - y += (1 << (SHIFT - 1)); - dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255); - } - acc += increment; - } - *xacc = acc; -} - -void -vs_scanline_merge_4tap_AYUV64 (uint16_t * dest, uint16_t * src1, - uint16_t * src2, uint16_t * src3, uint16_t * src4, int n, int acc) -{ - int i; - int y; - int off; - int a, b, c, d; - - acc = (acc >> 8) & 0xff; - a = vs_4tap_taps[acc][0]; - b = vs_4tap_taps[acc][1]; - c = vs_4tap_taps[acc][2]; - d = vs_4tap_taps[acc][3]; - for (i = 0; i < n; i++) { - for (off = 0; off < 4; off++) { - y = a * src1[i * 4 + off]; - y += b * src2[i * 4 + off]; - y += c * src3[i * 4 + off]; - y += d * src4[i * 4 + off]; - y += (1 << (SHIFT - 1)); - dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 65535); - } - } -} - -void -vs_image_scale_4tap_AYUV64 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf8) -{ - int yacc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - int k; - guint16 *tmpbuf = (guint16 *) tmpbuf8; - /* destination stride in pixels for easier use with tmpbuf variable */ - int dest_pixstride = dest->stride / sizeof (guint16); - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - k = 0; - for (i = 0; i < 4; i++) { - xacc = 0; - vs_scanline_resample_4tap_AYUV64 (tmpbuf + i * dest_pixstride, - (guint16 *) (src->pixels + CLAMP (i, 0, src->height - 1) * src->stride), - dest->width, src->width, &xacc, x_increment); - } - - yacc = 0; - for (i = 0; i < dest->height; i++) { - uint16_t *t0, *t1, *t2, *t3; - - j = yacc >> 16; - - while (j > k) { - k++; - if (k + 3 < src->height) { - xacc = 0; - vs_scanline_resample_4tap_AYUV64 (tmpbuf + ((k + - 3) & 3) * dest_pixstride, - (guint16 *) (src->pixels + (k + 3) * src->stride), dest->width, - src->width, &xacc, x_increment); - } - } - - t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest_pixstride; - t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest_pixstride; - t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest_pixstride; - t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest_pixstride; - vs_scanline_merge_4tap_AYUV64 ((guint16 *) (dest->pixels + - i * dest->stride), t0, t1, t2, t3, dest->width, yacc & 0xffff); - - yacc += y_increment; - } -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_4tap.h gst-plugins-base1.0-1.6.1/gst/videoscale/vs_4tap.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_4tap.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_4tap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* - * Image Scaling Functions (4 tap) - * Copyright (c) 2005 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _VS_4TAP_H_ -#define _VS_4TAP_H_ - -#include "vs_image.h" - -G_GNUC_INTERNAL void vs_4tap_init (void); - -G_GNUC_INTERNAL void vs_image_scale_4tap_Y (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_RGBA (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_RGB (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_YUYV (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_UYVY (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_RGB565 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_RGB555 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_Y16 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_4tap_AYUV64 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_fill_borders.c gst-plugins-base1.0-1.6.1/gst/videoscale/vs_fill_borders.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_fill_borders.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_fill_borders.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,421 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2010 Sebastian Dröge - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "vs_fill_borders.h" -#include "gstvideoscaleorc.h" - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define READ_UINT32(ptr) GST_READ_UINT32_LE(ptr) -#define READ_UINT16(ptr) GST_READ_UINT16_LE(ptr) -#else -#define READ_UINT32(ptr) GST_READ_UINT32_BE(ptr) -#define READ_UINT16(ptr) GST_READ_UINT16_BE(ptr) -#endif - -void -vs_fill_borders_RGBA (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - uint32_t v = READ_UINT32 (val); - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - video_scale_orc_splat_u32 ((uint32_t *) data, v, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 4; - for (i = 0; i < tmp; i++) { - video_scale_orc_splat_u32 ((uint32_t *) data, v, left); - video_scale_orc_splat_u32 ((uint32_t *) (data + tmp2), v, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - video_scale_orc_splat_u32 ((uint32_t *) data, v, real_width); - data += stride; - } -} - -static void -_memset_u24 (uint8_t * data, uint8_t val1, uint8_t val2, uint8_t val3, - unsigned int n) -{ - unsigned int i; - - for (i = 0; i < n; i++) { - data[0] = val1; - data[1] = val2; - data[2] = val3; - data += 3; - } -} - -void -vs_fill_borders_RGB (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - _memset_u24 (data, val[0], val[1], val[2], real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 3; - for (i = 0; i < tmp; i++) { - _memset_u24 (data, val[0], val[1], val[2], left); - _memset_u24 (data + tmp2, val[0], val[1], val[2], right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - _memset_u24 (data, val[0], val[1], val[2], real_width); - data += stride; - } -} - -void -vs_fill_borders_YUYV (const VSImage * dest, const uint8_t * val) -{ - int i, j; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - for (j = 0; j < real_width; j++) { - data[2 * j] = val[0]; - data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3]; - } - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 2; - for (i = 0; i < tmp; i++) { - for (j = 0; j < left; j++) { - data[2 * j] = val[0]; - data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3]; - } - for (j = 0; j < right; j++) { - data[tmp2 + 2 * j] = val[0]; - data[tmp2 + 2 * j + 1] = (j % 2 == 0) ? val[1] : val[3]; - } - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - for (j = 0; j < real_width; j++) { - data[2 * j] = val[0]; - data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3]; - } - data += stride; - } -} - -void -vs_fill_borders_UYVY (const VSImage * dest, const uint8_t * val) -{ - int i, j; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - for (j = 0; j < real_width; j++) { - data[2 * j] = (j % 2 == 0) ? val[0] : val[2]; - data[2 * j + 1] = val[1]; - } - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 2; - for (i = 0; i < tmp; i++) { - for (j = 0; j < left; j++) { - data[2 * j] = (j % 2 == 0) ? val[0] : val[2]; - data[2 * j + 1] = val[1]; - } - for (j = 0; j < right; j++) { - data[tmp2 + 2 * j] = (j % 2 == 0) ? val[0] : val[2]; - data[tmp2 + 2 * j + 1] = val[1]; - } - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - for (j = 0; j < real_width; j++) { - data[2 * j] = (j % 2 == 0) ? val[0] : val[2]; - data[2 * j + 1] = val[1]; - } - data += stride; - } -} - -void -vs_fill_borders_Y (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - memset (data, *val, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = left + width; - for (i = 0; i < tmp; i++) { - memset (data, *val, left); - memset (data + tmp2, *val, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - memset (data, *val, real_width); - data += stride; - } -} - -void -vs_fill_borders_Y16 (const VSImage * dest, const uint16_t val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, val, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 2; - for (i = 0; i < tmp; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, val, left); - video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), val, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, val, real_width); - data += stride; - } -} - -void -vs_fill_borders_RGB565 (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - uint16_t v = READ_UINT16 (val); - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 2; - for (i = 0; i < tmp; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, left); - video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), v, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width); - data += stride; - } -} - -void -vs_fill_borders_RGB555 (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - uint16_t v = READ_UINT16 (val); - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 2; - for (i = 0; i < tmp; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, left); - video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), v, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width); - data += stride; - } -} - -void -vs_fill_borders_AYUV64 (const VSImage * dest, const uint8_t * val) -{ - int i; - int top = dest->border_top, bottom = dest->border_bottom; - int left = dest->border_left, right = dest->border_right; - int width = dest->width; - int height = dest->height; - int real_width = dest->real_width; - gsize stride = dest->stride; - int tmp, tmp2; - uint8_t *data; - uint64_t v; - - v = (((guint32) val[0]) << 8) | (((guint32) val[1]) << 24) | - (((guint64) val[2]) << 40) | (((guint64) val[3]) << 56); - - data = dest->real_pixels; - for (i = 0; i < top; i++) { - video_scale_orc_splat_u64 ((uint64_t *) data, v, real_width); - data += stride; - } - - if (left || right) { - tmp = height; - tmp2 = (left + width) * 8; - for (i = 0; i < tmp; i++) { - video_scale_orc_splat_u64 ((uint64_t *) data, v, left); - video_scale_orc_splat_u64 ((uint64_t *) (data + tmp2), v, right); - data += stride; - } - } else { - data += stride * height; - } - - for (i = 0; i < bottom; i++) { - video_scale_orc_splat_u64 ((uint64_t *) data, v, real_width); - data += stride; - } -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_fill_borders.h gst-plugins-base1.0-1.6.1/gst/videoscale/vs_fill_borders.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_fill_borders.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_fill_borders.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2010 Sebastian Dröge - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __VS_FILL_BORDERS_H__ -#define __VS_FILL_BORDERS_H__ - -#include <_stdint.h> -#include "vs_image.h" - -G_GNUC_INTERNAL void vs_fill_borders_RGBA (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_RGB (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_YUYV (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_UYVY (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_Y (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_Y16 (const VSImage *dest, const uint16_t val); -G_GNUC_INTERNAL void vs_fill_borders_RGB565 (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_RGB555 (const VSImage *dest, const uint8_t *val); -G_GNUC_INTERNAL void vs_fill_borders_AYUV64 (const VSImage *dest, const uint8_t *val); - -#endif /* __VS_FILL_BORDERS_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_image.c gst-plugins-base1.0-1.6.1/gst/videoscale/vs_image.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_image.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_image.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1282 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2005-2012 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "vs_scanline.h" -#include "vs_image.h" - -#include "gstvideoscaleorc.h" -#include - -#define ROUND_UP_2(x) (((x)+1)&~1) -#define ROUND_UP_4(x) (((x)+3)&~3) -#define ROUND_UP_8(x) (((x)+7)&~7) - -void -vs_image_scale_nearest_RGBA (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int prev_j; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - - acc = 0; - prev_j = -1; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - if (j == prev_j) { - memcpy (dest->pixels + i * dest->stride, - dest->pixels + (i - 1) * dest->stride, dest->width * 4); - } else { - video_scale_orc_resample_nearest_u32 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, 0, x_increment, dest->width); - } - - prev_j = j; - acc += y_increment; - } -} - -void -vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int y1; - int i; - int j; - int x; - int dest_size; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width * 4; - -#define LINE(x) ((tmpbuf) + (dest_size)*((x)&1)) - - acc = 0; - video_scale_orc_resample_bilinear_u32 (LINE (0), src->pixels, - 0, x_increment, dest->width); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size); - } else { - if (j > y1) { - video_scale_orc_resample_bilinear_u32 (LINE (j), - src->pixels + j * src->stride, 0, x_increment, dest->width); - y1++; - } - if (j >= y1) { - video_scale_orc_resample_bilinear_u32 (LINE (j + 1), - src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width); - y1++; - } - video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride, - LINE (j), LINE (j + 1), (x >> 8), dest->width * 4); - } - - acc += y_increment; - } -} - - -void -vs_image_scale_nearest_RGB (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_RGB (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_RGB (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width * 3; - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_RGB (tmp1, src->pixels, src->width, dest->width, - &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_RGB (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_RGB (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_RGB (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc, - x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* YUYV */ - -void -vs_image_scale_nearest_YUYV (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_YUYV (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_YUYV (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = ROUND_UP_4 (dest->width * 2); - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_YUYV (tmp1, src->pixels, src->width, dest->width, - &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_YUYV (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_YUYV (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_YUYV (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* UYVY */ - -void -vs_image_scale_nearest_UYVY (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_UYVY (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_UYVY (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = ROUND_UP_4 (dest->width * 2); - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_UYVY (tmp1, src->pixels, src->width, dest->width, - &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_UYVY (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_UYVY (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_UYVY (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* NV12 */ - -void -vs_image_scale_nearest_NV12 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_NV12 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_NV12 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = ROUND_UP_4 (dest->width * 2); - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_NV12 (tmp1, src->pixels, src->width, dest->width, - &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_NV12 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_NV12 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_NV12 (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_NV12 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_NV12 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* greyscale */ - -void -vs_image_scale_nearest_Y (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - video_scale_orc_resample_nearest_u8 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, 0, x_increment, dest->width); - acc += y_increment; - } -} - -void -vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width; - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - y2 = -1; - video_scale_orc_resample_bilinear_u8 (tmp1, src->pixels, - 0, x_increment, dest->width); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - video_scale_orc_resample_bilinear_u8 (tmp1, - src->pixels + j * src->stride, 0, x_increment, dest->width); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - video_scale_orc_resample_bilinear_u8 (tmp2, - src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width); - y2 = j + 1; - } - if ((x >> 8) == 0) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest->width); - } else { - video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride, - tmp1, tmp2, (x >> 8), dest->width); - } - } else if (j == y2) { - if (j + 1 != y1) { - video_scale_orc_resample_bilinear_u8 (tmp1, - src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width); - y1 = j + 1; - } - if ((x >> 8) == 0) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest->width); - } else { - video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride, - tmp2, tmp1, (x >> 8), dest->width); - } - } else { - video_scale_orc_resample_bilinear_u8 (tmp1, - src->pixels + j * src->stride, 0, x_increment, dest->width); - y1 = j; - video_scale_orc_resample_bilinear_u8 (tmp2, - src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width); - y2 = (j + 1); - if ((x >> 8) == 0) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest->width); - } else { - video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride, - tmp1, tmp2, (x >> 8), dest->width); - } - } - } - - acc += y_increment; - } -} - -void -vs_image_scale_nearest_Y16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_Y16 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_Y16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = 2 * dest->width; - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_Y16 (tmp1, src->pixels, src->width, dest->width, - &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_Y16 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_Y16 (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_Y16 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc, - x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* RGB565 */ - -void -vs_image_scale_nearest_RGB565 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_RGB565 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_RGB565 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width * 2; - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_RGB565 (tmp1, src->pixels, src->width, - dest->width, &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_RGB565 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_RGB565 (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_RGB565 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc, - x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -/* RGB555 */ - -void -vs_image_scale_nearest_RGB555 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - acc = 0; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - xacc = 0; - vs_scanline_resample_nearest_RGB555 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - - acc += y_increment; - } -} - -void -vs_image_scale_linear_RGB555 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - uint8_t *tmp1; - uint8_t *tmp2; - int y1; - int y2; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width * 2; - - tmp1 = tmpbuf; - tmp2 = tmpbuf + dest_size; - - acc = 0; - xacc = 0; - y2 = -1; - vs_scanline_resample_linear_RGB555 (tmp1, src->pixels, src->width, - dest->width, &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - if (j == y1) { - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } else if (j == y2) { - memcpy (dest->pixels + i * dest->stride, tmp2, dest_size); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - memcpy (dest->pixels + i * dest->stride, tmp1, dest_size); - } - } else { - if (j == y1) { - if (j + 1 != y2) { - xacc = 0; - vs_scanline_resample_linear_RGB555 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y2 = j + 1; - } - vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } else if (j == y2) { - if (j + 1 != y1) { - xacc = 0; - vs_scanline_resample_linear_RGB555 (tmp1, - src->pixels + (j + 1) * src->stride, src->width, dest->width, - &xacc, x_increment); - y1 = j + 1; - } - vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride, - tmp2, tmp1, dest->width, x); - } else { - xacc = 0; - vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride, - src->width, dest->width, &xacc, x_increment); - y1 = j; - xacc = 0; - vs_scanline_resample_linear_RGB555 (tmp2, - src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc, - x_increment); - y2 = (j + 1); - vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride, - tmp1, tmp2, dest->width, x); - } - } - - acc += y_increment; - } -} - -void -vs_image_scale_nearest_AYUV64 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf8) -{ - int acc; - int y_increment; - int x_increment; - int i; - int j; - int prev_j; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1); - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1); - - - acc = 0; - prev_j = -1; - for (i = 0; i < dest->height; i++) { - j = (acc + 0x8000) >> 16; - - if (j == prev_j) { - memcpy (dest->pixels + i * dest->stride, - dest->pixels + (i - 1) * dest->stride, dest->width * 8); - } else { - int xacc = 0; - vs_scanline_resample_nearest_AYUV64 (dest->pixels + i * dest->stride, - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - } - - prev_j = j; - acc += y_increment; - } -} - -void -vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf) -{ - int acc; - int y_increment; - int x_increment; - int y1; - int i; - int j; - int x; - int dest_size; - int xacc; - - if (dest->height == 1) - y_increment = 0; - else - y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1; - - if (dest->width == 1) - x_increment = 0; - else - x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1; - - dest_size = dest->width * 8; - -#undef LINE -#define LINE(x) ((guint16 *)((tmpbuf) + (dest_size)*((x)&1))) - - acc = 0; - xacc = 0; - vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (0), - src->pixels, src->width, dest->width, &xacc, x_increment); - y1 = 0; - for (i = 0; i < dest->height; i++) { - j = acc >> 16; - x = acc & 0xffff; - - if (x == 0) { - memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size); - } else { - if (j > y1) { - xacc = 0; - vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j), - src->pixels + j * src->stride, src->width, dest->width, &xacc, - x_increment); - y1++; - } - if (j >= y1) { - xacc = 0; - vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j + 1), - src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc, - x_increment); - video_scale_orc_merge_linear_u16 ((guint16 *) (dest->pixels + - i * dest->stride), LINE (j), LINE (j + 1), 65536 - x, x, - dest->width * 4); - y1++; - } else { - video_scale_orc_merge_linear_u16 ((guint16 *) (dest->pixels + - i * dest->stride), LINE (j), LINE (j + 1), 65536 - x, x, - dest->width * 4); - } - } - - acc += y_increment; - } -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_image.h gst-plugins-base1.0-1.6.1/gst/videoscale/vs_image.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_image.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_image.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2005 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __VS_IMAGE_H__ -#define __VS_IMAGE_H__ - -#include -#include <_stdint.h> - -typedef struct _VSImage VSImage; - -struct _VSImage { - uint8_t *real_pixels; - int real_width; - int real_height; - int border_left, border_right; - int border_top, border_bottom; - uint8_t *pixels; - int width; - int height; - gsize stride; -}; - -G_GNUC_INTERNAL void vs_image_scale_nearest_RGBA (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); -G_GNUC_INTERNAL void vs_image_scale_linear_RGBA (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_lanczos_AYUV (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf, - double sharpness, - gboolean dither, - int submethod, - double a, - double sharpen); - -G_GNUC_INTERNAL void vs_image_scale_lanczos_AYUV64 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf, - double sharpness, - gboolean dither, - int submethod, - double a, - double sharpen); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_RGB (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_RGB (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_YUYV (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_YUYV (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_UYVY (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_UYVY (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_NV12 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_NV12 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_Y (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_Y (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_lanczos_Y (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf, - double sharpness, - gboolean dither, - int submethod, - double a, - double sharpen); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_RGB565 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_RGB565 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_RGB555 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_RGB555 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_Y16 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_Y16 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_AYUV16 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - -G_GNUC_INTERNAL void vs_image_scale_linear_AYUV16 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf); - - -G_GNUC_INTERNAL void vs_image_scale_nearest_AYUV64 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf8); - -G_GNUC_INTERNAL void vs_image_scale_linear_AYUV64 (const VSImage * dest, - const VSImage * src, - uint8_t * tmpbuf8); - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_lanczos.c gst-plugins-base1.0-1.6.1/gst/videoscale/vs_lanczos.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_lanczos.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_lanczos.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1656 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2011 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -/* - * - * Modified Lanczos scaling algorithm - * ================================== - * - * This algorithm was developed by the author. The primary goals of - * the algorithm are high-quality video downscaling for medium scale - * factors (in the range of 1.3x to 5.0x) using methods that can be - * converted to SIMD code. Concerns with existing algorithms were - * mainly related to either over-soft filtering (Lanczos) or aliasing - * (bilinear or any other method with inadequate sampling). - * - * The problems with bilinear scaling are apparent when downscaling - * more than a factor of 2. For example, when downscaling by a factor - * of 3, only two-thirds of the input pixels contribute to the output - * pixels. This is only considering scaling in one direction; after - * scaling both vertically and horizontally in a 2-D image, fewer than - * half of the input pixels contribute to the output, so it should not - * be surprising that the output is suboptimal. - * - * The problems with Lanczos scaling are more subtle. From a theoretical - * perspective, Lanczos is an optimal algorithm for resampling equally- - * spaced values. This theoretical perspective is based on analysis - * done in frequency space, thus, Lanczos works very well for audio - * resampling, since the ear hears primarily in frequency space. The - * human visual system is sensitive primarily in the spatial domain, - * therefore any resampling algorithm should take this into account. - * This difference is immediately clear in the size of resampling - * window or envelope that is chosen for resampling: for audio, an - * envelope of a=64 is typical, in image scaling, the envelope is - * usually a=2 or a=3. - * - * One result of the HVS being sensitive in the spatial domain (and - * also probably due to oversampling capabilities of the retina and - * visual cortex) is that it is less sensitive to the exact magnitude - * of high-frequency visual signals than to the appropriate amount of - * energy in the nearby frequency band. A Lanczos kernel with a=2 - * or a=3 strongly decreases the amount of energy in the high frequency - * bands. The energy in this area can be increased by increasing a, - * which brings in energy from different areas of the image (bad for - * reasons mentioned above), or by oversampling the input data. We - * have chosen two methods for doing the latter. Firstly, there is - * a sharpness parameter, which increases the cutoff frequency of the - * filter, aliasing higher frequency noise into the passband. And - * secondly, there is the sharpen parameter, which increases the - * contribution of high-frequency (but in-band) components. - * - * An alternate explanation of the usefulness of a sharpening filter - * is that many natural images have a roughly 1/f spectrum. In order - * for a downsampled image to look more "natural" when high frequencies - * are removed, the frequencies in the pass band near the cutoff - * frequency are amplified, causing the spectrum to be more roughly - * 1/f. I said "roughly", not "literally". - * - * This alternate explanation is useful for understanding the author's - * secondary motivation for developing this algorithm, namely, as a - * method of video compression. Several recent techniques (such as - * HTTP Live Streaming and SVC) use image scaling as a method to get - * increased compression out of nominally non-scalable codecs such as - * H.264. For optimal quality, it is thusly important to consider - * the scaler and encoder as a combined unit. Tuning of the sharpness - * and sharpen parameters was performed using the Toro encoder tuner, - * where scaled and encoded video was compared to unscaled and encoded - * video. This tuning suggested values that were very close to the - * values chosen by manual inspection of scaled images and video. - * - * The optimal values of sharpen and sharpness were slightly different - * depending whether the comparison was still images or video. Video - * comparisons were more sensitive to aliasing, since the aliasing - * artifacts tended to move or "crawl" around the video. The default - * values are for video; image scaling may prefer higher values. - * - * A number of related techniques were rejected for various reasons. - * An early technique of selecting the sharpness factor locally based - * on edge detection (in order to use a higher sharpness values without - * the corresponding aliasing on edges) worked very well for still - * images, but caused too much "crawling" on textures in video. Also, - * this method is slow, as it does not parallelize well. - * - * Non-separable techniques were rejected because the fastest would - * have been at least 4x slower. - * - * It is infrequently appreciated that image scaling should ideally be - * done in linear light space. Converting to linear light space has - * a similar effect to a sharpening filter. This approach was not - * taken because the added benefit is minor compared to the additional - * computational cost. Morever, the benefit is decreased by increasing - * the strength of the sharpening filter. - * - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "vs_scanline.h" -#include "vs_image.h" - -#include "gstvideoscaleorc.h" -#include -#include - -#define NEED_CLAMP(x,a,b) ((x) < (a) || (x) > (b)) - -#define ROUND_UP_2(x) (((x)+1)&~1) -#define ROUND_UP_4(x) (((x)+3)&~3) -#define ROUND_UP_8(x) (((x)+7)&~7) - -#define SRC_LINE(i) (scale->src->pixels + scale->src->stride * (i)) - -#define TMP_LINE_S16(i) ((gint16 *)scale->tmpdata + (i)*(scale->dest->width)) -#define TMP_LINE_S32(i) ((gint32 *)scale->tmpdata + (i)*(scale->dest->width)) -#define TMP_LINE_FLOAT(i) ((float *)scale->tmpdata + (i)*(scale->dest->width)) -#define TMP_LINE_DOUBLE(i) ((double *)scale->tmpdata + (i)*(scale->dest->width)) -#define TMP_LINE_S16_AYUV(i) ((gint16 *)scale->tmpdata + (i)*4*(scale->dest->width)) -#define TMP_LINE_S32_AYUV(i) ((gint32 *)scale->tmpdata + (i)*4*(scale->dest->width)) -#define TMP_LINE_FLOAT_AYUV(i) ((float *)scale->tmpdata + (i)*4*(scale->dest->width)) -#define TMP_LINE_DOUBLE_AYUV(i) ((double *)scale->tmpdata + (i)*4*(scale->dest->width)) - -#define PTR_OFFSET(a,b) ((void *)((char *)(a) + (b))) - -typedef void (*HorizResampleFunc) (void *dest, const gint32 * offsets, - const void *taps, const void *src, int n_taps, int shift, int n); - -typedef struct _Scale1D Scale1D; -struct _Scale1D -{ - int n; - double offset; - double scale; - - double fx; - double ex; - int dx; - - int n_taps; - gint32 *offsets; - void *taps; -}; - -typedef struct _Scale Scale; -struct _Scale -{ - const VSImage *dest; - const VSImage *src; - - double sharpness; - gboolean dither; - - void *tmpdata; - - HorizResampleFunc horiz_resample_func; - - Scale1D x_scale1d; - Scale1D y_scale1d; -}; - -static void -vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen); -static void vs_image_scale_lanczos_Y_int32 (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void vs_image_scale_lanczos_Y_float (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void vs_image_scale_lanczos_Y_double (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void -vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen); -static void vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void vs_image_scale_lanczos_AYUV_float (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void vs_image_scale_lanczos_AYUV_double (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); -static void vs_image_scale_lanczos_AYUV64_double (const VSImage * dest, - const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither, - double a, double sharpen); - -static double -sinc (double x) -{ - if (x == 0) - return 1; - return sin (G_PI * x) / (G_PI * x); -} - -static double -envelope (double x) -{ - if (x <= -1 || x >= 1) - return 0; - return sinc (x); -} - -static int -scale1d_get_n_taps (int src_size, int dest_size, double a, double sharpness) -{ - double scale; - double fx; - int dx; - - scale = src_size / (double) dest_size; - if (scale > 1.0) { - fx = (1.0 / scale) * sharpness; - } else { - fx = (1.0) * sharpness; - } - dx = ceil (a / fx); - - return 2 * dx; -} - -static void -scale1d_cleanup (Scale1D * scale) -{ - g_free (scale->taps); - g_free (scale->offsets); -} - -/* - * Calculates a set of taps for each destination element in double - * format. Each set of taps sums to 1.0. - * - */ -static void -scale1d_calculate_taps (Scale1D * scale, int src_size, int dest_size, - int n_taps, double a, double sharpness, double sharpen) -{ - int j; - double *tap_array; - gint32 *offsets; - double scale_offset; - double scale_increment; - int dx; - double fx; - double ex; - - scale->scale = src_size / (double) dest_size; - scale->offset = scale->scale / 2 - 0.5; - - if (scale->scale > 1.0) { - scale->fx = (1.0 / scale->scale) * sharpness; - } else { - scale->fx = (1.0) * sharpness; - } - scale->ex = scale->fx / a; - scale->dx = ceil (a / scale->fx); - - g_assert (n_taps >= 2 * scale->dx); - scale->n_taps = n_taps; - - scale->taps = g_malloc (sizeof (double) * scale->n_taps * dest_size); - scale->offsets = g_malloc (sizeof (gint32) * dest_size); - tap_array = scale->taps; - offsets = scale->offsets; - - scale_offset = scale->offset; - scale_increment = scale->scale; - dx = scale->dx; - fx = scale->fx; - ex = scale->ex; - - for (j = 0; j < dest_size; j++) { - double x; - int xi; - int l; - double weight; - double *taps; - - x = scale_offset + scale_increment * j; - x = CLAMP (x, 0, src_size); - xi = ceil (x) - dx; - - offsets[j] = xi; - weight = 0; - taps = tap_array + j * n_taps; - - for (l = 0; l < n_taps; l++) { - int xl = xi + l; - taps[l] = sinc ((x - xl) * fx) * envelope ((x - xl) * ex); - taps[l] -= sharpen * envelope ((x - xl) * ex); - weight += taps[l]; - } - g_assert (envelope ((x - (xi - 1)) * ex) == 0); - g_assert (envelope ((x - (xi + n_taps)) * ex) == 0); - for (l = 0; l < n_taps; l++) { - taps[l] /= weight; - } - - if (xi < 0) { - int shift = -xi; - - for (l = 0; l < shift; l++) { - taps[shift] += taps[l]; - } - for (l = 0; l < n_taps - shift; l++) { - taps[l] = taps[shift + l]; - } - for (; l < n_taps; l++) { - taps[l] = 0; - } - offsets[j] += shift; - } - - if (xi > src_size - n_taps) { - int shift = xi - (src_size - n_taps); - - for (l = 0; l < shift; l++) { - taps[n_taps - shift - 1] += taps[n_taps - shift + l]; - } - for (l = 0; l < n_taps - shift; l++) { - taps[n_taps - 1 - l] = taps[n_taps - 1 - shift - l]; - } - for (l = 0; l < shift; l++) { - taps[l] = 0; - } - offsets[j] -= shift; - } - } -} - -/* - * Calculates a set of taps for each destination element in float - * format. Each set of taps sums to 1.0. - */ -static void -scale1d_calculate_taps_float (Scale1D * scale, int src_size, int dest_size, - int n_taps, double a, double sharpness, double sharpen) -{ - double *taps_d; - float *taps_f; - int j; - - scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness, - sharpen); - - taps_d = scale->taps; - taps_f = g_malloc (sizeof (float) * scale->n_taps * dest_size); - - for (j = 0; j < dest_size * n_taps; j++) { - taps_f[j] = taps_d[j]; - } - - g_free (taps_d); - scale->taps = taps_f; -} - -/* - * Calculates a set of taps for each destination element in gint32 - * format. Each set of taps sums to (very nearly) (1<taps; - taps_i = g_malloc (sizeof (gint32) * scale->n_taps * dest_size); - - multiplier = (1 << shift); - - for (j = 0; j < dest_size; j++) { - for (i = 0; i < n_taps; i++) { - taps_i[j * n_taps + i] = - floor (0.5 + taps_d[j * n_taps + i] * multiplier); - } - } - - g_free (taps_d); - scale->taps = taps_i; -} - -/* - * Calculates a set of taps for each destination element in gint16 - * format. Each set of taps sums to (1<taps; - taps_i = g_malloc (sizeof (gint16) * scale->n_taps * dest_size); - - multiplier = (1 << shift); - - /* Various methods for converting floating point taps to integer. - * The dB values are the SSIM value between scaling an image via - * the floating point pathway vs. the integer pathway using the - * given code to generate the taps. Only one image was tested, - * scaling from 1920x1080 to 640x360. Several variations of the - * methods were also tested, with nothing appearing useful. */ -#if 0 - /* Standard round to integer. This causes bad DC errors. */ - /* 44.588 dB */ - for (j = 0; j < dest_size; j++) { - for (i = 0; i < n_taps; i++) { - taps_i[j * n_taps + i] = - floor (0.5 + taps_d[j * n_taps + i] * multiplier); - } - } -#endif -#if 0 - /* Dithering via error propogation. Works pretty well, but - * really we want to propogate errors across rows, which would - * mean having several sets of tap arrays. Possible, but more work, - * and it may not even be better. */ - /* 57.0961 dB */ - { - double err = 0; - for (j = 0; j < dest_size; j++) { - for (i = 0; i < n_taps; i++) { - err += taps_d[j * n_taps + i] * multiplier; - taps_i[j * n_taps + i] = floor (err); - err -= floor (err); - } - } - } -#endif -#if 1 - /* Round to integer, but with an adjustable bias that we use to - * eliminate the DC error. This search method is a bit crude, and - * could perhaps be improved somewhat. */ - /* 60.4851 dB */ - for (j = 0; j < dest_size; j++) { - int k; - for (k = 0; k < 100; k++) { - int sum = 0; - double offset; - - offset = k * 0.01; - for (i = 0; i < n_taps; i++) { - taps_i[j * n_taps + i] = - floor (offset + taps_d[j * n_taps + i] * multiplier); - sum += taps_i[j * n_taps + i]; - } - - if (sum >= (1 << shift)) - break; - } - } -#endif -#if 0 - /* Round to integer, but adjust the multiplier. The search method is - * wrong a lot, but was sufficient enough to calculate dB error. */ - /* 58.6517 dB */ - for (j = 0; j < dest_size; j++) { - int k; - int sum = 0; - for (k = 0; k < 200; k++) { - sum = 0; - - multiplier = (1 << shift) - 1.0 + k * 0.01; - for (i = 0; i < n_taps; i++) { - taps_i[j * n_taps + i] = - floor (0.5 + taps_d[j * n_taps + i] * multiplier); - sum += taps_i[j * n_taps + i]; - } - - if (sum >= (1 << shift)) - break; - } - if (sum != (1 << shift)) { - GST_ERROR ("%g %d", multiplier, sum); - } - } -#endif -#if 0 - /* Round to integer, but subtract the error from the largest tap */ - /* 58.3677 dB */ - for (j = 0; j < dest_size; j++) { - int err = -multiplier; - for (i = 0; i < n_taps; i++) { - taps_i[j * n_taps + i] = - floor (0.5 + taps_d[j * n_taps + i] * multiplier); - err += taps_i[j * n_taps + i]; - } - if (taps_i[j * n_taps + (n_taps / 2 - 1)] > - taps_i[j * n_taps + (n_taps / 2)]) { - taps_i[j * n_taps + (n_taps / 2 - 1)] -= err; - } else { - taps_i[j * n_taps + (n_taps / 2)] -= err; - } - } -#endif - - g_free (taps_d); - scale->taps = taps_i; -} - - -void -vs_image_scale_lanczos_Y (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod, - double a, double sharpen) -{ - switch (submethod) { - case 0: - default: - vs_image_scale_lanczos_Y_int16 (dest, src, tmpbuf, sharpness, dither, a, - sharpen); - break; - case 1: - vs_image_scale_lanczos_Y_int32 (dest, src, tmpbuf, sharpness, dither, a, - sharpen); - break; - case 2: - vs_image_scale_lanczos_Y_float (dest, src, tmpbuf, sharpness, dither, a, - sharpen); - break; - case 3: - vs_image_scale_lanczos_Y_double (dest, src, tmpbuf, sharpness, dither, a, - sharpen); - break; - } -} - -void -vs_image_scale_lanczos_AYUV (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod, - double a, double sharpen) -{ - switch (submethod) { - case 0: - default: - vs_image_scale_lanczos_AYUV_int16 (dest, src, tmpbuf, sharpness, dither, - a, sharpen); - break; - case 1: - vs_image_scale_lanczos_AYUV_int32 (dest, src, tmpbuf, sharpness, dither, - a, sharpen); - break; - case 2: - vs_image_scale_lanczos_AYUV_float (dest, src, tmpbuf, sharpness, dither, - a, sharpen); - break; - case 3: - vs_image_scale_lanczos_AYUV_double (dest, src, tmpbuf, sharpness, dither, - a, sharpen); - break; - } -} - -void -vs_image_scale_lanczos_AYUV64 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod, - double a, double sharpen) -{ - vs_image_scale_lanczos_AYUV64_double (dest, src, tmpbuf, sharpness, dither, - a, sharpen); -} - - - -#define RESAMPLE_HORIZ_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \ -static void \ -function (dest_type *dest, const gint32 *offsets, \ - const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \ -{ \ - int i; \ - int k; \ - dest_type sum; \ - const src_type *srcline; \ - const tap_type *tapsline; \ - for (i = 0; i < n; i++) { \ - srcline = src + offsets[i]; \ - tapsline = taps + i * _n_taps; \ - sum = 0; \ - for (k = 0; k < _n_taps; k++) { \ - sum += srcline[k] * tapsline[k]; \ - } \ - dest[i] = sum; \ - } \ -} - -#define RESAMPLE_HORIZ(function, dest_type, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (dest_type *dest, const gint32 *offsets, \ - const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \ -{ \ - int i; \ - int k; \ - dest_type sum; \ - const src_type *srcline; \ - const tap_type *tapsline; \ - int offset; \ - if (_shift > 0) offset = (1<<_shift)>>1; \ - else offset = 0; \ - for (i = 0; i < n; i++) { \ - srcline = src + offsets[i]; \ - tapsline = taps + i * _n_taps; \ - sum = 0; \ - for (k = 0; k < _n_taps; k++) { \ - sum += srcline[k] * tapsline[k]; \ - } \ - dest[i] = (sum + offset) >> _shift; \ - } \ -} - -#define RESAMPLE_HORIZ_AYUV_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \ -static void \ -function (dest_type *dest, const gint32 *offsets, \ - const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \ -{ \ - int i; \ - int k; \ - dest_type sum1; \ - dest_type sum2; \ - dest_type sum3; \ - dest_type sum4; \ - const src_type *srcline; \ - const tap_type *tapsline; \ - for (i = 0; i < n; i++) { \ - srcline = src + 4*offsets[i]; \ - tapsline = taps + i * _n_taps; \ - sum1 = 0; \ - sum2 = 0; \ - sum3 = 0; \ - sum4 = 0; \ - for (k = 0; k < _n_taps; k++) { \ - sum1 += srcline[k*4+0] * tapsline[k]; \ - sum2 += srcline[k*4+1] * tapsline[k]; \ - sum3 += srcline[k*4+2] * tapsline[k]; \ - sum4 += srcline[k*4+3] * tapsline[k]; \ - } \ - dest[i*4+0] = sum1; \ - dest[i*4+1] = sum2; \ - dest[i*4+2] = sum3; \ - dest[i*4+3] = sum4; \ - } \ -} - -#define RESAMPLE_HORIZ_AYUV(function, dest_type, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (dest_type *dest, const gint32 *offsets, \ - const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \ -{ \ - int i; \ - int k; \ - dest_type sum1; \ - dest_type sum2; \ - dest_type sum3; \ - dest_type sum4; \ - const src_type *srcline; \ - const tap_type *tapsline; \ - int offset; \ - if (_shift > 0) offset = (1<<_shift)>>1; \ - else offset = 0; \ - for (i = 0; i < n; i++) { \ - srcline = src + 4*offsets[i]; \ - tapsline = taps + i * _n_taps; \ - sum1 = 0; \ - sum2 = 0; \ - sum3 = 0; \ - sum4 = 0; \ - for (k = 0; k < _n_taps; k++) { \ - sum1 += srcline[k*4+0] * tapsline[k]; \ - sum2 += srcline[k*4+1] * tapsline[k]; \ - sum3 += srcline[k*4+2] * tapsline[k]; \ - sum4 += srcline[k*4+3] * tapsline[k]; \ - } \ - dest[i*4+0] = (sum1 + offset) >> _shift; \ - dest[i*4+1] = (sum2 + offset) >> _shift; \ - dest[i*4+2] = (sum3 + offset) >> _shift; \ - dest[i*4+3] = (sum4 + offset) >> _shift; \ - } \ -} - -/* *INDENT-OFF* */ -RESAMPLE_HORIZ_FLOAT (resample_horiz_double_u8_generic, double, double, - guint8, n_taps) -RESAMPLE_HORIZ_FLOAT (resample_horiz_float_u8_generic, float, float, - guint8, n_taps) -RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_double_ayuv_generic, double, double, - guint8, n_taps) -RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_float_ayuv_generic, float, float, - guint8, n_taps) - -RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_double_ayuv_generic_s16, double, double, - guint16, n_taps) - -RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_generic, gint32, gint32, - guint8, n_taps, shift) -RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_generic, gint16, gint16, - guint8, n_taps, shift) -RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_generic, gint32, gint32, - guint8, n_taps, shift) -RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_generic, gint16, gint16, - guint8, n_taps, shift) - -/* Candidates for orcification */ -RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps16_shift0, gint32, gint32, - guint8, 16, 0) -RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps12_shift0, gint32, gint32, - guint8, 12, 0) -RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps8_shift0, gint32, gint32, - guint8, 8, 0) -RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps4_shift0, gint32, gint32, - guint8, 4, 0) -RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps16_shift0, gint16, gint16, - guint8, 16, 0) -RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps12_shift0, gint16, gint16, - guint8, 12, 0) -RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps8_shift0, gint16, gint16, - guint8, 8, 0) -RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps4_shift0, gint16, gint16, - guint8, 4, 0) - -RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps16_shift0, gint32, gint32, - guint8, 16, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps12_shift0, gint32, gint32, - guint8, 12, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps8_shift0, gint32, gint32, - guint8, 8, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps4_shift0, gint32, gint32, - guint8, 4, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps16_shift0, gint16, gint16, - guint8, 16, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps12_shift0, gint16, gint16, - guint8, 12, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps8_shift0, gint16, gint16, - guint8, 8, 0) -RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps4_shift0, gint16, gint16, - guint8, 4, 0) -/* *INDENT-ON* */ - -#define RESAMPLE_VERT(function, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (guint8 *dest, \ - const tap_type *taps, const src_type *src, int stride, int n_taps, \ - int shift, int n) \ -{ \ - int i; \ - int l; \ - gint32 sum_y; \ - gint32 offset = (1<<_shift) >> 1; \ - for (i = 0; i < n; i++) { \ - sum_y = 0; \ - for (l = 0; l < n_taps; l++) { \ - const src_type *line = PTR_OFFSET(src, stride * l); \ - sum_y += line[i] * taps[l]; \ - } \ - dest[i] = CLAMP ((sum_y + offset) >> _shift, 0, 255); \ - } \ -} - -#define RESAMPLE_VERT_DITHER(function, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (guint8 *dest, \ - const tap_type *taps, const src_type *src, int stride, int n_taps, \ - int shift, int n) \ -{ \ - int i; \ - int l; \ - gint32 sum_y; \ - gint32 err_y = 0; \ - gint32 mask = (1<<_shift) - 1; \ - for (i = 0; i < n; i++) { \ - sum_y = 0; \ - for (l = 0; l < n_taps; l++) { \ - const src_type *line = PTR_OFFSET(src, stride * l); \ - sum_y += line[i] * taps[l]; \ - } \ - err_y += sum_y; \ - dest[i] = CLAMP (err_y >> _shift, 0, 255); \ - err_y &= mask; \ - } \ -} - -/* *INDENT-OFF* */ -RESAMPLE_VERT (resample_vert_int32_generic, gint32, gint32, n_taps, shift) -RESAMPLE_VERT_DITHER (resample_vert_dither_int32_generic, gint32, gint32, - n_taps, shift) -RESAMPLE_VERT (resample_vert_int16_generic, gint16, gint16, n_taps, shift); -RESAMPLE_VERT_DITHER (resample_vert_dither_int16_generic, gint16, gint16, - n_taps, shift) -/* *INDENT-ON* */ - -#define RESAMPLE_VERT_FLOAT(function, dest_type, clamp, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (dest_type *dest, \ - const tap_type *taps, const src_type *src, int stride, int n_taps, \ - int shift, int n) \ -{ \ - int i; \ - int l; \ - src_type sum_y; \ - for (i = 0; i < n; i++) { \ - sum_y = 0; \ - for (l = 0; l < n_taps; l++) { \ - const src_type *line = PTR_OFFSET(src, stride * l); \ - sum_y += line[i] * taps[l]; \ - } \ - dest[i] = CLAMP (floor(0.5 + sum_y), 0, clamp); \ - } \ -} - -#define RESAMPLE_VERT_FLOAT_DITHER(function, dest_type, clamp, tap_type, src_type, _n_taps, _shift) \ -static void \ -function (dest_type *dest, \ - const tap_type *taps, const src_type *src, int stride, int n_taps, \ - int shift, int n) \ -{ \ - int i; \ - int l; \ - src_type sum_y; \ - src_type err_y = 0; \ - for (i = 0; i < n; i++) { \ - sum_y = 0; \ - for (l = 0; l < n_taps; l++) { \ - const src_type *line = PTR_OFFSET(src, stride * l); \ - sum_y += line[i] * taps[l]; \ - } \ - err_y += sum_y; \ - dest[i] = CLAMP (floor (err_y), 0, clamp); \ - err_y -= floor (err_y); \ - } \ -} - -/* *INDENT-OFF* */ -RESAMPLE_VERT_FLOAT (resample_vert_double_generic, guint8, 255, double, double, n_taps, - shift) -RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_double_generic, guint8, 255, double, double, - n_taps, shift) - -RESAMPLE_VERT_FLOAT (resample_vert_double_generic_u16, guint16, 65535, double, double, n_taps, - shift) -RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_double_generic_u16, guint16, 65535, double, double, - n_taps, shift) - -RESAMPLE_VERT_FLOAT (resample_vert_float_generic, guint8, 255, float, float, n_taps, shift) -RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_float_generic, guint8, 255, float, float, - n_taps, shift) -/* *INDENT-ON* */ - -#define S16_SHIFT1 7 -#define S16_SHIFT2 7 -#define S16_MIDSHIFT 0 -#define S16_POSTSHIFT (S16_SHIFT1+S16_SHIFT2-S16_MIDSHIFT) - -static void -vs_scale_lanczos_Y_int16 (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - gint16 *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_S16 (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width); - tmp_yi++; - } - - taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_int16_generic (destline, - taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]), - sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps, - S16_POSTSHIFT, scale->dest->width); - } else { - resample_vert_int16_generic (destline, - taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]), - sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps, - S16_POSTSHIFT, scale->dest->width); - } - } -} - -void -vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - n_taps = ROUND_UP_4 (n_taps); - scale1d_calculate_taps_int16 (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_int16 (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2); - - scale->dither = dither; - - switch (scale->x_scale1d.n_taps) { - case 4: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_u8_taps4_shift0; - break; - case 8: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_u8_taps8_shift0; - break; - case 12: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_u8_taps12_shift0; - break; - case 16: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_u8_taps16_shift0; - break; - default: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_u8_generic; - break; - } - - scale->tmpdata = - g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height); - - vs_scale_lanczos_Y_int16 (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - - -#define S32_SHIFT1 11 -#define S32_SHIFT2 11 -#define S32_MIDSHIFT 0 -#define S32_POSTSHIFT (S32_SHIFT1+S32_SHIFT2-S32_MIDSHIFT) - -static void -vs_scale_lanczos_Y_int32 (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - gint32 *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_S32 (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width); - tmp_yi++; - } - - taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_int32_generic (destline, - taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]), - sizeof (gint32) * scale->dest->width, - scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width); - } else { - resample_vert_int32_generic (destline, - taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]), - sizeof (gint32) * scale->dest->width, - scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width); - } - } -} - -void -vs_image_scale_lanczos_Y_int32 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - n_taps = ROUND_UP_4 (n_taps); - scale1d_calculate_taps_int32 (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_int32 (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2); - - scale->dither = dither; - - switch (scale->x_scale1d.n_taps) { - case 4: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_u8_taps4_shift0; - break; - case 8: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_u8_taps8_shift0; - break; - case 12: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_u8_taps12_shift0; - break; - case 16: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_u8_taps16_shift0; - break; - default: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_u8_generic; - break; - } - - scale->tmpdata = - g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height); - - vs_scale_lanczos_Y_int32 (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - -static void -vs_scale_lanczos_Y_double (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - double *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_DOUBLE (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, 0, scale->dest->width); - tmp_yi++; - } - - taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_double_generic (destline, - taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]), - sizeof (double) * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width); - } else { - resample_vert_double_generic (destline, - taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]), - sizeof (double) * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width); - } - } -} - -void -vs_image_scale_lanczos_Y_double (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - scale1d_calculate_taps (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen); - - scale->dither = dither; - - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_double_u8_generic; - - scale->tmpdata = - g_malloc (sizeof (double) * scale->dest->width * scale->src->height); - - vs_scale_lanczos_Y_double (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - -static void -vs_scale_lanczos_Y_float (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - float *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_FLOAT (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, 0, scale->dest->width); - tmp_yi++; - } - - taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_float_generic (destline, - taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]), - sizeof (float) * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width); - } else { - resample_vert_float_generic (destline, - taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]), - sizeof (float) * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width); - } - } -} - -void -vs_image_scale_lanczos_Y_float (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - scale1d_calculate_taps_float (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_float (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen); - - scale->dither = dither; - - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_float_u8_generic; - - scale->tmpdata = - g_malloc (sizeof (float) * scale->dest->width * scale->src->height); - - vs_scale_lanczos_Y_float (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - - - - - -static void -vs_scale_lanczos_AYUV_int16 (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - gint16 *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_S16_AYUV (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width); - tmp_yi++; - } - - taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_int16_generic (destline, - taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]), - sizeof (gint16) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4); - } else { - resample_vert_int16_generic (destline, - taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]), - sizeof (gint16) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4); - } - } -} - -void -vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - n_taps = ROUND_UP_4 (n_taps); - scale1d_calculate_taps_int16 (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_int16 (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2); - - scale->dither = dither; - - switch (scale->x_scale1d.n_taps) { - case 4: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps4_shift0; - break; - case 8: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps8_shift0; - break; - case 12: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps12_shift0; - break; - case 16: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps16_shift0; - break; - default: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int16_int16_ayuv_generic; - break; - } - - scale->tmpdata = - g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height * 4); - - vs_scale_lanczos_AYUV_int16 (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - - -static void -vs_scale_lanczos_AYUV_int32 (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - gint32 *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_S32_AYUV (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width); - tmp_yi++; - } - - taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_int32_generic (destline, - taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]), - sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps, - S32_POSTSHIFT, scale->dest->width * 4); - } else { - resample_vert_int32_generic (destline, - taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]), - sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps, - S32_POSTSHIFT, scale->dest->width * 4); - } - } -} - -void -vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - n_taps = ROUND_UP_4 (n_taps); - scale1d_calculate_taps_int32 (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_int32 (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2); - - scale->dither = dither; - - switch (scale->x_scale1d.n_taps) { - case 4: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps4_shift0; - break; - case 8: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps8_shift0; - break; - case 12: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps12_shift0; - break; - case 16: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps16_shift0; - break; - default: - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_int32_int32_ayuv_generic; - break; - } - - scale->tmpdata = - g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height * 4); - - vs_scale_lanczos_AYUV_int32 (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - -static void -vs_scale_lanczos_AYUV_double (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - double *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_DOUBLE_AYUV (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, 0, scale->dest->width); - tmp_yi++; - } - - taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_double_generic (destline, - taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]), - sizeof (double) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width * 4); - } else { - resample_vert_double_generic (destline, - taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]), - sizeof (double) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width * 4); - } - } -} - -void -vs_image_scale_lanczos_AYUV_double (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - scale1d_calculate_taps (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen); - - scale->dither = dither; - - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_double_ayuv_generic; - - scale->tmpdata = - g_malloc (sizeof (double) * scale->dest->width * scale->src->height * 4); - - vs_scale_lanczos_AYUV_double (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - -static void -vs_scale_lanczos_AYUV_float (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint8 *destline; - float *taps; - - destline = scale->dest->pixels + scale->dest->stride * j; - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_FLOAT_AYUV (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, 0, scale->dest->width); - tmp_yi++; - } - - taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_float_generic (destline, - taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]), - sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0, - scale->dest->width * 4); - } else { - resample_vert_float_generic (destline, - taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]), - sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0, - scale->dest->width * 4); - } - } -} - -void -vs_image_scale_lanczos_AYUV_float (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - scale1d_calculate_taps_float (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps_float (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen); - - scale->dither = dither; - - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_float_ayuv_generic; - - scale->tmpdata = - g_malloc (sizeof (float) * scale->dest->width * scale->src->height * 4); - - vs_scale_lanczos_AYUV_float (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} - -static void -vs_scale_lanczos_AYUV64_double (Scale * scale) -{ - int j; - int yi; - int tmp_yi; - - tmp_yi = 0; - - for (j = 0; j < scale->dest->height; j++) { - guint16 *destline; - double *taps; - - destline = (guint16 *) (scale->dest->pixels + scale->dest->stride * j); - - yi = scale->y_scale1d.offsets[j]; - - while (tmp_yi < yi + scale->y_scale1d.n_taps) { - scale->horiz_resample_func (TMP_LINE_DOUBLE_AYUV (tmp_yi), - scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi), - scale->x_scale1d.n_taps, 0, scale->dest->width); - tmp_yi++; - } - - taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps; - if (scale->dither) { - resample_vert_dither_double_generic_u16 (destline, - taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]), - sizeof (double) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width * 4); - } else { - resample_vert_double_generic_u16 (destline, - taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]), - sizeof (double) * 4 * scale->dest->width, - scale->y_scale1d.n_taps, 0, scale->dest->width * 4); - } - } -} - -void -vs_image_scale_lanczos_AYUV64_double (const VSImage * dest, const VSImage * src, - uint8_t * tmpbuf, double sharpness, gboolean dither, double a, - double sharpen) -{ - Scale s = { 0 }; - Scale *scale = &s; - int n_taps; - - scale->dest = dest; - scale->src = src; - - n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness); - scale1d_calculate_taps (&scale->x_scale1d, - src->width, dest->width, n_taps, a, sharpness, sharpen); - - n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness); - scale1d_calculate_taps (&scale->y_scale1d, - src->height, dest->height, n_taps, a, sharpness, sharpen); - - scale->dither = dither; - - scale->horiz_resample_func = - (HorizResampleFunc) resample_horiz_double_ayuv_generic_s16; - - scale->tmpdata = - g_malloc (sizeof (double) * scale->dest->width * scale->src->height * 4); - - vs_scale_lanczos_AYUV64_double (scale); - - scale1d_cleanup (&scale->x_scale1d); - scale1d_cleanup (&scale->y_scale1d); - g_free (scale->tmpdata); -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_scanline.c gst-plugins-base1.0-1.6.1/gst/videoscale/vs_scanline.c --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_scanline.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_scanline.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,778 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2005 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "vs_scanline.h" - -#include "gstvideoscaleorc.h" -#include - -#include - -/* greyscale, i.e., single componenet */ - -#define BLEND(a,b,x) (((a) * (65536 - (x)) + (b) * (x)) >> 16) -#define BLEND15(a,b,x) (((a) * (32768 - (x)) + (b) * (x)) >> 15) - -void -vs_scanline_downsample_Y (uint8_t * dest, uint8_t * src, int n) -{ - video_scale_orc_downsample_u8 (dest, src, n); -} - -void -vs_scanline_resample_nearest_Y (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - video_scale_orc_resample_nearest_u8 (dest, src, *accumulator, increment, n); - - *accumulator += n * increment; -} - -#include -void -vs_scanline_resample_linear_Y (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - video_scale_orc_resample_bilinear_u8 (dest, src, *accumulator, increment, n); - - *accumulator += n * increment; -} - -void -vs_scanline_merge_linear_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2, - int n, int x) -{ - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, n); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n); - } -} - -void -vs_scanline_downsample_Y16 (uint8_t * dest, uint8_t * src, int n) -{ - video_scale_orc_downsample_u16 ((uint16_t *) dest, (uint16_t *) src, n); -} - -void -vs_scanline_resample_nearest_Y16 (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j; - uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - d[i] = s[j]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_Y16 (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i; - int j; - int x; - uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src; - - for (i = 0; i < n; i++) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - d[i] = BLEND (s[j], s[j + 1], x); - } else - d[i] = s[j]; - - acc += increment; - } - *accumulator = acc; -} - -void -vs_scanline_merge_linear_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2, - int n, int x) -{ - uint16_t *d = (uint16_t *) dest; - const uint16_t *s1 = (const uint16_t *) src1; - const uint16_t *s2 = (const uint16_t *) src2; - - if (x == 0) { - memcpy (d, s1, n * 2); - } else { - video_scale_orc_merge_linear_u16 (d, s1, s2, 65536 - x, x, n); - } -} - -/* RGBA */ - -void -vs_scanline_downsample_RGBA (uint8_t * dest, uint8_t * src, int n) -{ - video_scale_orc_downsample_u32 (dest, src, n); -} - -void -vs_scanline_resample_nearest_RGBA (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - video_scale_orc_resample_nearest_u32 (dest, src, *accumulator, increment, n); - - *accumulator += n * increment; -} - -void -vs_scanline_resample_linear_RGBA (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - video_scale_orc_resample_bilinear_u32 (dest, src, *accumulator, increment, n); - - *accumulator += n * increment; -} - -void -vs_scanline_merge_linear_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2, - int n, int x) -{ - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, n * 4); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 4); - } -} - - -/* RGB */ - -void -vs_scanline_downsample_RGB (uint8_t * dest, uint8_t * src, int n) -{ - int i; - - for (i = 0; i < n; i++) { - dest[i * 3 + 0] = (src[i * 6 + 0] + src[i * 6 + 3]) / 2; - dest[i * 3 + 1] = (src[i * 6 + 1] + src[i * 6 + 4]) / 2; - dest[i * 3 + 2] = (src[i * 6 + 2] + src[i * 6 + 5]) / 2; - } -} - -void -vs_scanline_resample_nearest_RGB (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i; - int j; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - - dest[i * 3 + 0] = src[j * 3 + 0]; - dest[i * 3 + 1] = src[j * 3 + 1]; - dest[i * 3 + 2] = src[j * 3 + 2]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_RGB (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i; - int j; - int x; - - for (i = 0; i < n; i++) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i * 3 + 0] = BLEND (src[j * 3 + 0], src[j * 3 + 3], x); - dest[i * 3 + 1] = BLEND (src[j * 3 + 1], src[j * 3 + 4], x); - dest[i * 3 + 2] = BLEND (src[j * 3 + 2], src[j * 3 + 5], x); - } else { - dest[i * 3 + 0] = src[j * 3 + 0]; - dest[i * 3 + 1] = src[j * 3 + 1]; - dest[i * 3 + 2] = src[j * 3 + 2]; - } - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_merge_linear_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2, - int n, int x) -{ - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, n * 3); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 3); - } -} - - -/* YUYV */ - -/* n is the number of pixels */ -/* increment is per Y pixel */ - -void -vs_scanline_downsample_YUYV (uint8_t * dest, uint8_t * src, int n) -{ - video_scale_orc_downsample_yuyv (dest, src, n); -} - -void -vs_scanline_resample_nearest_YUYV (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i += 2) { - j = (acc + 0x8000) >> 16; - dest[i * 2 + 0] = src[j * 2 + 0]; - - j >>= 1; - dest[i * 2 + 1] = src[j * 4 + 1]; - dest[i * 2 + 3] = src[j * 4 + 3]; - - acc += increment; - - if (i < n - 1) { - j = (acc + 0x8000) >> 16; - dest[i * 2 + 2] = src[j * 2 + 0]; - - acc += increment; - } - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_YUYV (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j, x; - - for (i = 0; i < n; i += 2) { - j = acc >> 16; - x = acc & 0xffff; - - if (j + 1 < src_width) - dest[i * 2 + 0] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x); - else - dest[i * 2 + 0] = src[j * 2 + 0]; - - j >>= 1; - if (2 * (j + 1) < src_width) { - dest[i * 2 + 1] = BLEND (src[j * 4 + 1], src[j * 4 + 5], x); - dest[i * 2 + 3] = BLEND (src[j * 4 + 3], src[j * 4 + 7], x); - } else { - dest[i * 2 + 1] = src[j * 4 + 1]; - dest[i * 2 + 3] = src[j * 4 + 3]; - } - - acc += increment; - - if (i < n - 1) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i * 2 + 2] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x); - } else - dest[i * 2 + 2] = src[j * 2 + 0]; - - acc += increment; - } - } - *accumulator = acc; -} - -void -vs_scanline_merge_linear_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2, - int n, int x) -{ - int quads = (n + 1) / 2; - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, quads * 4); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, quads * 4); - } -} - - -/* UYVY */ - -/* n is the number of bi-pixels */ -/* increment is per Y pixel */ - -void -vs_scanline_downsample_UYVY (uint8_t * dest, uint8_t * src, int n) -{ - int i; - - for (i = 0; i < n; i++) { - dest[i * 4 + 0] = (src[i * 8 + 0] + src[i * 8 + 4]) / 2; - dest[i * 4 + 1] = (src[i * 8 + 1] + src[i * 8 + 3]) / 2; - dest[i * 4 + 2] = (src[i * 8 + 2] + src[i * 8 + 6]) / 2; - dest[i * 4 + 3] = (src[i * 8 + 5] + src[i * 8 + 7]) / 2; - } -} - -void -vs_scanline_resample_nearest_UYVY (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i += 2) { - j = (acc + 0x8000) >> 16; - dest[i * 2 + 1] = src[j * 2 + 1]; - - j >>= 1; - dest[i * 2 + 0] = src[j * 4 + 0]; - dest[i * 2 + 2] = src[j * 4 + 2]; - - acc += increment; - - if (i < n - 1) { - j = (acc + 0x8000) >> 16; - dest[i * 2 + 3] = src[j * 2 + 1]; - - acc += increment; - } - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_UYVY (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j, x; - - for (i = 0; i < n; i += 2) { - j = acc >> 16; - x = acc & 0xffff; - - if (j + 1 < src_width) - dest[i * 2 + 1] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x); - else - dest[i * 2 + 1] = src[j * 2 + 1]; - - j >>= 1; - if (2 * (j + 1) < src_width) { - dest[i * 2 + 0] = BLEND (src[j * 4 + 0], src[j * 4 + 4], x); - dest[i * 2 + 2] = BLEND (src[j * 4 + 2], src[j * 4 + 6], x); - } else { - dest[i * 2 + 0] = src[j * 4 + 0]; - dest[i * 2 + 2] = src[j * 4 + 2]; - } - - acc += increment; - - if (i < n - 1) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i * 2 + 3] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x); - } else - dest[i * 2 + 3] = src[j * 2 + 1]; - - acc += increment; - } - } -} - -void -vs_scanline_merge_linear_UYVY (uint8_t * dest, uint8_t * src1, - uint8_t * src2, int n, int x) -{ - int quads = (n + 1) / 2; - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, quads * 4); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, quads * 4); - } -} - - -/* NV12 */ - -/* n is the number of bi-pixels */ - -void -vs_scanline_downsample_NV12 (uint8_t * dest, uint8_t * src, int n) -{ - int i; - - for (i = 0; i < n; i++) { - dest[i * 2 + 0] = (src[i * 4 + 0] + src[i * 4 + 2]) / 2; - dest[i * 2 + 1] = (src[i * 4 + 1] + src[i * 4 + 3]) / 2; - } -} - -void -vs_scanline_resample_nearest_NV12 (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - - dest[i * 2 + 0] = src[j * 2 + 0]; - dest[i * 2 + 1] = src[j * 2 + 1]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_NV12 (uint8_t * dest, uint8_t * src, int src_width, - int n, int *accumulator, int increment) -{ - int acc = *accumulator; - int i; - int j; - int x; - - for (i = 0; i < n; i++) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i * 2 + 0] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x); - dest[i * 2 + 1] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x); - } else { - dest[i * 2 + 0] = src[j * 2 + 0]; - dest[i * 2 + 1] = src[j * 2 + 1]; - } - acc += increment; - } - *accumulator = acc; -} - -void -vs_scanline_merge_linear_NV12 (uint8_t * dest, uint8_t * src1, - uint8_t * src2, int n, int x) -{ - uint32_t value = x >> 8; - - if (value == 0) { - memcpy (dest, src1, n * 2); - } else { - video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 2); - } -} - - -/* RGB565 */ - -/* note that src and dest are uint16_t, and thus endian dependent */ - -#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13) -#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9) -#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2) - -#define RGB565(r,g,b) \ - ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f)) - - -void -vs_scanline_downsample_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, int n) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int i; - - for (i = 0; i < n; i++) { - dest[i] = RGB565 ( - (RGB565_R (src[i * 2]) + RGB565_R (src[i * 2 + 1])) / 2, - (RGB565_G (src[i * 2]) + RGB565_G (src[i * 2 + 1])) / 2, - (RGB565_B (src[i * 2]) + RGB565_B (src[i * 2 + 1])) / 2); - } -} - -void -vs_scanline_resample_nearest_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, - int src_width, int n, int *accumulator, int increment) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - dest[i] = src[j]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, - int src_width, int n, int *accumulator, int increment) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int acc = *accumulator; - int i; - int j; - int x; - - for (i = 0; i < n; i++) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i] = RGB565 (BLEND (RGB565_R (src[j]), RGB565_R (src[j + 1]), x), - BLEND (RGB565_G (src[j]), RGB565_G (src[j + 1]), x), - BLEND (RGB565_B (src[j]), RGB565_B (src[j + 1]), x)); - } else { - dest[i] = RGB565 (RGB565_R (src[j]), - RGB565_G (src[j]), RGB565_B (src[j])); - } - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_merge_linear_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8, - uint8_t * src2_u8, int n, int x) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src1 = (uint16_t *) src1_u8; - uint16_t *src2 = (uint16_t *) src2_u8; - int i; - - if (x == 0) { - memcpy (dest, src1, n * 2); - } else { - for (i = 0; i < n; i++) { - dest[i] = RGB565 (BLEND (RGB565_R (src1[i]), RGB565_R (src2[i]), x), - BLEND (RGB565_G (src1[i]), RGB565_G (src2[i]), x), - BLEND (RGB565_B (src1[i]), RGB565_B (src2[i]), x)); - } - } -} - - -/* RGB555 */ - -/* note that src and dest are uint16_t, and thus endian dependent */ - -#define RGB555_R(x) (((x)&0x7c00)>>7 | ((x)&0x7c00)>>12) -#define RGB555_G(x) (((x)&0x03e0)>>2 | ((x)&0x03e0)>>7) -#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2) - -#define RGB555(r,g,b) \ - ((((r)<<7)&0x7c00) | (((g)<<2)&0x03e0) | (((b)>>3)&0x001f)) - -void -vs_scanline_downsample_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, int n) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int i; - - for (i = 0; i < n; i++) { - dest[i] = RGB555 ( - (RGB555_R (src[i * 2]) + RGB555_R (src[i * 2 + 1])) / 2, - (RGB555_G (src[i * 2]) + RGB555_G (src[i * 2 + 1])) / 2, - (RGB555_B (src[i * 2]) + RGB555_B (src[i * 2 + 1])) / 2); - } -} - -void -vs_scanline_resample_nearest_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, - int src_width, int n, int *accumulator, int increment) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - - dest[i] = src[j]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, - int src_width, int n, int *accumulator, int increment) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src = (uint16_t *) src_u8; - int acc = *accumulator; - int i; - int j; - int x; - - for (i = 0; i < n; i++) { - j = acc >> 16; - - if (j + 1 < src_width) { - x = acc & 0xffff; - dest[i] = RGB555 (BLEND (RGB555_R (src[j]), RGB555_R (src[j + 1]), x), - BLEND (RGB555_G (src[j]), RGB555_G (src[j + 1]), x), - BLEND (RGB555_B (src[j]), RGB555_B (src[j + 1]), x)); - } else { - dest[i] = RGB555 (RGB555_R (src[j]), - RGB555_G (src[j]), RGB555_B (src[j])); - } - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_merge_linear_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8, - uint8_t * src2_u8, int n, int x) -{ - uint16_t *dest = (uint16_t *) dest_u8; - uint16_t *src1 = (uint16_t *) src1_u8; - uint16_t *src2 = (uint16_t *) src2_u8; - int i; - - if (x == 0) { - memcpy (dest, src1, n * 2); - } else { - for (i = 0; i < n; i++) { - dest[i] = RGB555 (BLEND (RGB555_R (src1[i]), RGB555_R (src2[i]), x), - BLEND (RGB555_G (src1[i]), RGB555_G (src2[i]), x), - BLEND (RGB555_B (src1[i]), RGB555_B (src2[i]), x)); - } - } -} - -void -vs_scanline_resample_nearest_AYUV64 (uint8_t * dest8, uint8_t * src8, - int src_width, int n, int *accumulator, int increment) -{ - guint16 *dest = (guint16 *) dest8; - guint16 *src = (guint16 *) src8; - int acc = *accumulator; - int i, j; - - for (i = 0; i < n; i++) { - j = (acc + 0x8000) >> 16; - - dest[i * 4 + 0] = src[j * 4 + 0]; - dest[i * 4 + 1] = src[j * 4 + 1]; - dest[i * 4 + 2] = src[j * 4 + 2]; - dest[i * 4 + 3] = src[j * 4 + 3]; - - acc += increment; - } - - *accumulator = acc; -} - -void -vs_scanline_resample_linear_AYUV64 (uint8_t * dest8, uint8_t * src8, - int src_width, int n, int *accumulator, int increment) -{ - guint16 *dest = (guint16 *) dest8; - guint16 *src = (guint16 *) src8; - int acc = *accumulator; - int i; - int j; - int x; - - for (i = 0; i < n; i++) { - j = acc >> 16; - x = (acc & 0xffff) >> 1; - - if (j + 1 < src_width) { - dest[i * 4 + 0] = BLEND15 (src[j * 4 + 0], src[j * 4 + 4], x); - dest[i * 4 + 1] = BLEND15 (src[j * 4 + 1], src[j * 4 + 5], x); - dest[i * 4 + 2] = BLEND15 (src[j * 4 + 2], src[j * 4 + 6], x); - dest[i * 4 + 3] = BLEND15 (src[j * 4 + 3], src[j * 4 + 7], x); - } else { - dest[i * 4 + 0] = src[j * 4 + 0]; - dest[i * 4 + 1] = src[j * 4 + 1]; - dest[i * 4 + 2] = src[j * 4 + 2]; - dest[i * 4 + 3] = src[j * 4 + 3]; - } - acc += increment; - } - - *accumulator = acc; -} diff -Nru gst-plugins-base1.0-1.4.3/gst/videoscale/vs_scanline.h gst-plugins-base1.0-1.6.1/gst/videoscale/vs_scanline.h --- gst-plugins-base1.0-1.4.3/gst/videoscale/vs_scanline.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videoscale/vs_scanline.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/* - * Image Scaling Functions - * Copyright (c) 2005 David A. Schleef - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __VS_SCANLINE_H__ -#define __VS_SCANLINE_H__ - -#include <_stdint.h> -#include - -G_GNUC_INTERNAL void vs_scanline_downsample_Y (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_Y (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_RGBA (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_RGBA (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_RGB (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_YUYV (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_YUYV (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_UYVY (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_UYVY (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_NV12 (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_NV12 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_NV12 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_NV12 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_RGB565 (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB565 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_RGB555 (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB555 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_downsample_Y16 (uint8_t *dest, uint8_t *src, int n); -G_GNUC_INTERNAL void vs_scanline_resample_nearest_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_merge_linear_Y16 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x); - -G_GNUC_INTERNAL void vs_scanline_resample_nearest_AYUV64 (uint8_t * dest, uint8_t * src, - int src_width, int n, int *accumulator, int increment); -G_GNUC_INTERNAL void vs_scanline_resample_linear_AYUV64 (uint8_t * dest, uint8_t * src, - int src_width, int n, int *accumulator, int increment); - -#endif - diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrc.c gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrc.c --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,8 +28,8 @@ * * Example launch line * |[ - * gst-launch -v videotestsrc pattern=snow ! ximagesink - * ]| Shows random noise in an X window. + * gst-launch-1.0 -v videotestsrc pattern=snow ! video/x-raw,width=1280,height=720 ! autovideosink + * ]| Shows random noise in a video window. * */ @@ -74,8 +74,7 @@ PROP_YOFFSET, PROP_FOREGROUND_COLOR, PROP_BACKGROUND_COLOR, - PROP_HORIZONTAL_SPEED, - PROP_LAST + PROP_HORIZONTAL_SPEED }; @@ -151,6 +150,8 @@ {GST_VIDEO_TEST_SRC_BAR, "Bar", "bar"}, {GST_VIDEO_TEST_SRC_PINWHEEL, "Pinwheel", "pinwheel"}, {GST_VIDEO_TEST_SRC_SPOKES, "Spokes", "spokes"}, + {GST_VIDEO_TEST_SRC_GRADIENT, "Gradient", "gradient"}, + {GST_VIDEO_TEST_SRC_COLORS, "Colors", "colors"}, {0, NULL, NULL} }; @@ -183,8 +184,9 @@ DEFAULT_PATTERN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset", "Timestamp offset", - "An offset added to timestamps set on buffers (in ns)", G_MININT64, - G_MAXINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + "An offset added to timestamps set on buffers (in ns)", 0, + (G_MAXLONG == G_MAXINT64) ? G_MAXINT64 : (G_MAXLONG * GST_SECOND - 1), + 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_IS_LIVE, g_param_spec_boolean ("is-live", "Is Live", "Whether to act as a live source", DEFAULT_IS_LIVE, @@ -423,6 +425,12 @@ case GST_VIDEO_TEST_SRC_SPOKES: videotestsrc->make_image = gst_video_test_src_spokes; break; + case GST_VIDEO_TEST_SRC_GRADIENT: + videotestsrc->make_image = gst_video_test_src_gradient; + break; + case GST_VIDEO_TEST_SRC_COLORS: + videotestsrc->make_image = gst_video_test_src_colors; + break; default: g_assert_not_reached (); } @@ -776,7 +784,7 @@ static gboolean gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query) { - gboolean res; + gboolean res = FALSE; GstVideoTestSrc *src; src = GST_VIDEO_TEST_SRC (bsrc); @@ -794,6 +802,23 @@ gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); break; } + case GST_QUERY_LATENCY: + { + if (src->info.fps_n > 0) { + GstClockTime latency; + + latency = + gst_util_uint64_scale (GST_SECOND, src->info.fps_d, + src->info.fps_n); + gst_query_set_latency (query, + gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency, + GST_CLOCK_TIME_NONE); + GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT, + GST_TIME_ARGS (latency)); + res = TRUE; + } + break; + } case GST_QUERY_DURATION:{ if (bsrc->num_buffers != -1) { GstFormat format; @@ -832,7 +857,7 @@ { /* for live sources, sync on the timestamp of the buffer */ if (gst_base_src_is_live (basesrc)) { - GstClockTime timestamp = GST_BUFFER_DTS (buffer); + GstClockTime timestamp = GST_BUFFER_PTS (buffer); if (GST_CLOCK_TIME_IS_VALID (timestamp)) { /* get duration to calculate end time */ @@ -920,11 +945,11 @@ if (!gst_video_frame_map (&frame, &src->info, buffer, GST_MAP_WRITE)) goto invalid_frame; - GST_BUFFER_DTS (buffer) = + GST_BUFFER_PTS (buffer) = src->accum_rtime + src->timestamp_offset + src->running_time; - GST_BUFFER_PTS (buffer) = GST_BUFFER_DTS (buffer); + GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE; - gst_object_sync_values (GST_OBJECT (psrc), GST_BUFFER_DTS (buffer)); + gst_object_sync_values (GST_OBJECT (psrc), GST_BUFFER_PTS (buffer)); src->make_image (src, &frame); diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrc.h gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrc.h --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrc.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -61,9 +61,13 @@ * @GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE: Chroma zone plate * @GST_VIDEO_TEST_SRC_BALL: Moving ball * @GST_VIDEO_TEST_SRC_SMPTE100: SMPTE test pattern (100% color bars) + * @GST_VIDEO_TEST_SRC_SOLID: A solid color, defined by the + * #GstVideoTestSrc:foreground-color property * @GST_VIDEO_TEST_SRC_BAR: Bar with foreground color * @GST_VIDEO_TEST_SRC_PINWHEEL: Pinwheel * @GST_VIDEO_TEST_SRC_SPOKES: Spokes + * @GST_VIDEO_TEST_SRC_GRADIENT: Gradient + * @GST_VIDEO_TEST_SRC_COLORS: All colors * * The test pattern to produce. * @@ -107,7 +111,9 @@ GST_VIDEO_TEST_SRC_SMPTE100, GST_VIDEO_TEST_SRC_BAR, GST_VIDEO_TEST_SRC_PINWHEEL, - GST_VIDEO_TEST_SRC_SPOKES + GST_VIDEO_TEST_SRC_SPOKES, + GST_VIDEO_TEST_SRC_GRADIENT, + GST_VIDEO_TEST_SRC_COLORS } GstVideoTestSrcPattern; typedef struct _GstVideoTestSrc GstVideoTestSrc; @@ -134,6 +140,7 @@ gint y_invert; /* private */ + /* FIXME 2.0: Change type to GstClockTime */ gint64 timestamp_offset; /* base offset */ /* running time and frames for current caps */ diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrcorc-dist.c gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrcorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrcorc-dist.c 2014-09-24 08:19:15.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrcorc-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -150,7 +150,6 @@ int i; orc_union32 *ORC_RESTRICT ptr0; orc_union32 var32; - orc_union32 var33; ptr0 = (orc_union32 *) d1; @@ -158,10 +157,8 @@ var32.i = p1; for (i = 0; i < n; i++) { - /* 1: copyl */ - var33.i = var32.i; - /* 2: storel */ - ptr0[i] = var33; + /* 1: storel */ + ptr0[i] = var32; } } @@ -174,7 +171,6 @@ int n = ex->n; orc_union32 *ORC_RESTRICT ptr0; orc_union32 var32; - orc_union32 var33; ptr0 = (orc_union32 *) ex->arrays[0]; @@ -182,10 +178,8 @@ var32.i = ex->params[24]; for (i = 0; i < n; i++) { - /* 1: copyl */ - var33.i = var32.i; - /* 2: storel */ - ptr0[i] = var33; + /* 1: storel */ + ptr0[i] = var32; } } @@ -207,7 +201,7 @@ static const orc_uint8 bc[] = { 1, 9, 28, 118, 105, 100, 101, 111, 95, 116, 101, 115, 116, 95, 115, 114, 99, 95, 111, 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11, - 4, 4, 16, 4, 112, 0, 24, 2, 0, + 4, 4, 16, 4, 128, 0, 24, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_video_test_src_orc_splat_u32); @@ -218,7 +212,7 @@ orc_program_add_destination (p, 4, "d1"); orc_program_add_parameter (p, 4, "p1"); - orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, + orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, ORC_VAR_D1); #endif diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrcorc.orc gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrcorc.orc --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/gstvideotestsrcorc.orc 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/gstvideotestsrcorc.orc 2015-10-22 08:01:34.000000000 +0000 @@ -3,6 +3,6 @@ .dest 4 d1 guint8 .param 4 p1 -copyl d1, p1 +storel d1, p1 diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/Makefile.am gst-plugins-base1.0-1.6.1/gst/videotestsrc/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -22,18 +22,3 @@ generate_sine_table_SOURCES = generate_sine_table.c generate_sine_table_CFLAGS = $(GST_CFLAGS) generate_sine_table_LDADD = $(LIBM) $(GLIB_LIBS) - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideotestsrc_la_SOURCES) \ - $(nodist_libgstvideotestsrc_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \ - -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \ - $(libgstvideotestsrc_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/Makefile.in gst-plugins-base1.0-1.6.1/gst/videotestsrc/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -38,7 +38,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,8 +112,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) EXTRA_PROGRAMS = generate_sine_table$(EXEEXT) subdir = gst/videotestsrc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -126,7 +134,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -143,6 +150,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -268,6 +277,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -328,6 +339,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -357,6 +370,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -384,7 +399,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -399,6 +413,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -488,13 +503,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -547,6 +561,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -603,7 +618,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videotestsrc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/videotestsrc/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -612,7 +626,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: +$(top_srcdir)/common/orc.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -955,6 +969,8 @@ tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -992,21 +1008,6 @@ cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideotestsrc_la_SOURCES) \ - $(nodist_libgstvideotestsrc_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \ - -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \ - $(libgstvideotestsrc_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/videotestsrc.c gst-plugins-base1.0-1.6.1/gst/videotestsrc/videotestsrc.c --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/videotestsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/videotestsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -1186,8 +1186,6 @@ for (i = 0; i < n_lines; i++) { idx = CLAMP (y + i + offset, 0, height - 1); - - GST_DEBUG ("line %d, %d, idx %d", i, y + i + offset, idx); lines[i] = p->lines[idx % n_lines]; } @@ -1198,7 +1196,6 @@ idx = y + i + offset; if (idx > height - 1) break; - GST_DEBUG ("pack line %d", idx); finfo->pack_func (finfo, GST_VIDEO_PACK_FLAG_NONE, lines[i], 0, frame->data, frame->info.stride, frame->info.chroma_site, idx, width); @@ -1336,3 +1333,55 @@ videotestsrc_convert_tmpline (p, frame, j); } } + +void +gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame) +{ + int i; + int j; + paintinfo pi = PAINT_INFO_INIT; + paintinfo *p = π + struct vts_color_struct color; + int w = frame->info.width, h = frame->info.height; + + videotestsrc_setup_paintinfo (v, p, w, h); + + color = p->colors[COLOR_BLACK]; + p->color = &color; + + for (j = 0; j < h; j++) { + int y = j * 255.0 / h; + for (i = 0; i < w; i++) { + p->tmpline_u8[i] = y; + } + videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8, + &p->foreground_color, &p->background_color, w); + videotestsrc_convert_tmpline (p, frame, j); + } +} + +void +gst_video_test_src_colors (GstVideoTestSrc * v, GstVideoFrame * frame) +{ + int i; + int j; + paintinfo pi = PAINT_INFO_INIT; + paintinfo *p = π + struct vts_color_struct color; + int w = frame->info.width, h = frame->info.height; + + videotestsrc_setup_paintinfo (v, p, w, h); + + color = p->colors[COLOR_BLACK]; + p->color = &color; + + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + p->tmpline[i * 4 + 0] = 0xff; + p->tmpline[i * 4 + 1] = ((i * 4096) / w) % 256; + p->tmpline[i * 4 + 2] = (((j * 16) / h) << 4) | ((i * 16) / w); + p->tmpline[i * 4 + 3] = ((j * 4096) / h) % 256; + } + videotestsrc_convert_tmpline (p, frame, j); + } +} diff -Nru gst-plugins-base1.0-1.4.3/gst/videotestsrc/videotestsrc.h gst-plugins-base1.0-1.6.1/gst/videotestsrc/videotestsrc.h --- gst-plugins-base1.0-1.4.3/gst/videotestsrc/videotestsrc.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/videotestsrc/videotestsrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -82,5 +82,7 @@ void gst_video_test_src_bar (GstVideoTestSrc * v, GstVideoFrame *frame); void gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstVideoFrame * frame); void gst_video_test_src_spokes (GstVideoTestSrc * v, GstVideoFrame * frame); +void gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame); +void gst_video_test_src_colors (GstVideoTestSrc * v, GstVideoFrame * frame); #endif diff -Nru gst-plugins-base1.0-1.4.3/gst/volume/gstvolume.c gst-plugins-base1.0-1.6.1/gst/volume/gstvolume.c --- gst-plugins-base1.0-1.4.3/gst/volume/gstvolume.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/volume/gstvolume.c 2015-10-22 08:01:34.000000000 +0000 @@ -30,7 +30,7 @@ * * Example launch line * |[ - * gst-launch -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE + * gst-launch-1.0 -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE * ]| This pipeline shows that the level of audiotestsrc has been halved * (peak values are around -6 dB and RMS around -9 dB) compared to * the same pipeline without the volume element. @@ -250,10 +250,14 @@ self->current_mute = FALSE; self->current_volume = volume; - self->current_vol_i8 = volume * VOLUME_UNITY_INT8; - self->current_vol_i16 = volume * VOLUME_UNITY_INT16; - self->current_vol_i24 = volume * VOLUME_UNITY_INT24; - self->current_vol_i32 = volume * VOLUME_UNITY_INT32; + self->current_vol_i8 = + (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT8); + self->current_vol_i16 = + (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT16); + self->current_vol_i24 = + (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT24); + self->current_vol_i32 = + (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT32); passthrough = (self->current_vol_i16 == VOLUME_UNITY_INT16); } @@ -337,7 +341,7 @@ static void gst_volume_init (GstVolume * self) { - self->mute = DEFAULT_PROP_MUTE;; + self->mute = DEFAULT_PROP_MUTE; self->volume = DEFAULT_PROP_VOLUME; self->tracklist = NULL; diff -Nru gst-plugins-base1.0-1.4.3/gst/volume/gstvolumeorc-dist.c gst-plugins-base1.0-1.6.1/gst/volume/gstvolumeorc-dist.c --- gst-plugins-base1.0-1.4.3/gst/volume/gstvolumeorc-dist.c 2014-09-24 08:19:15.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/volume/gstvolumeorc-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -258,7 +258,7 @@ static const orc_uint8 bc[] = { 1, 9, 32, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 115, 99, 97, 108, 97, 114, 109, 117, 108, 116, 105, 112, 108, 121, 95, 102, 54, - 52, + 52, 95, 110, 115, 11, 8, 8, 18, 8, 214, 0, 0, 24, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); @@ -291,8 +291,8 @@ { orc_union64 tmp; tmp.f = p1; - ex->params[ORC_VAR_P1] = tmp.x2[0]; - ex->params[ORC_VAR_T1] = tmp.x2[1]; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; } func = c->exec; @@ -388,7 +388,7 @@ static const orc_uint8 bc[] = { 1, 9, 32, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 115, 99, 97, 108, 97, 114, 109, 117, 108, 116, 105, 112, 108, 121, 95, 102, 51, - 50, + 50, 95, 110, 115, 11, 4, 4, 17, 4, 202, 0, 0, 24, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); @@ -512,9 +512,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 24, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, - 111, 99, 101, 115, 115, 95, 105, 110, 116, 51, 50, 11, 4, 4, 14, 4, - 27, 0, 0, 0, 16, 4, 20, 8, 178, 32, 0, 24, 147, 32, 32, 16, - 169, 0, 32, 2, 0, + 111, 99, 101, 115, 115, 95, 105, 110, 116, 51, 50, 11, 4, 4, 15, 8, + 27, 0, 0, 0, 0, 0, 0, 0, 16, 4, 20, 8, 178, 32, 0, 24, + 147, 32, 32, 16, 169, 0, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_volume_orc_process_int32); @@ -523,7 +523,7 @@ orc_program_set_name (p, "volume_orc_process_int32"); orc_program_set_backup_function (p, _backup_volume_orc_process_int32); orc_program_add_destination (p, 4, "d1"); - orc_program_add_constant (p, 4, 0x0000001b, "c1"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c1"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); @@ -638,8 +638,8 @@ static const orc_uint8 bc[] = { 1, 9, 30, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 105, 110, 116, 51, 50, 95, 99, 108, 97, 109, - 112, 11, 4, 4, 14, 4, 27, 0, 0, 0, 16, 4, 20, 8, 178, 32, - 0, 24, 147, 32, 32, 16, 170, 0, 32, 2, 0, + 112, 11, 4, 4, 15, 8, 27, 0, 0, 0, 0, 0, 0, 0, 16, 4, + 20, 8, 178, 32, 0, 24, 147, 32, 32, 16, 170, 0, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, @@ -650,7 +650,7 @@ orc_program_set_backup_function (p, _backup_volume_orc_process_int32_clamp); orc_program_add_destination (p, 4, "d1"); - orc_program_add_constant (p, 4, 0x0000001b, "c1"); + orc_program_add_constant_int64 (p, 8, 0x000000000000001bULL, "c1"); orc_program_add_parameter (p, 4, "p1"); orc_program_add_temporary (p, 8, "t1"); @@ -1016,7 +1016,7 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 23, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, - 111, 99, 101, 115, 115, 95, 105, 110, 116, 56, 11, 1, 1, 14, 4, 3, + 111, 99, 101, 115, 115, 95, 105, 110, 116, 56, 11, 1, 1, 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 174, 32, 0, 24, 94, 32, 32, 16, 157, 0, 32, 2, 0, }; @@ -1027,7 +1027,7 @@ orc_program_set_name (p, "volume_orc_process_int8"); orc_program_set_backup_function (p, _backup_volume_orc_process_int8); orc_program_add_destination (p, 1, "d1"); - orc_program_add_constant (p, 4, 0x00000003, "c1"); + orc_program_add_constant (p, 2, 0x00000003, "c1"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); @@ -1142,8 +1142,8 @@ static const orc_uint8 bc[] = { 1, 9, 29, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 105, 110, 116, 56, 95, 99, 108, 97, 109, - 112, - 11, 1, 1, 14, 4, 3, 0, 0, 0, 16, 1, 20, 2, 174, 32, 0, + 112, + 11, 1, 1, 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 174, 32, 0, 24, 94, 32, 32, 16, 159, 0, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); @@ -1155,7 +1155,7 @@ orc_program_set_backup_function (p, _backup_volume_orc_process_int8_clamp); orc_program_add_destination (p, 1, "d1"); - orc_program_add_constant (p, 4, 0x00000003, "c1"); + orc_program_add_constant (p, 2, 0x00000003, "c1"); orc_program_add_parameter (p, 1, "p1"); orc_program_add_temporary (p, 2, "t1"); @@ -1284,8 +1284,8 @@ { orc_union64 tmp; tmp.f = p1; - ex->params[ORC_VAR_P1] = tmp.x2[0]; - ex->params[ORC_VAR_T1] = tmp.x2[1]; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; } func = c->exec; @@ -1564,7 +1564,7 @@ static const orc_uint8 bc[] = { 1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 102, 54, 52, 95, 49, 99, 104, 11, 8, 8, 12, 8, 8, 214, 0, 0, 4, 2, 0, }; @@ -1714,7 +1714,7 @@ static const orc_uint8 bc[] = { 1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 102, 51, 50, 95, 49, 99, 104, 11, 4, 4, 12, 8, 8, 20, 4, 225, 32, 4, 202, 0, 0, 32, 2, 0, }; @@ -1901,7 +1901,7 @@ static const orc_uint8 bc[] = { 1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 102, 51, 50, 95, 50, 99, 104, 11, 8, 8, 12, 8, 8, 20, 4, 20, 8, 225, 32, 4, 194, 33, 32, 32, 21, 1, 202, 0, 0, 33, 2, 0, @@ -2064,7 +2064,7 @@ static const orc_uint8 bc[] = { 1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 105, 110, 116, 51, 50, 95, 49, 99, 104, 11, 4, 4, 12, 8, 8, 20, 8, 223, 32, 0, 214, 32, 32, 4, 222, 0, 32, 2, 0, }; @@ -2255,7 +2255,7 @@ static const orc_uint8 bc[] = { 1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 105, 110, 116, 49, 54, 95, 49, 99, 104, 11, 2, 2, 12, 8, 8, 20, 4, 20, 4, 153, 32, 0, 211, 32, 32, 225, 33, 4, 202, 32, 32, 33, 210, 32, 32, 165, 0, 32, 2, 0, @@ -2508,7 +2508,7 @@ static const orc_uint8 bc[] = { 1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 105, 110, 116, 49, 54, 95, 50, 99, 104, 11, 4, 4, 12, 8, 8, 20, 8, 20, 4, 20, 8, 21, 1, 153, 32, 0, 21, 1, 211, 32, 32, 225, 33, 4, 194, 34, 33, 33, 21, 1, 202, 34, 34, 32, 21, 1, 210, @@ -2723,7 +2723,7 @@ static const orc_uint8 bc[] = { 1, 9, 38, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 105, 110, 116, 56, 95, 49, 99, 104, 11, 1, 1, 12, 8, 8, 20, 2, 20, 4, 20, 4, 149, 32, 0, 153, 33, 32, 211, 33, 33, 225, 34, 4, 202, 33, 33, 34, 210, 33, 33, 163, 32, 33, 159, 0, 32, 2, 0, @@ -2998,7 +2998,7 @@ static const orc_uint8 bc[] = { 1, 9, 38, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114, 111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101, - 100, + 100, 95, 105, 110, 116, 56, 95, 50, 99, 104, 11, 2, 2, 12, 8, 8, 20, 4, 20, 8, 20, 8, 21, 1, 149, 32, 0, 21, 1, 153, 33, 32, 21, 1, 211, 33, 33, 225, 32, 4, 194, 34, 32, 32, 21, 1, 202, 33, 33, diff -Nru gst-plugins-base1.0-1.4.3/gst/volume/Makefile.am gst-plugins-base1.0-1.6.1/gst/volume/Makefile.am --- gst-plugins-base1.0-1.4.3/gst/volume/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/volume/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -15,18 +15,3 @@ libgstvolume_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = gstvolume.h - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvolume -:SHARED libgstvolume \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvolume_la_SOURCES) \ - $(nodist_libgstvolume_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \ - -:LDFLAGS $(libgstvolume_la_LDFLAGS) \ - $(libgstvolume_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst/volume/Makefile.in gst-plugins-base1.0-1.6.1/gst/volume/Makefile.in --- gst-plugins-base1.0-1.4.3/gst/volume/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst/volume/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -38,7 +38,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -102,8 +112,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) subdir = gst/volume ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -125,7 +133,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -142,6 +149,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -253,6 +262,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \ + $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -313,6 +324,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -342,6 +355,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -369,7 +384,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -384,6 +398,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -473,13 +488,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -532,6 +546,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -584,7 +599,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/volume/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst/volume/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -593,7 +607,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak: +$(top_srcdir)/common/orc.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -909,6 +923,8 @@ tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -946,21 +962,6 @@ cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstvolume -:SHARED libgstvolume \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvolume_la_SOURCES) \ - $(nodist_libgstvolume_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \ - -:LDFLAGS $(libgstvolume_la_LDFLAGS) \ - $(libgstvolume_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/allocators.h gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/allocators.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/allocators.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/allocators.h 2015-10-22 08:01:34.000000000 +0000 @@ -23,6 +23,7 @@ #define __GST_ALLOCATORS_H__ #include +#include #endif /* __GST_ALLOCATORS_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstdmabuf.c gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstdmabuf.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstdmabuf.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstdmabuf.c 2015-10-22 08:01:34.000000000 +0000 @@ -22,6 +22,7 @@ #include "config.h" #endif +#include "gstfdmemory.h" #include "gstdmabuf.h" /** @@ -37,166 +38,21 @@ #include #endif -/* - * GstDmaBufMemory - * @fd: the file descriptor associated this memory - * @data: mmapped address - * @mmapping_flags: mmapping flags - * @mmap_count: mmapping counter - * @lock: a mutex to make mmapping thread safe - */ -typedef struct -{ - GstMemory mem; - - gint fd; - gpointer data; - gint mmapping_flags; - gint mmap_count; - GMutex lock; -} GstDmaBufMemory; - GST_DEBUG_CATEGORY_STATIC (dmabuf_debug); #define GST_CAT_DEFAULT dmabuf_debug -static void -gst_dmabuf_allocator_free (GstAllocator * allocator, GstMemory * gmem) -{ -#ifdef HAVE_MMAP - GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem; - - if (mem->data) { - g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC, mem); - munmap ((void *) mem->data, gmem->maxsize); - } - if (mem->fd >= 0 && gmem->parent == NULL) - close (mem->fd); - g_mutex_clear (&mem->lock); - g_slice_free (GstDmaBufMemory, mem); - GST_DEBUG ("%p: freed", mem); -#endif -} - -static gpointer -gst_dmabuf_mem_map (GstMemory * gmem, gsize maxsize, GstMapFlags flags) -{ -#ifdef HAVE_MMAP - GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem; - gint prot; - gpointer ret = NULL; - - if (gmem->parent) - return gst_dmabuf_mem_map (gmem->parent, maxsize, flags); - - g_mutex_lock (&mem->lock); - - prot = flags & GST_MAP_READ ? PROT_READ : 0; - prot |= flags & GST_MAP_WRITE ? PROT_WRITE : 0; - - /* do not mmap twice the buffer */ - if (mem->data) { - /* only return address if mapping flags are a subset - * of the previous flags */ - if ((mem->mmapping_flags & prot) == prot) { - ret = mem->data; - mem->mmap_count++; - } - - goto out; - } - - if (mem->fd != -1) { - mem->data = mmap (0, gmem->maxsize, prot, MAP_SHARED, mem->fd, 0); - if (mem->data == MAP_FAILED) { - mem->data = NULL; - GST_ERROR ("%p: fd %d: mmap failed: %s", mem, mem->fd, - g_strerror (errno)); - goto out; - } - } - - GST_DEBUG ("%p: fd %d: mapped %p", mem, mem->fd, mem->data); - - if (mem->data) { - mem->mmapping_flags = prot; - mem->mmap_count++; - ret = mem->data; - } - -out: - g_mutex_unlock (&mem->lock); - return ret; -#else /* !HAVE_MMAP */ - return FALSE; -#endif -} - -static void -gst_dmabuf_mem_unmap (GstMemory * gmem) -{ -#ifdef HAVE_MMAP - GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem; - - if (gmem->parent) - return gst_dmabuf_mem_unmap (gmem->parent); - - g_mutex_lock (&mem->lock); - - if (mem->data && !(--mem->mmap_count)) { - munmap ((void *) mem->data, gmem->maxsize); - mem->data = NULL; - mem->mmapping_flags = 0; - GST_DEBUG ("%p: fd %d unmapped", mem, mem->fd); - } - g_mutex_unlock (&mem->lock); -#endif -} - -static GstMemory * -gst_dmabuf_mem_share (GstMemory * gmem, gssize offset, gssize size) -{ -#ifdef HAVE_MMAP - GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem; - GstDmaBufMemory *sub; - GstMemory *parent; - - GST_DEBUG ("%p: share %" G_GSSIZE_FORMAT " %" G_GSIZE_FORMAT, mem, offset, - size); - - /* find the real parent */ - if ((parent = mem->mem.parent) == NULL) - parent = (GstMemory *) mem; - - if (size == -1) - size = gmem->maxsize - offset; - - sub = g_slice_new0 (GstDmaBufMemory); - /* the shared memory is always readonly */ - gst_memory_init (GST_MEMORY_CAST (sub), GST_MINI_OBJECT_FLAGS (parent) | - GST_MINI_OBJECT_FLAG_LOCK_READONLY, mem->mem.allocator, parent, - mem->mem.maxsize, mem->mem.align, mem->mem.offset + offset, size); - - sub->fd = mem->fd; - g_mutex_init (&sub->lock); - - return GST_MEMORY_CAST (sub); -#else /* !HAVE_MMAP */ - return NULL; -#endif -} - typedef struct { - GstAllocator parent; + GstFdAllocator parent; } GstDmaBufAllocator; typedef struct { - GstAllocatorClass parent_class; + GstFdAllocatorClass parent_class; } GstDmaBufAllocatorClass; GType dmabuf_mem_allocator_get_type (void); -G_DEFINE_TYPE (GstDmaBufAllocator, dmabuf_mem_allocator, GST_TYPE_ALLOCATOR); +G_DEFINE_TYPE (GstDmaBufAllocator, dmabuf_mem_allocator, GST_TYPE_FD_ALLOCATOR); #define GST_TYPE_DMABUF_ALLOCATOR (dmabuf_mem_allocator_get_type()) #define GST_IS_DMABUF_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DMABUF_ALLOCATOR)) @@ -204,12 +60,6 @@ static void dmabuf_mem_allocator_class_init (GstDmaBufAllocatorClass * klass) { - GstAllocatorClass *allocator_class; - - allocator_class = (GstAllocatorClass *) klass; - - allocator_class->alloc = NULL; - allocator_class->free = gst_dmabuf_allocator_free; } static void @@ -218,12 +68,6 @@ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator); alloc->mem_type = GST_ALLOCATOR_DMABUF; - alloc->mem_map = gst_dmabuf_mem_map; - alloc->mem_unmap = gst_dmabuf_mem_unmap; - alloc->mem_share = gst_dmabuf_mem_share; - /* Use the default, fallback copy function */ - - GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC); } /** @@ -247,7 +91,7 @@ /** * gst_dmabuf_allocator_alloc: - * @allocator: (allow-none): allocator to be used for this memory + * @allocator: allocator to be used for this memory * @fd: dmabuf file descriptor * @size: memory size * @@ -262,30 +106,9 @@ GstMemory * gst_dmabuf_allocator_alloc (GstAllocator * allocator, gint fd, gsize size) { -#ifdef HAVE_MMAP - GstDmaBufMemory *mem; - - if (!GST_IS_DMABUF_ALLOCATOR (allocator)) { - GST_WARNING ("it isn't the correct allocator for dmabuf"); - return NULL; - } - - GST_DEBUG ("alloc from allocator %p", allocator); - - mem = g_slice_new0 (GstDmaBufMemory); + g_return_val_if_fail (GST_IS_DMABUF_ALLOCATOR (allocator), NULL); - gst_memory_init (GST_MEMORY_CAST (mem), 0, allocator, NULL, size, 0, 0, size); - - mem->fd = fd; - g_mutex_init (&mem->lock); - - GST_DEBUG ("%p: fd: %d size %" G_GSIZE_FORMAT, mem, mem->fd, - mem->mem.maxsize); - - return (GstMemory *) mem; -#else /* !HAVE_MMAP */ - return NULL; -#endif + return gst_fd_allocator_alloc (allocator, fd, size, GST_FD_MEMORY_FLAG_NONE); } /** @@ -294,18 +117,18 @@ * * Return the file descriptor associated with @mem. * - * Returns: the file descriptor associated with the memory, or -1 + * Returns: the file descriptor associated with the memory, or -1. The file + * descriptor is still owned by the GstMemory. Use dup to take a copy + * if you intend to use it beyond the lifetime of this GstMemory. * * Since: 1.2 */ gint gst_dmabuf_memory_get_fd (GstMemory * mem) { - GstDmaBufMemory *dbmem = (GstDmaBufMemory *) mem; - g_return_val_if_fail (gst_is_dmabuf_memory (mem), -1); - return dbmem->fd; + return gst_fd_memory_get_fd (mem); } /** diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstfdmemory.c gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstfdmemory.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstfdmemory.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstfdmemory.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,311 @@ +/* GStreamer fd backed memory + * Copyright (C) 2013 Linaro SA + * Author: Benjamin Gaignard for Linaro. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for mordetails. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:gstfdmemory + * @short_description: Memory wrapper for fd backed memory + * @see_also: #GstMemory + * + * Since: 1.4 + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstfdmemory.h" + +#ifdef HAVE_MMAP +#include +#include +#endif + +typedef struct +{ + GstMemory mem; + + GstFdMemoryFlags flags; + gint fd; + gpointer data; + gint mmapping_flags; + gint mmap_count; + GMutex lock; +} GstFdMemory; + +static void +gst_fd_mem_free (GstAllocator * allocator, GstMemory * gmem) +{ +#ifdef HAVE_MMAP + GstFdMemory *mem = (GstFdMemory *) gmem; + + if (mem->data) { + if (!(mem->flags & GST_FD_MEMORY_FLAG_KEEP_MAPPED)) + g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC, + mem); + + munmap ((void *) mem->data, gmem->maxsize); + } + if (mem->fd >= 0 && gmem->parent == NULL) + close (mem->fd); + g_mutex_clear (&mem->lock); + g_slice_free (GstFdMemory, mem); + GST_DEBUG ("%p: freed", mem); +#endif +} + +static gpointer +gst_fd_mem_map (GstMemory * gmem, gsize maxsize, GstMapFlags flags) +{ +#ifdef HAVE_MMAP + GstFdMemory *mem = (GstFdMemory *) gmem; + gint prot; + gpointer ret = NULL; + + if (gmem->parent) + return gst_fd_mem_map (gmem->parent, maxsize, flags); + + prot = flags & GST_MAP_READ ? PROT_READ : 0; + prot |= flags & GST_MAP_WRITE ? PROT_WRITE : 0; + + g_mutex_lock (&mem->lock); + /* do not mmap twice the buffer */ + if (mem->data) { + /* only return address if mapping flags are a subset + * of the previous flags */ + if ((mem->mmapping_flags & prot) == prot) { + ret = mem->data; + mem->mmap_count++; + } + + goto out; + } + + if (mem->fd != -1) { + gint flags; + + flags = + (mem->flags & GST_FD_MEMORY_FLAG_MAP_PRIVATE) ? MAP_PRIVATE : + MAP_SHARED; + + mem->data = mmap (0, gmem->maxsize, prot, flags, mem->fd, 0); + if (mem->data == MAP_FAILED) { + mem->data = NULL; + GST_ERROR ("%p: fd %d: mmap failed: %s", mem, mem->fd, + g_strerror (errno)); + goto out; + } + } + + GST_DEBUG ("%p: fd %d: mapped %p", mem, mem->fd, mem->data); + + if (mem->data) { + mem->mmapping_flags = prot; + mem->mmap_count++; + ret = mem->data; + } + +out: + g_mutex_unlock (&mem->lock); + return ret; +#else /* !HAVE_MMAP */ + return FALSE; +#endif +} + +static void +gst_fd_mem_unmap (GstMemory * gmem) +{ +#ifdef HAVE_MMAP + GstFdMemory *mem = (GstFdMemory *) gmem; + + if (gmem->parent) + return gst_fd_mem_unmap (gmem->parent); + + if (mem->flags & GST_FD_MEMORY_FLAG_KEEP_MAPPED) + return; + + g_mutex_lock (&mem->lock); + if (mem->data && !(--mem->mmap_count)) { + munmap ((void *) mem->data, gmem->maxsize); + mem->data = NULL; + mem->mmapping_flags = 0; + GST_DEBUG ("%p: fd %d unmapped", mem, mem->fd); + } + g_mutex_unlock (&mem->lock); +#endif +} + +static GstMemory * +gst_fd_mem_share (GstMemory * gmem, gssize offset, gssize size) +{ +#ifdef HAVE_MMAP + GstFdMemory *mem = (GstFdMemory *) gmem; + GstFdMemory *sub; + GstMemory *parent; + + GST_DEBUG ("%p: share %" G_GSSIZE_FORMAT " %" G_GSIZE_FORMAT, mem, offset, + size); + + /* find the real parent */ + if ((parent = mem->mem.parent) == NULL) + parent = (GstMemory *) mem; + + if (size == -1) + size = gmem->maxsize - offset; + + sub = g_slice_new0 (GstFdMemory); + /* the shared memory is always readonly */ + gst_memory_init (GST_MEMORY_CAST (sub), GST_MINI_OBJECT_FLAGS (parent) | + GST_MINI_OBJECT_FLAG_LOCK_READONLY, mem->mem.allocator, parent, + mem->mem.maxsize, mem->mem.align, mem->mem.offset + offset, size); + + sub->fd = mem->fd; + g_mutex_init (&sub->lock); + + return GST_MEMORY_CAST (sub); +#else /* !HAVE_MMAP */ + return NULL; +#endif +} + +G_DEFINE_TYPE (GstFdAllocator, gst_fd_allocator, GST_TYPE_ALLOCATOR); + +static void +gst_fd_allocator_class_init (GstFdAllocatorClass * klass) +{ + GstAllocatorClass *allocator_class; + + allocator_class = (GstAllocatorClass *) klass; + + allocator_class->alloc = NULL; + allocator_class->free = gst_fd_mem_free; + +} + +static void +gst_fd_allocator_init (GstFdAllocator * allocator) +{ + GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator); + + alloc->mem_type = GST_ALLOCATOR_FD; + + alloc->mem_map = gst_fd_mem_map; + alloc->mem_unmap = gst_fd_mem_unmap; + alloc->mem_share = gst_fd_mem_share; + + GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC); +} + +/** + * gst_fd_allocator_new: + * + * Return a new fd allocator. + * + * Returns: (transfer full): a new fd allocator, or NULL if the allocator + * isn't available. Use gst_object_unref() to release the allocator after + * usage + * + * Since: 1.6 + */ +GstAllocator * +gst_fd_allocator_new (void) +{ + return g_object_new (GST_TYPE_FD_ALLOCATOR, NULL); +} + +/** + * gst_fd_allocator_alloc: + * @allocator: allocator to be used for this memory + * @fd: file descriptor + * @size: memory size + * @flags: extra #GstFdMemoryFlags + * + * Return a %GstMemory that wraps a generic file descriptor. + * + * Returns: (transfer full): a GstMemory based on @allocator. + * When the buffer will be released the allocator will close the @fd. + * The memory is only mmapped on gst_buffer_mmap() request. + * + * Since: 1.6 + */ +GstMemory * +gst_fd_allocator_alloc (GstAllocator * allocator, gint fd, gsize size, + GstFdMemoryFlags flags) +{ +#ifdef HAVE_MMAP + GstFdMemory *mem; + + g_return_val_if_fail (GST_IS_FD_ALLOCATOR (allocator), NULL); + + mem = g_slice_new0 (GstFdMemory); + gst_memory_init (GST_MEMORY_CAST (mem), 0, GST_ALLOCATOR_CAST (allocator), + NULL, size, 0, 0, size); + + mem->flags = flags; + mem->fd = fd; + g_mutex_init (&mem->lock); + + GST_DEBUG ("%p: fd: %d size %" G_GSIZE_FORMAT, mem, mem->fd, + mem->mem.maxsize); + + return (GstMemory *) mem; +#else /* !HAVE_MMAP */ + return NULL; +#endif +} + +/** + * gst_is_fd_memory: + * @mem: #GstMemory + * + * Check if @mem is memory backed by an fd + * + * Returns: %TRUE when @mem has an fd that can be retrieved with + * gst_fd_memory_get_fd(). + * + * Since: 1.6 + */ +gboolean +gst_is_fd_memory (GstMemory * mem) +{ + g_return_val_if_fail (mem != NULL, FALSE); + + return GST_IS_FD_ALLOCATOR (mem->allocator); +} + +/** + * gst_fd_memory_get_fd: + * @mem: #GstMemory + * + * Get the fd from @mem. Call gst_is_fd_memory() to check if @mem has + * an fd. + * + * Returns: the fd of @mem or -1 when there is no fd on @mem + * + * Since: 1.6 + */ +gint +gst_fd_memory_get_fd (GstMemory * mem) +{ + g_return_val_if_fail (mem != NULL, -1); + g_return_val_if_fail (GST_IS_FD_ALLOCATOR (mem->allocator), -1); + + return ((GstFdMemory *) mem)->fd; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstfdmemory.h gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstfdmemory.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/gstfdmemory.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/gstfdmemory.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,87 @@ +/* GStreamer fd memory + * Copyright (C) 2013 Linaro SA + * Author: Benjamin Gaignard for Linaro. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_FD_ALLOCATOR_H__ +#define __GST_FD_ALLOCATOR_H__ + +#include + +G_BEGIN_DECLS + +typedef struct _GstFdAllocator GstFdAllocator; +typedef struct _GstFdAllocatorClass GstFdAllocatorClass; + +#define GST_ALLOCATOR_FD "fd" + +#define GST_TYPE_FD_ALLOCATOR (gst_fd_allocator_get_type()) +#define GST_IS_FD_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_FD_ALLOCATOR)) +#define GST_IS_FD_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_FD_ALLOCATOR)) +#define GST_FD_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_FD_ALLOCATOR, GstFdAllocatorClass)) +#define GST_FD_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_FD_ALLOCATOR, GstFdAllocator)) +#define GST_FD_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_FD_ALLOCATOR, GstFdAllocatorClass)) +#define GST_FD_ALLOCATOR_CAST(obj) ((GstFdAllocator *)(obj)) + +/** + * GstFdMemoryFlags: + * @GST_FD_MEMORY_FLAG_NONE: no flag + * @GST_FD_MEMORY_FLAG_KEEP_MAPPED: once the memory is mapped, + * keep it mapped until the memory is destroyed. + * @GST_FD_MEMORY_FLAG_MAP_PRIVATE: do a private mapping instead of + * the default shared mapping. + * + * Various flags to control the operation of the fd backed memory. + * + * Since: 1.6 + */ +typedef enum { + GST_FD_MEMORY_FLAG_NONE = 0, + GST_FD_MEMORY_FLAG_KEEP_MAPPED = (1 << 0), + GST_FD_MEMORY_FLAG_MAP_PRIVATE = (1 << 1), +} GstFdMemoryFlags; + +/** + * GstFdAllocator: + * + * Base class for allocators with fd-backed memory + * + * Since: 1.6 + */ +struct _GstFdAllocator +{ + GstAllocator parent; +}; + +struct _GstFdAllocatorClass +{ + GstAllocatorClass parent_class; +}; + +GType gst_fd_allocator_get_type (void); + +GstAllocator * gst_fd_allocator_new (void); +GstMemory * gst_fd_allocator_alloc (GstAllocator * allocator, gint fd, + gsize size, GstFdMemoryFlags flags); + +gboolean gst_is_fd_memory (GstMemory *mem); +gint gst_fd_memory_get_fd (GstMemory *mem); + +G_END_DECLS + +#endif /* __GST_FD_ALLOCATOR_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -4,11 +4,13 @@ libgstallocators_@GST_API_VERSION@_include_HEADERS = \ allocators.h \ + gstfdmemory.h \ gstdmabuf.h noinst_HEADERS = libgstallocators_@GST_API_VERSION@_la_SOURCES = \ + gstfdmemory.c \ gstdmabuf.c libgstallocators_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(LIBM) @@ -23,7 +25,7 @@ gir_cincludes=$(patsubst %,--c-include='gst/allocators/%',$(libgstallocators_@GST_API_VERSION@_include_HEADERS)) GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstAllocators \ --nsversion=@GST_API_VERSION@ \ @@ -61,17 +63,3 @@ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am - androgenizer -:PROJECT libgstallocators -:SHARED libgstallocators-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstallocators_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstallocators_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstallocators_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/allocators \ - -:HEADERS $(libgstallocatorsinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/allocators/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/allocators/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,10 +92,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs/gst/allocators -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp \ - $(libgstallocators_@GST_API_VERSION@_include_HEADERS) \ - $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -106,7 +112,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +128,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstallocators_@GST_API_VERSION@_include_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -162,6 +170,7 @@ libgstallocators_@GST_API_VERSION@_la_DEPENDENCIES = \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libgstallocators_@GST_API_VERSION@_la_OBJECTS = \ + libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo \ libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo libgstallocators_@GST_API_VERSION@_la_OBJECTS = \ $(am_libgstallocators_@GST_API_VERSION@_la_OBJECTS) @@ -219,6 +228,7 @@ HEADERS = $(libgstallocators_@GST_API_VERSION@_include_HEADERS) \ $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -279,6 +289,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -308,6 +320,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -335,7 +349,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -350,6 +363,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -439,13 +453,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -498,6 +511,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -514,10 +528,12 @@ libgstallocators_@GST_API_VERSION@_includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/allocators libgstallocators_@GST_API_VERSION@_include_HEADERS = \ allocators.h \ + gstfdmemory.h \ gstdmabuf.h noinst_HEADERS = libgstallocators_@GST_API_VERSION@_la_SOURCES = \ + gstfdmemory.c \ gstdmabuf.c libgstallocators_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(LIBM) @@ -551,7 +567,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/allocators/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/allocators/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -615,6 +630,7 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -640,6 +656,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo: gstfdmemory.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo -MD -MP -MF $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Tpo -c -o libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo `test -f 'gstfdmemory.c' || echo '$(srcdir)/'`gstfdmemory.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Tpo $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstfdmemory.c' object='libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo `test -f 'gstfdmemory.c' || echo '$(srcdir)/'`gstfdmemory.c + libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo: gstdmabuf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo -MD -MP -MF $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Tpo -c -o libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo `test -f 'gstdmabuf.c' || echo '$(srcdir)/'`gstdmabuf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Tpo $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Plo @@ -885,9 +908,11 @@ uninstall-libgstallocators_@GST_API_VERSION@_includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + @HAVE_INTROSPECTION_TRUE@GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstAllocators \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -914,20 +939,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am - androgenizer -:PROJECT libgstallocators -:SHARED libgstallocators-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstallocators_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstallocators_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstallocators_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/allocators \ - -:HEADERS $(libgstallocatorsinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsink.c gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsink.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsink.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -86,6 +86,7 @@ GstBuffer *preroll; GstCaps *preroll_caps; GstCaps *last_caps; + GstSegment preroll_segment; GstSegment last_segment; gboolean flushing; gboolean unlock; @@ -214,7 +215,7 @@ * @appsink: the appsink element that emitted the signal * * Signal that the end-of-stream has been reached. This signal is emitted from - * the steaming thread. + * the streaming thread. */ gst_app_sink_signals[SIGNAL_EOS] = g_signal_new ("eos", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, @@ -226,7 +227,7 @@ * * Signal that a new preroll sample is available. * - * This signal is emitted from the steaming thread and only when the + * This signal is emitted from the streaming thread and only when the * "emit-signals" property is %TRUE. * * The new preroll sample can be retrieved with the "pull-preroll" action @@ -247,7 +248,7 @@ * * Signal that a new sample is available. * - * This signal is emitted from the steaming thread and only when the + * This signal is emitted from the streaming thread and only when the * "emit-signals" property is %TRUE. * * The new sample can be retrieved with the "pull-sample" action @@ -519,6 +520,7 @@ GST_DEBUG_OBJECT (appsink, "starting"); priv->flushing = FALSE; priv->started = TRUE; + gst_segment_init (&priv->preroll_segment, GST_FORMAT_TIME); gst_segment_init (&priv->last_segment, GST_FORMAT_TIME); g_mutex_unlock (&priv->mutex); @@ -536,8 +538,11 @@ priv->flushing = TRUE; priv->started = FALSE; gst_app_sink_flush_unlocked (appsink); + gst_buffer_replace (&priv->preroll, NULL); gst_caps_replace (&priv->preroll_caps, NULL); gst_caps_replace (&priv->last_caps, NULL); + gst_segment_init (&priv->preroll_segment, GST_FORMAT_UNDEFINED); + gst_segment_init (&priv->last_segment, GST_FORMAT_UNDEFINED); g_mutex_unlock (&priv->mutex); return TRUE; @@ -552,7 +557,8 @@ g_mutex_lock (&priv->mutex); GST_DEBUG_OBJECT (appsink, "receiving CAPS"); g_queue_push_tail (priv->queue, gst_event_new_caps (caps)); - gst_caps_replace (&priv->preroll_caps, caps); + if (!priv->preroll) + gst_caps_replace (&priv->preroll_caps, caps); g_mutex_unlock (&priv->mutex); return TRUE; @@ -569,22 +575,40 @@ g_mutex_lock (&priv->mutex); GST_DEBUG_OBJECT (appsink, "receiving SEGMENT"); g_queue_push_tail (priv->queue, gst_event_ref (event)); + if (!priv->preroll) + gst_event_copy_segment (event, &priv->preroll_segment); g_mutex_unlock (&priv->mutex); break; - case GST_EVENT_EOS: + case GST_EVENT_EOS:{ + gboolean emit = TRUE; + g_mutex_lock (&priv->mutex); GST_DEBUG_OBJECT (appsink, "receiving EOS"); priv->is_eos = TRUE; g_cond_signal (&priv->cond); g_mutex_unlock (&priv->mutex); - /* emit EOS now */ - if (priv->callbacks.eos) - priv->callbacks.eos (appsink, priv->user_data); - else - g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_EOS], 0); + g_mutex_lock (&priv->mutex); + /* wait until all buffers are consumed or we're flushing. + * Otherwise we might signal EOS before all buffers are + * consumed, which is a bit confusing for the application + */ + while (priv->num_buffers > 0 && !priv->flushing) + g_cond_wait (&priv->cond, &priv->mutex); + if (priv->flushing) + emit = FALSE; + g_mutex_unlock (&priv->mutex); + + if (emit) { + /* emit EOS now */ + if (priv->callbacks.eos) + priv->callbacks.eos (appsink, priv->user_data); + else + g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_EOS], 0); + } break; + } case GST_EVENT_FLUSH_START: /* we don't have to do anything here, the base class will call unlock * which will make sure we exit the _render method */ @@ -820,8 +844,8 @@ * * Set the capabilities on the appsink element. This function takes * a copy of the caps structure. After calling this method, the sink will only - * accept caps that match @caps. If @caps is non-fixed, you must check the caps - * on the buffers to get the actual used caps. + * accept caps that match @caps. If @caps is non-fixed, or incomplete, + * you must check the caps on the samples to get the actual used caps. */ void gst_app_sink_set_caps (GstAppSink * appsink, const GstCaps * caps) @@ -1093,7 +1117,8 @@ * This function blocks until a preroll sample or EOS is received or the appsink * element is set to the READY/NULL state. * - * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS. + * Returns: (transfer full): a #GstSample or NULL when the appsink is stopped or EOS. + * Call gst_sample_unref() after usage. */ GstSample * gst_app_sink_pull_preroll (GstAppSink * appsink) @@ -1123,7 +1148,7 @@ g_cond_wait (&priv->cond, &priv->mutex); } sample = - gst_sample_new (priv->preroll, priv->preroll_caps, &priv->last_segment, + gst_sample_new (priv->preroll, priv->preroll_caps, &priv->preroll_segment, NULL); GST_DEBUG_OBJECT (appsink, "we have the preroll sample %p", sample); g_mutex_unlock (&priv->mutex); @@ -1161,7 +1186,8 @@ * If an EOS event was received before any buffers, this function returns * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition. * - * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS. + * Returns: (transfer full): a #GstSample or NULL when the appsink is stopped or EOS. + * Call gst_sample_unref() after usage. */ GstSample * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsink.h gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsink.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsink.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsink.h 2015-10-22 08:01:34.000000000 +0000 @@ -42,17 +42,19 @@ typedef struct _GstAppSinkClass GstAppSinkClass; typedef struct _GstAppSinkPrivate GstAppSinkPrivate; +/* FIXME 2.0: Make the instance/class struct private */ + /** * GstAppSinkCallbacks: (skip) * @eos: Called when the end-of-stream has been reached. This callback - * is called from the steaming thread. + * is called from the streaming thread. * @new_preroll: Called when a new preroll sample is available. - * This callback is called from the steaming thread. + * This callback is called from the streaming thread. * The new preroll sample can be retrieved with * gst_app_sink_pull_preroll() either from this callback * or from any other thread. * @new_sample: Called when a new sample is available. - * This callback is called from the steaming thread. + * This callback is called from the streaming thread. * The new sample can be retrieved with * gst_app_sink_pull_sample() either from this callback * or from any other thread. diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsrc.c gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsrc.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsrc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,17 +24,20 @@ * @see_also: #GstBaseSrc, appsink * * The appsrc element can be used by applications to insert data into a - * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides + * GStreamer pipeline. Unlike most GStreamer elements, appsrc provides * external API functions. * * appsrc can be used by linking with the libgstapp library to access the * methods directly or by using the appsrc action signals. * - * Before operating appsrc, the caps property must be set to a fixed caps + * Before operating appsrc, the caps property must be set to fixed caps * describing the format of the data that will be pushed with appsrc. An * exception to this is when pushing buffers with unknown caps, in which case no * caps should be set. This is typically true of file-like sources that push raw - * byte buffers. + * byte buffers. If you don't want to explicitly set the caps, you can use + * gst_app_src_push_sample. This method gets the caps associated with the + * sample and sets them on the appsrc replacing any previously set caps (if + * different from sample's caps). * * The main way of handing data to the appsrc element is by calling the * gst_app_src_push_buffer() method or by emitting the push-buffer action signal. @@ -62,16 +65,16 @@ * These signals allow the application to operate the appsrc in two different * ways: * - * The push model, in which the application repeatedly calls the push-buffer method - * with a new buffer. Optionally, the queue size in the appsrc can be controlled - * with the enough-data and need-data signals by respectively stopping/starting - * the push-buffer calls. This is a typical mode of operation for the - * stream-type "stream" and "seekable". Use this model when implementing various - * network protocols or hardware devices. + * The push mode, in which the application repeatedly calls the push-buffer/push-sample + * method with a new buffer/sample. Optionally, the queue size in the appsrc + * can be controlled with the enough-data and need-data signals by respectively + * stopping/starting the push-buffer/push-sample calls. This is a typical + * mode of operation for the stream-type "stream" and "seekable". Use this + * mode when implementing various network protocols or hardware devices. * - * The pull model where the need-data signal triggers the next push-buffer call. + * The pull mode, in which the need-data signal triggers the next push-buffer call. * This mode is typically used in the "random-access" stream-type. Use this - * model for file access or other randomly accessable sources. In this mode, a + * mode for file access or other randomly accessable sources. In this mode, a * buffer of exactly the amount of bytes given by the need-data signal should be * pushed into appsrc. * @@ -80,10 +83,10 @@ * For the stream and seekable modes, setting this property is optional but * recommended. * - * When the application is finished pushing data into appsrc, it should call + * When the application has finished pushing data into appsrc, it should call * gst_app_src_end_of_stream() or emit the end-of-stream action signal. After * this call, no more buffers can be pushed into appsrc until a flushing seek - * happened or the state of the appsrc has gone through READY. + * occurs or the state of the appsrc has gone through READY. */ #ifdef HAVE_CONFIG_H @@ -104,14 +107,15 @@ GMutex mutex; GQueue *queue; - GstCaps *caps; + GstCaps *last_caps; + GstCaps *current_caps; + gint64 size; GstAppStreamType stream_type; guint64 max_bytes; GstFormat format; gboolean block; gchar *uri; - gboolean new_caps; gboolean flushing; gboolean started; @@ -143,6 +147,7 @@ /* actions */ SIGNAL_PUSH_BUFFER, SIGNAL_END_OF_STREAM, + SIGNAL_PUSH_SAMPLE, LAST_SIGNAL }; @@ -235,6 +240,8 @@ static GstFlowReturn gst_app_src_push_buffer_action (GstAppSrc * appsrc, GstBuffer * buffer); +static GstFlowReturn gst_app_src_push_sample_action (GstAppSrc * appsrc, + GstSample * sample); static guint gst_app_src_signals[LAST_SIGNAL] = { 0 }; @@ -462,6 +469,33 @@ push_buffer), NULL, NULL, __gst_app_marshal_ENUM__BOXED, GST_TYPE_FLOW_RETURN, 1, GST_TYPE_BUFFER); + /** + * GstAppSrc::push-sample: + * @appsrc: the appsrc + * @sample: a sample from which extract buffer to push + * + * Extract a buffer from the provided sample and adds the extracted buffer + * to the queue of buffers that the appsrc element will + * push to its source pad. This function set the appsrc caps based on the caps + * in the sample and reset the caps if they change. + * Only the caps and the buffer of the provided sample are used and not + * for example the segment in the sample. + * This function does not take ownership of the + * sample so the sample needs to be unreffed after calling this function. + * + * When the block property is TRUE, this function can block until free space + * becomes available in the queue. + * + * Since: 1.6 + * + */ + gst_app_src_signals[SIGNAL_PUSH_SAMPLE] = + g_signal_new ("push-sample", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSrcClass, + push_sample), NULL, NULL, __gst_app_marshal_ENUM__BOXED, + GST_TYPE_FLOW_RETURN, 1, GST_TYPE_SAMPLE); + + /** * GstAppSrc::end-of-stream: * @appsrc: the appsrc @@ -493,10 +527,10 @@ basesrc_class->do_seek = gst_app_src_do_seek; basesrc_class->is_seekable = gst_app_src_is_seekable; basesrc_class->get_size = gst_app_src_do_get_size; - basesrc_class->get_size = gst_app_src_do_get_size; basesrc_class->query = gst_app_src_query; klass->push_buffer = gst_app_src_push_buffer_action; + klass->push_sample = gst_app_src_push_sample_action; klass->end_of_stream = gst_app_src_end_of_stream; g_type_class_add_private (klass, sizeof (GstAppSrcPrivate)); @@ -527,14 +561,28 @@ gst_base_src_set_live (GST_BASE_SRC (appsrc), DEFAULT_PROP_IS_LIVE); } +/* Must be called with priv->mutex */ static void -gst_app_src_flush_queued (GstAppSrc * src) +gst_app_src_flush_queued (GstAppSrc * src, gboolean retain_last_caps) { - GstBuffer *buf; + GstMiniObject *obj; GstAppSrcPrivate *priv = src->priv; + GstCaps *requeue_caps = NULL; + + while (!g_queue_is_empty (priv->queue)) { + obj = g_queue_pop_head (priv->queue); + if (obj) { + if (GST_IS_CAPS (obj) && retain_last_caps) { + gst_caps_replace (&requeue_caps, GST_CAPS_CAST (obj)); + } + gst_mini_object_unref (obj); + } + } + + if (requeue_caps) { + g_queue_push_tail (priv->queue, requeue_caps); + } - while ((buf = g_queue_pop_head (priv->queue))) - gst_buffer_unref (buf); priv->queued_bytes = 0; } @@ -545,9 +593,13 @@ GstAppSrcPrivate *priv = appsrc->priv; GST_OBJECT_LOCK (appsrc); - if (priv->caps) { - gst_caps_unref (priv->caps); - priv->caps = NULL; + if (priv->current_caps) { + gst_caps_unref (priv->current_caps); + priv->current_caps = NULL; + } + if (priv->last_caps) { + gst_caps_unref (priv->last_caps); + priv->last_caps = NULL; } if (priv->notify) { priv->notify (priv->user_data); @@ -556,7 +608,10 @@ priv->notify = NULL; GST_OBJECT_UNLOCK (appsrc); - gst_app_src_flush_queued (appsrc); + + g_mutex_lock (&priv->mutex); + gst_app_src_flush_queued (appsrc, FALSE); + g_mutex_unlock (&priv->mutex); G_OBJECT_CLASS (parent_class)->dispose (obj); } @@ -583,7 +638,7 @@ GstCaps *caps; GST_OBJECT_LOCK (appsrc); - if ((caps = appsrc->priv->caps)) + if ((caps = appsrc->priv->current_caps)) gst_caps_ref (caps); GST_OBJECT_UNLOCK (appsrc); @@ -716,10 +771,13 @@ gst_app_src_send_event (GstElement * element, GstEvent * event) { GstAppSrc *appsrc = GST_APP_SRC_CAST (element); + GstAppSrcPrivate *priv = appsrc->priv; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_STOP: - gst_app_src_flush_queued (appsrc); + g_mutex_lock (&priv->mutex); + gst_app_src_flush_queued (appsrc, TRUE); + g_mutex_unlock (&priv->mutex); break; default: break; @@ -767,7 +825,6 @@ g_mutex_lock (&priv->mutex); GST_DEBUG_OBJECT (appsrc, "starting"); - priv->new_caps = FALSE; priv->started = TRUE; /* set the offset to -1 so that we always do a first seek. This is only used * in random-access mode. */ @@ -791,7 +848,7 @@ priv->is_eos = FALSE; priv->flushing = TRUE; priv->started = FALSE; - gst_app_src_flush_queued (appsrc); + gst_app_src_flush_queued (appsrc, TRUE); g_cond_broadcast (&priv->cond); g_mutex_unlock (&priv->mutex); @@ -844,10 +901,10 @@ /* overwrite with our values when we need to */ g_mutex_lock (&priv->mutex); - if (priv->min_latency != -1) + if (priv->min_latency != -1) { min = priv->min_latency; - if (priv->max_latency != -1) max = priv->max_latency; + } g_mutex_unlock (&priv->mutex); gst_query_set_latency (query, live, min, max); @@ -888,13 +945,13 @@ desired_position = segment->position; - GST_DEBUG_OBJECT (appsrc, "seeking to %" G_GINT64_FORMAT ", format %s", - desired_position, gst_format_get_name (segment->format)); - /* no need to try to seek in streaming mode */ if (priv->stream_type == GST_APP_STREAM_TYPE_STREAM) return TRUE; + GST_DEBUG_OBJECT (appsrc, "seeking to %" G_GINT64_FORMAT ", format %s", + desired_position, gst_format_get_name (segment->format)); + if (priv->callbacks.seek_data) res = priv->callbacks.seek_data (appsrc, desired_position, priv->user_data); else { @@ -911,7 +968,9 @@ if (res) { GST_DEBUG_OBJECT (appsrc, "flushing queue"); - gst_app_src_flush_queued (appsrc); + g_mutex_lock (&priv->mutex); + gst_app_src_flush_queued (appsrc, TRUE); + g_mutex_unlock (&priv->mutex); priv->is_eos = FALSE; } else { GST_WARNING_OBJECT (appsrc, "seek failed"); @@ -978,7 +1037,7 @@ GstCaps *caps; GST_OBJECT_LOCK (basesrc); - caps = priv->caps ? gst_caps_ref (priv->caps) : NULL; + caps = priv->current_caps ? gst_caps_ref (priv->current_caps) : NULL; GST_OBJECT_UNLOCK (basesrc); /* Avoid deadlock by unlocking mutex @@ -1003,7 +1062,6 @@ gboolean result; g_mutex_lock (&priv->mutex); - priv->new_caps = FALSE; result = gst_app_src_do_negotiate (basesrc); g_mutex_unlock (&priv->mutex); return result; @@ -1059,10 +1117,25 @@ /* return data as long as we have some */ if (!g_queue_is_empty (priv->queue)) { guint buf_size; + GstMiniObject *obj = g_queue_pop_head (priv->queue); + + if (!GST_IS_BUFFER (obj)) { + GstCaps *next_caps = GST_CAPS (obj); + gboolean caps_changed = TRUE; + + if (next_caps && priv->current_caps) + caps_changed = !gst_caps_is_equal (next_caps, priv->current_caps); + else + caps_changed = (next_caps != priv->current_caps); + + gst_caps_replace (&priv->current_caps, next_caps); - if (priv->new_caps) { - priv->new_caps = FALSE; - gst_app_src_do_negotiate (bsrc); + if (next_caps) { + gst_caps_unref (next_caps); + } + + if (caps_changed) + gst_app_src_do_negotiate (bsrc); /* Lock has released so now may need *- flushing @@ -1070,10 +1143,12 @@ *- check queue has data */ if (G_UNLIKELY (priv->flushing)) goto flushing; - /* Contiue checks caps and queue */ + + /* Continue checks caps and queue */ continue; } - *buf = g_queue_pop_head (priv->queue); + + *buf = GST_BUFFER (obj); buf_size = gst_buffer_get_size (*buf); GST_DEBUG_OBJECT (appsrc, "we have buffer %p of size %u", *buf, buf_size); @@ -1161,8 +1236,8 @@ void gst_app_src_set_caps (GstAppSrc * appsrc, const GstCaps * caps) { - GstCaps *old; GstAppSrcPrivate *priv; + gboolean caps_changed; g_return_if_fail (GST_IS_APP_SRC (appsrc)); @@ -1171,16 +1246,22 @@ g_mutex_lock (&priv->mutex); GST_OBJECT_LOCK (appsrc); - GST_DEBUG_OBJECT (appsrc, "setting caps to %" GST_PTR_FORMAT, caps); - if ((old = priv->caps) != caps) { - if (caps) - priv->caps = gst_caps_copy (caps); - else - priv->caps = NULL; - if (old) - gst_caps_unref (old); - priv->new_caps = TRUE; + if (caps && priv->last_caps) + caps_changed = !gst_caps_is_equal (caps, priv->last_caps); + else + caps_changed = (caps != priv->last_caps); + + if (caps_changed) { + GstCaps *new_caps; + new_caps = caps ? gst_caps_copy (caps) : NULL; + GST_DEBUG_OBJECT (appsrc, "setting caps to %" GST_PTR_FORMAT, caps); + if (priv->queue->tail != NULL && GST_IS_CAPS (priv->queue->tail->data)) { + gst_caps_unref (g_queue_pop_tail (priv->queue)); + } + g_queue_push_tail (priv->queue, new_caps); + gst_caps_replace (&priv->last_caps, new_caps); } + GST_OBJECT_UNLOCK (appsrc); g_mutex_unlock (&priv->mutex); @@ -1197,9 +1278,18 @@ GstCaps * gst_app_src_get_caps (GstAppSrc * appsrc) { + + GstCaps *caps; + g_return_val_if_fail (GST_IS_APP_SRC (appsrc), NULL); - return gst_app_src_internal_get_caps (GST_BASE_SRC_CAST (appsrc), NULL); + GST_OBJECT_LOCK (appsrc); + if ((caps = appsrc->priv->last_caps)) + gst_caps_ref (caps); + GST_OBJECT_UNLOCK (appsrc); + + return caps; + } /** @@ -1590,6 +1680,30 @@ } } +static GstFlowReturn +gst_app_src_push_sample_internal (GstAppSrc * appsrc, GstSample * sample) +{ + GstBuffer *buffer; + GstCaps *caps; + + g_return_val_if_fail (GST_IS_SAMPLE (sample), GST_FLOW_ERROR); + + caps = gst_sample_get_caps (sample); + if (caps != NULL) { + gst_app_src_set_caps (appsrc, caps); + } else { + GST_WARNING_OBJECT (appsrc, "received sample without caps"); + } + + buffer = gst_sample_get_buffer (sample); + if (buffer == NULL) { + GST_WARNING_OBJECT (appsrc, "received sample without buffer"); + return GST_FLOW_OK; + } + + return gst_app_src_push_buffer_full (appsrc, buffer, FALSE); +} + /** * gst_app_src_push_buffer: * @appsrc: a #GstAppSrc @@ -1611,6 +1725,33 @@ return gst_app_src_push_buffer_full (appsrc, buffer, TRUE); } +/** + * gst_app_src_push_sample: + * @appsrc: a #GstAppSrc + * @sample: (transfer none): a #GstSample from wich extract buffer to + * push and caps to set + * + * Extract a buffer from the provided sample and adds it to the queue of + * buffers that the appsrc element will push to its source pad. Any + * previous caps setted on appsrc will be replaced by the caps associated + * with the sample if not equal. + * + * When the block property is TRUE, this function can block until free + * space becomes available in the queue. + * + * Returns: #GST_FLOW_OK when the buffer was successfuly queued. + * #GST_FLOW_FLUSHING when @appsrc is not PAUSED or PLAYING. + * #GST_FLOW_EOS when EOS occured. + * + * Since: 1.6 + * + */ +GstFlowReturn +gst_app_src_push_sample (GstAppSrc * appsrc, GstSample * sample) +{ + return gst_app_src_push_sample_internal (appsrc, sample); +} + /* push a buffer without stealing the ref of the buffer. This is used for the * action signal. */ static GstFlowReturn @@ -1619,6 +1760,14 @@ return gst_app_src_push_buffer_full (appsrc, buffer, FALSE); } +/* push a sample without stealing the ref. This is used for the + * action signal. */ +static GstFlowReturn +gst_app_src_push_sample_action (GstAppSrc * appsrc, GstSample * sample) +{ + return gst_app_src_push_sample_internal (appsrc, sample); +} + /** * gst_app_src_end_of_stream: * @appsrc: a #GstAppSrc diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsrc.h gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsrc.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/gstappsrc.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/gstappsrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -42,6 +42,8 @@ typedef struct _GstAppSrcClass GstAppSrcClass; typedef struct _GstAppSrcPrivate GstAppSrcPrivate; +/* FIXME 2.0: Make the instance/class struct private */ + /** * GstAppSrcCallbacks: (skip) * @need_data: Called when the appsrc needs more data. A buffer or EOS should be @@ -107,9 +109,10 @@ /* actions */ GstFlowReturn (*push_buffer) (GstAppSrc *appsrc, GstBuffer *buffer); GstFlowReturn (*end_of_stream) (GstAppSrc *appsrc); + GstFlowReturn (*push_sample) (GstAppSrc *appsrc, GstSample *sample); /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + gpointer _gst_reserved[GST_PADDING-1]; }; GType gst_app_src_get_type(void); @@ -140,6 +143,7 @@ GstFlowReturn gst_app_src_push_buffer (GstAppSrc *appsrc, GstBuffer *buffer); GstFlowReturn gst_app_src_end_of_stream (GstAppSrc *appsrc); +GstFlowReturn gst_app_src_push_sample (GstAppSrc *appsrc, GstSample *sample); void gst_app_src_set_callbacks (GstAppSrc * appsrc, GstAppSrcCallbacks *callbacks, diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/app/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -38,7 +38,7 @@ gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES)) GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstApp \ --nsversion=@GST_API_VERSION@ \ @@ -56,7 +56,7 @@ --pkg gstreamer-@GST_API_VERSION@ \ --pkg gstreamer-base-@GST_API_VERSION@ \ --pkg-export gstreamer-app-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -75,24 +75,9 @@ $(INTROSPECTION_COMPILER) \ --includedir=$(srcdir) \ --includedir=$(builddir) \ - --includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ - --includedir=`$(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_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstapp_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstapp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstapp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/app \ - -:HEADERS $(libgstapp_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/app/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/app/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/app/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/app/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -25,7 +25,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -89,10 +99,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp \ - $(libgstapp_@GST_API_VERSION@include_HEADERS) @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/app ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -115,7 +121,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -132,6 +137,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstapp_@GST_API_VERSION@include_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -230,6 +238,8 @@ DATA = $(gir_DATA) $(typelibs_DATA) HEADERS = $(libgstapp_@GST_API_VERSION@include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -290,6 +300,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -319,6 +331,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -346,7 +360,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -361,6 +374,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -450,13 +464,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -509,6 +522,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -576,7 +590,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -585,7 +598,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -930,6 +943,8 @@ uninstall-libgstapp_@GST_API_VERSION@includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + # these are all the rules generating the relevant files $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list @@ -968,7 +983,7 @@ @touch $@ @HAVE_INTROSPECTION_TRUE@GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstApp \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -986,7 +1001,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-base-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-app-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -996,25 +1011,10 @@ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER) \ @HAVE_INTROSPECTION_TRUE@ --includedir=$(srcdir) \ @HAVE_INTROSPECTION_TRUE@ --includedir=$(builddir) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ -@HAVE_INTROSPECTION_TRUE@ --includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ +@HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +@HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstapp_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstapp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstapp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/app \ - -:HEADERS $(libgstapp_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-channels.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-channels.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-channels.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-channels.c 2015-10-22 08:01:34.000000000 +0000 @@ -301,6 +301,8 @@ * (which should have at least @channels entries ensured by caller). * If @channel_mask is set to 0, it is considered as 'not present' for purpose * of conversion. + * A partially valid @channel_mask with less bits set than the number + * of channels is considered valid. * * Returns: %TRUE if channel and channel mask are valid and could be converted */ @@ -331,14 +333,12 @@ if ((channel_mask & (G_GUINT64_CONSTANT (1) << i))) { if (j < channels) position[j] = default_channel_order[i]; - if (default_channel_order[i] == GST_AUDIO_CHANNEL_POSITION_INVALID) - goto invalid_channel_mask; j++; } } - if (j != channels) - goto invalid_channel_mask; + GST_WARNING ("Only partially valid channel mask 0x%016" G_GINT64_MODIFIER + "x for %d channels", channel_mask, channels); } return TRUE; @@ -349,12 +349,6 @@ GST_ERROR ("no channel-mask property given"); return FALSE; } -invalid_channel_mask: - { - GST_ERROR ("Invalid channel mask 0x%016" G_GINT64_MODIFIER - "x for %d channels", channel_mask, channels); - return FALSE; - } } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-format.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-format.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-format.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-format.c 2015-10-22 08:01:34.000000000 +0000 @@ -225,7 +225,7 @@ #define SILENT_U20BE { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00 } #define SILENT_U18LE { 0x00, 0x00, 0x02, 0x00, 0x00, 0x02 } #define SILENT_U18BE { 0x02, 0x00, 0x00, 0x02, 0x00, 0x00 } - static GstAudioFormatInfo formats[] = { + static const GstAudioFormatInfo formats[] = { {GST_AUDIO_FORMAT_UNKNOWN, "UNKNOWN", "Unknown audio", 0, 0, 0, 0}, {GST_AUDIO_FORMAT_ENCODED, "ENCODED", "Encoded audio", GST_AUDIO_FORMAT_FLAG_COMPLEX, 0, 0, 0}, @@ -363,7 +363,7 @@ gint i, e; for (i = 0; i < G_N_ELEMENTS (formats); i++) { - GstAudioFormatInfo *finfo = &formats[i]; + const GstAudioFormatInfo *finfo = &formats[i]; /* must be int */ if (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (finfo)) diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-info.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-info.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-info.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-info.c 2015-10-22 08:01:34.000000000 +0000 @@ -16,12 +16,6 @@ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ -/** - * SECTION:gstaudio - * @short_description: Support library for audio elements - * - * This library contains some helper functions for audio elements. - */ #ifdef HAVE_CONFIG_H # include "config.h" diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-info.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-info.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/audio-info.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/audio-info.h 2015-10-22 08:01:34.000000000 +0000 @@ -84,7 +84,8 @@ gpointer _gst_reserved[GST_PADDING]; }; -GType gst_audio_info_get_type (void); +#define GST_TYPE_AUDIO_INFO (gst_audio_info_get_type ()) +GType gst_audio_info_get_type (void); #define GST_AUDIO_INFO_IS_VALID(i) ((i)->finfo != NULL && (i)->rate > 0 && (i)->channels > 0 && (i)->bpf > 0) diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesink.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesink.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesink.c 2014-09-13 13:49:23.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesink.c 2015-10-22 08:01:34.000000000 +0000 @@ -69,6 +69,11 @@ /* number of nanoseconds to wait until creating a discontinuity */ GstClockTime discont_wait; + + /* custom slaving algorithm callback */ + GstAudioBaseSinkCustomSlavingCallback custom_slaving_callback; + gpointer custom_slaving_cb_data; + GDestroyNotify custom_slaving_cb_notify; }; /* BaseAudioSink signals and args */ @@ -124,6 +129,8 @@ "resample"}, {GST_AUDIO_BASE_SINK_SLAVE_SKEW, "GST_AUDIO_BASE_SINK_SLAVE_SKEW", "skew"}, {GST_AUDIO_BASE_SINK_SLAVE_NONE, "GST_AUDIO_BASE_SINK_SLAVE_NONE", "none"}, + {GST_AUDIO_BASE_SINK_SLAVE_CUSTOM, "GST_AUDIO_BASE_SINK_SLAVE_CUSTOM", + "custom"}, {0, NULL, NULL}, }; @@ -304,6 +311,9 @@ audiobasesink->priv->drift_tolerance = DEFAULT_DRIFT_TOLERANCE; audiobasesink->priv->alignment_threshold = DEFAULT_ALIGNMENT_THRESHOLD; audiobasesink->priv->discont_wait = DEFAULT_DISCONT_WAIT; + audiobasesink->priv->custom_slaving_callback = NULL; + audiobasesink->priv->custom_slaving_cb_data = NULL; + audiobasesink->priv->custom_slaving_cb_notify = NULL; audiobasesink->provided_clock = gst_audio_clock_new ("GstAudioSinkClock", (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time, audiobasesink, @@ -327,6 +337,9 @@ sink = GST_AUDIO_BASE_SINK (object); + if (sink->priv->custom_slaving_cb_notify) + sink->priv->custom_slaving_cb_notify (sink->priv->custom_slaving_cb_data); + if (sink->provided_clock) { gst_audio_clock_invalidate (sink->provided_clock); gst_object_unref (sink->provided_clock); @@ -381,6 +394,14 @@ } static gboolean +gst_audio_base_sink_is_self_provided_clock (GstAudioBaseSink * sink) +{ + return (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) && + GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func == + (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time); +} + +static gboolean gst_audio_base_sink_query_pad (GstBaseSink * bsink, GstQuery * query) { gboolean res = FALSE; @@ -464,7 +485,6 @@ * amount of time. */ max_latency = (max_l == -1) ? -1 : (base_latency + max_l); - GST_DEBUG_OBJECT (basesink, "peer min %" GST_TIME_FORMAT ", our min latency: %" GST_TIME_FORMAT, GST_TIME_ARGS (min_l), @@ -737,6 +757,73 @@ } /** + * gst_audio_base_sink_set_custom_slaving_callback: + * @sink: a #GstAudioBaseSink + * @callback: a #GstAudioBaseSinkCustomSlavingCallback + * @user_data: user data passed to the callback + * @notify : called when user_data becomes unused + * + * Sets the custom slaving callback. This callback will + * be invoked if the slave-method property is set to + * GST_AUDIO_BASE_SINK_SLAVE_CUSTOM and the audio sink + * receives and plays samples. + * + * Setting the callback to NULL causes the sink to + * behave as if the GST_AUDIO_BASE_SINK_SLAVE_NONE + * method were used. + * + * Since: 1.6 + */ +void +gst_audio_base_sink_set_custom_slaving_callback (GstAudioBaseSink * sink, + GstAudioBaseSinkCustomSlavingCallback callback, + gpointer user_data, GDestroyNotify notify) +{ + g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); + + GST_OBJECT_LOCK (sink); + sink->priv->custom_slaving_callback = callback; + sink->priv->custom_slaving_cb_data = user_data; + sink->priv->custom_slaving_cb_notify = notify; + GST_OBJECT_UNLOCK (sink); +} + +static void +gst_audio_base_sink_custom_cb_report_discont (GstAudioBaseSink * sink, + GstAudioBaseSinkDiscontReason discont_reason) +{ + if ((sink->priv->custom_slaving_callback != NULL) && + (sink->priv->slave_method == GST_AUDIO_BASE_SINK_SLAVE_CUSTOM)) { + sink->priv->custom_slaving_callback (sink, GST_CLOCK_TIME_NONE, + GST_CLOCK_TIME_NONE, NULL, discont_reason, + sink->priv->custom_slaving_cb_data); + } +} + +/** + * gst_audio_base_sink_report_device_failure: + * @sink: a #GstAudioBaseSink + * + * Informs this base class that the audio output device has failed for + * some reason, causing a discontinuity (for example, because the device + * recovered from the error, but lost all contents of its ring buffer). + * This function is typically called by derived classes, and is useful + * for the custom slave method. + * + * Since: 1.6 + */ +void +gst_audio_base_sink_report_device_failure (GstAudioBaseSink * sink) +{ + g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); + + GST_OBJECT_LOCK (sink); + gst_audio_base_sink_custom_cb_report_discont (sink, + GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE); + GST_OBJECT_UNLOCK (sink); +} + +/** * gst_audio_base_sink_get_discont_wait: * @sink: a #GstAudioBaseSink * @@ -843,7 +930,7 @@ { GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); GstAudioRingBufferSpec *spec; - GstClockTime now; + GstClockTime now, internal_time; GstClockTime crate_num, crate_denom; if (!sink->ringbuffer) @@ -864,6 +951,7 @@ * gst_audio_clock_reset() which will use this last_time to create an offset * so that time from the clock keeps on increasing monotonically. */ now = gst_clock_get_time (sink->provided_clock); + internal_time = gst_clock_get_internal_time (sink->provided_clock); GST_DEBUG_OBJECT (sink, "time was %" GST_TIME_FORMAT, GST_TIME_ARGS (now)); @@ -887,9 +975,17 @@ if (!gst_audio_ring_buffer_acquire (sink->ringbuffer, spec)) goto acquire_error; + /* If we use our own clock, we need to adjust the offset since it will now + * restart from zero */ + if (gst_audio_base_sink_is_self_provided_clock (sink)) + gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0); + /* We need to resync since the ringbuffer restarted */ gst_audio_base_sink_reset_sync (sink); + gst_audio_base_sink_custom_cb_report_discont (sink, + GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS); + if (bsink->pad_mode == GST_PAD_MODE_PUSH) { GST_DEBUG_OBJECT (sink, "activate ringbuffer"); gst_audio_ring_buffer_activate (sink->ringbuffer, TRUE); @@ -899,8 +995,7 @@ gst_clock_get_calibration (sink->provided_clock, NULL, NULL, &crate_num, &crate_denom); gst_clock_set_calibration (sink->provided_clock, - gst_clock_get_internal_time (sink->provided_clock), now, crate_num, - crate_denom); + internal_time, now, crate_num, crate_denom); /* calculate actual latency and buffer times. * FIXME: In 2.0, store the latency_time internally in ns */ @@ -980,14 +1075,25 @@ *end = GST_CLOCK_TIME_NONE; } +static void +gst_audio_base_sink_force_start (GstAudioBaseSink * sink) +{ + /* Set the eos_rendering flag so sub-classes definitely start the clock. + * FIXME 2.0: Pass this as a flag to gst_audio_ring_buffer_start() */ + g_atomic_int_set (&sink->eos_rendering, 1); + gst_audio_ring_buffer_start (sink->ringbuffer); + g_atomic_int_set (&sink->eos_rendering, 0); +} + /* This waits for the drain to happen and can be canceled */ -static gboolean +static GstFlowReturn gst_audio_base_sink_drain (GstAudioBaseSink * sink) { + GstFlowReturn ret = GST_FLOW_OK; if (!sink->ringbuffer) - return TRUE; + return ret; if (!sink->ringbuffer->spec.info.rate) - return TRUE; + return ret; /* if PLAYING is interrupted, * arrange to have clock running when going to PLAYING again */ @@ -1006,75 +1112,59 @@ /* wait for the EOS time to be reached, this is the time when the last * sample is played. */ - gst_base_sink_wait (GST_BASE_SINK (sink), sink->priv->eos_time, NULL); + ret = gst_base_sink_wait (GST_BASE_SINK (sink), sink->priv->eos_time, NULL); GST_DEBUG_OBJECT (sink, "drained audio"); } g_atomic_int_set (&sink->eos_rendering, 0); - return TRUE; + return ret; } static GstFlowReturn gst_audio_base_sink_wait_event (GstBaseSink * bsink, GstEvent * event) { GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); - GstFlowReturn ret; - - ret = GST_BASE_SINK_CLASS (parent_class)->wait_event (bsink, event); - if (ret != GST_FLOW_OK) - return ret; + GstFlowReturn ret = GST_FLOW_OK; + gboolean clear_force_start_flag = FALSE; + /* For both gap and EOS events, make sure the ringbuffer is running + * before trying to wait on the event! */ switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_GAP:{ - GstClockTime timestamp, duration; - GstAudioRingBufferSpec *spec; - GstBuffer *buffer; - gint n_samples = 0; - GstMapInfo minfo; - - spec = &sink->ringbuffer->spec; - if (G_UNLIKELY (spec->info.rate == 0)) { + case GST_EVENT_EOS: + case GST_EVENT_GAP: + /* We must have a negotiated format before starting the ringbuffer */ + if (G_UNLIKELY (!gst_audio_ring_buffer_is_acquired (sink->ringbuffer))) { GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), - ("Sink not negotiated before GAP event.")); - ret = GST_FLOW_ERROR; - break; + ("Sink not negotiated before %s event.", + GST_EVENT_TYPE_NAME (event))); + return GST_FLOW_ERROR; } - gst_event_parse_gap (event, ×tamp, &duration); - - /* If the GAP event has a duration, handle it like a - * silence buffer of that duration. Otherwise at least - * start the ringbuffer to make sure the clock is running. - */ - if (duration != GST_CLOCK_TIME_NONE) { - n_samples = - gst_util_uint64_scale_ceil (duration, spec->info.rate, GST_SECOND); - buffer = gst_buffer_new_and_alloc (n_samples * spec->info.bpf); - - if (n_samples != 0) { - gst_buffer_map (buffer, &minfo, GST_MAP_WRITE); - gst_audio_format_fill_silence (spec->info.finfo, minfo.data, - minfo.size); - gst_buffer_unmap (buffer, &minfo); - } - GST_BUFFER_PTS (buffer) = timestamp; - GST_BUFFER_DURATION (buffer) = duration; - GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_GAP); - - ret = gst_audio_base_sink_render (bsink, buffer); - gst_buffer_unref (buffer); - } else { - gst_audio_base_sink_drain (sink); - } + gst_audio_base_sink_force_start (sink); + /* Make sure the ringbuffer will start again if interrupted during event_wait() */ + g_atomic_int_set (&sink->eos_rendering, 1); + clear_force_start_flag = TRUE; break; - } + default: + break; + } + + ret = GST_BASE_SINK_CLASS (parent_class)->wait_event (bsink, event); + if (ret != GST_FLOW_OK) + goto done; + + switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: /* now wait till we played everything */ - gst_audio_base_sink_drain (sink); + ret = gst_audio_base_sink_drain (sink); break; default: break; } + +done: + if (clear_force_start_flag) + g_atomic_int_set (&sink->eos_rendering, 0); return ret; } @@ -1091,6 +1181,10 @@ case GST_EVENT_FLUSH_STOP: /* always resync on sample after a flush */ gst_audio_base_sink_reset_sync (sink); + + gst_audio_base_sink_custom_cb_report_discont (sink, + GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH); + if (sink->ringbuffer) gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE); break; @@ -1174,6 +1268,104 @@ return external; } + +/* apply the clock offset and invoke a custom callback + * which might also request changes to the playout pointer + * + * this reuses code from the skewing algorithm, but leaves + * decision on whether or not to skew (and how much to skew) + * up to the callback */ +static void +gst_audio_base_sink_custom_slaving (GstAudioBaseSink * sink, + GstClockTime render_start, GstClockTime render_stop, + GstClockTime * srender_start, GstClockTime * srender_stop) +{ + GstClockTime cinternal, cexternal, crate_num, crate_denom; + GstClockTime etime, itime; + GstClockTimeDiff requested_skew; + gint driftsamples; + gint64 last_align; + + /* get calibration parameters to compensate for offsets */ + gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal, + &crate_num, &crate_denom); + + /* sample clocks and figure out clock skew */ + etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink)); + itime = gst_audio_clock_get_time (sink->provided_clock); + itime = gst_audio_clock_adjust (sink->provided_clock, itime); + + GST_DEBUG_OBJECT (sink, + "internal %" GST_TIME_FORMAT " external %" GST_TIME_FORMAT + " cinternal %" GST_TIME_FORMAT " cexternal %" GST_TIME_FORMAT, + GST_TIME_ARGS (itime), GST_TIME_ARGS (etime), + GST_TIME_ARGS (cinternal), GST_TIME_ARGS (cexternal)); + + /* make sure we never go below 0 */ + etime = etime > cexternal ? etime - cexternal : 0; + itime = itime > cinternal ? itime - cinternal : 0; + + /* don't do any skewing unless the callback explicitely requests one */ + requested_skew = 0; + + if (sink->priv->custom_slaving_callback != NULL) { + sink->priv->custom_slaving_callback (sink, etime, itime, &requested_skew, + FALSE, sink->priv->custom_slaving_cb_data); + GST_DEBUG_OBJECT (sink, "custom slaving requested skew %" G_GINT64_FORMAT, + requested_skew); + } else { + GST_DEBUG_OBJECT (sink, + "no custom slaving callback set - clock drift will not be compensated"); + } + + if (requested_skew > 0) { + cexternal = (cexternal > requested_skew) ? (cexternal - requested_skew) : 0; + + driftsamples = + (sink->ringbuffer->spec.info.rate * requested_skew) / GST_SECOND; + last_align = sink->priv->last_align; + + /* if we were aligning in the wrong direction or we aligned more than what we + * will correct, resync */ + if ((last_align < 0) || (last_align > driftsamples)) + sink->next_sample = -1; + + GST_DEBUG_OBJECT (sink, + "last_align %" G_GINT64_FORMAT " driftsamples %u, next %" + G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); + + gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, + crate_num, crate_denom); + } else if (requested_skew < 0) { + cexternal += ABS (requested_skew); + + driftsamples = + (sink->ringbuffer->spec.info.rate * ABS (requested_skew)) / GST_SECOND; + last_align = sink->priv->last_align; + + /* if we were aligning in the wrong direction or we aligned more than what we + * will correct, resync */ + if ((last_align > 0) || (-last_align > driftsamples)) + sink->next_sample = -1; + + GST_DEBUG_OBJECT (sink, + "last_align %" G_GINT64_FORMAT " driftsamples %u, next %" + G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); + + gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, + crate_num, crate_denom); + } + + /* convert, ignoring speed */ + render_start = clock_convert_external (render_start, cinternal, cexternal, + crate_num, crate_denom); + render_stop = clock_convert_external (render_stop, cinternal, cexternal, + crate_num, crate_denom); + + *srender_start = render_start; + *srender_stop = render_stop; +} + /* algorithm to calculate sample positions that will result in resampling to * match the clock rate of the master */ static void @@ -1390,6 +1582,10 @@ gst_audio_base_sink_none_slaving (sink, render_start, render_stop, srender_start, srender_stop); break; + case GST_AUDIO_BASE_SINK_SLAVE_CUSTOM: + gst_audio_base_sink_custom_slaving (sink, render_start, render_stop, + srender_start, srender_stop); + break; default: g_warning ("unknown slaving method %d", sink->priv->slave_method); break; @@ -1466,10 +1662,8 @@ GST_DEBUG_OBJECT (sink, "latency synced"); - /* Do not acquire the sink object lock before trying to get time on the Sink. - * The get_time call may need to acquire the pulse audio mainloop lock. This can - * cause a deadlock with the Pulse Audio main loop thread which in turn has - * acquired its mainloop lock and now needs to acquire Object lock on the sink. */ + /* We might need to take the object lock within gst_audio_clock_get_time(), + * so call that before we take it again */ itime = gst_audio_clock_get_time (sink->provided_clock); itime = gst_audio_clock_adjust (sink->provided_clock, itime); @@ -1487,7 +1681,7 @@ } /* start ringbuffer so we can start slaving right away when we need to */ - gst_audio_ring_buffer_start (sink->ringbuffer); + gst_audio_base_sink_force_start (sink); GST_DEBUG_OBJECT (sink, "internal time: %" GST_TIME_FORMAT " external time: %" GST_TIME_FORMAT, @@ -1508,12 +1702,16 @@ break; case GST_AUDIO_BASE_SINK_SLAVE_SKEW: case GST_AUDIO_BASE_SINK_SLAVE_NONE: + case GST_AUDIO_BASE_SINK_SLAVE_CUSTOM: default: break; } gst_audio_base_sink_reset_sync (sink); + gst_audio_base_sink_custom_cb_report_discont (sink, + GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY); + return GST_FLOW_OK; /* ERRORS */ @@ -1604,6 +1802,9 @@ "%s%" GST_TIME_FORMAT ", resyncing", sample_offset > sink->next_sample ? "+" : "-", GST_TIME_ARGS (diff_s)); align = 0; + + gst_audio_base_sink_custom_cb_report_discont (sink, + GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT); } return align; @@ -1612,7 +1813,6 @@ static GstFlowReturn gst_audio_base_sink_render (GstBaseSink * bsink, GstBuffer * buf) { - guint64 in_offset; GstClockTime time, stop, render_start, render_stop, sample_offset; GstClockTimeDiff sync_offset, ts_offset; GstAudioBaseSinkClass *bclass; @@ -1681,12 +1881,34 @@ samples = size / bpf; out_samples = samples; - in_offset = GST_BUFFER_OFFSET (buf); time = GST_BUFFER_TIMESTAMP (buf); + /* Last ditch attempt to ensure that we only play silence if + * we are in trickmode no-audio mode (or if a buffer is marked as a GAP) + * by dropping the buffer contents and rendering as a gap event instead */ + if (G_UNLIKELY ((bsink->segment.flags & GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO) + || (buf && GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_GAP)))) { + GstClockTime duration; + GstEvent *event; + GstBaseSinkClass *bclass; + GST_DEBUG_OBJECT (bsink, + "Received GAP or ignoring audio for trickplay. Dropping contents"); + + duration = gst_util_uint64_scale_int (samples, GST_SECOND, rate); + event = gst_event_new_gap (time, duration); + + bclass = GST_BASE_SINK_GET_CLASS (bsink); + ret = bclass->wait_event (bsink, event); + gst_event_unref (event); + + /* Ensure we'll resync on the next buffer as if discont */ + sink->next_sample = -1; + goto done; + } + GST_DEBUG_OBJECT (sink, - "time %" GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT ", start %" - GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), in_offset, + "time %" GST_TIME_FORMAT ", start %" + GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), GST_TIME_ARGS (bsink->segment.start), samples); offset = 0; @@ -1975,7 +2197,7 @@ && stop >= bsink->segment.stop)) { GST_DEBUG_OBJECT (sink, "start playback because we are at the end of segment"); - gst_audio_ring_buffer_start (ringbuf); + gst_audio_base_sink_force_start (sink); } ret = GST_FLOW_OK; @@ -2189,14 +2411,27 @@ GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (element); switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: - if (sink->ringbuffer == NULL) { - gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0); - sink->ringbuffer = gst_audio_base_sink_create_ringbuffer (sink); - } - if (!gst_audio_ring_buffer_open_device (sink->ringbuffer)) + case GST_STATE_CHANGE_NULL_TO_READY:{ + GstAudioRingBuffer *rb; + + gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0); + rb = gst_audio_base_sink_create_ringbuffer (sink); + if (rb == NULL) + goto create_failed; + + GST_OBJECT_LOCK (sink); + sink->ringbuffer = rb; + GST_OBJECT_UNLOCK (sink); + + if (!gst_audio_ring_buffer_open_device (sink->ringbuffer)) { + GST_OBJECT_LOCK (sink); + gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer)); + sink->ringbuffer = NULL; + GST_OBJECT_UNLOCK (sink); goto open_failed; + } break; + } case GST_STATE_CHANGE_READY_TO_PAUSED: gst_audio_base_sink_reset_sync (sink); gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE); @@ -2205,9 +2440,7 @@ /* Only post clock-provide messages if this is the clock that * we've created. If the subclass has overriden it the subclass * should post this messages whenever necessary */ - if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) && - GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func == - (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time) + if (gst_audio_base_sink_is_self_provided_clock (sink)) gst_element_post_message (element, gst_message_new_clock_provide (GST_OBJECT_CAST (element), sink->provided_clock, TRUE)); @@ -2245,9 +2478,7 @@ /* Only post clock-lost messages if this is the clock that * we've created. If the subclass has overriden it the subclass * should post this messages whenever necessary */ - if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) && - GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func == - (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time) + if (gst_audio_base_sink_is_self_provided_clock (sink)) gst_element_post_message (element, gst_message_new_clock_lost (GST_OBJECT_CAST (element), sink->provided_clock)); @@ -2291,6 +2522,12 @@ return ret; /* ERRORS */ +create_failed: + { + /* subclass must post a meaningful error message */ + GST_DEBUG_OBJECT (sink, "create failed"); + return GST_STATE_CHANGE_FAILURE; + } open_failed: { /* subclass must post a meaningful error message */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesink.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesink.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesink.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesink.h 2015-10-22 08:01:34.000000000 +0000 @@ -59,6 +59,7 @@ #define GST_TYPE_AUDIO_BASE_SINK (gst_audio_base_sink_get_type()) #define GST_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSink)) +#define GST_AUDIO_BASE_SINK_CAST(obj) ((GstAudioBaseSink*)obj) #define GST_AUDIO_BASE_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSinkClass)) #define GST_AUDIO_BASE_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SINK, GstAudioBaseSinkClass)) #define GST_IS_AUDIO_BASE_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SINK)) @@ -85,6 +86,7 @@ * @GST_AUDIO_BASE_SINK_SLAVE_SKEW: Adjust playout pointer when master clock * drifts too much. * @GST_AUDIO_BASE_SINK_SLAVE_NONE: No adjustment is done. + * @GST_AUDIO_BASE_SINK_SLAVE_CUSTOM: Use custom clock slaving algorithm (Since: 1.6) * * Different possible clock slaving algorithms used when the internal audio * clock is not selected as the pipeline master clock. @@ -93,7 +95,8 @@ { GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE, GST_AUDIO_BASE_SINK_SLAVE_SKEW, - GST_AUDIO_BASE_SINK_SLAVE_NONE + GST_AUDIO_BASE_SINK_SLAVE_NONE, + GST_AUDIO_BASE_SINK_SLAVE_CUSTOM } GstAudioBaseSinkSlaveMethod; #define GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD (gst_audio_base_sink_slave_method_get_type ()) @@ -103,6 +106,67 @@ typedef struct _GstAudioBaseSinkPrivate GstAudioBaseSinkPrivate; /** + * GstAudioBaseSinkDiscontReason: + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT: No discontinuity occurred + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS: New caps are set, causing renegotiotion + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH: Samples have been flushed + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY: Sink was synchronized to the estimated latency (occurs during initialization) + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT: Aligning buffers failed because the timestamps are too discontinuous + * @GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE: Audio output device experienced and recovered from an error but introduced latency in the process (see also @gst_audio_base_sink_report_device_failure()) + * + * Different possible reasons for discontinuities. This enum is useful for the custom + * slave method. + * + * Since: 1.6 + */ +typedef enum +{ + GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT, + GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS, + GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH, + GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY, + GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT, + GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE +} GstAudioBaseSinkDiscontReason; + +/** + * GstAudioBaseSinkCustomSlavingCallback: + * @sink: a #GstAudioBaseSink + * @etime: external clock time + * @itime: internal clock time + * @requested_skew: skew amount requested by the callback + * @discont_reason: reason for discontinuity (if any) + * @user_data: user data + * + * This function is set with gst_audio_base_sink_set_custom_slaving_callback() + * and is called during playback. It receives the current time of external and + * internal clocks, which the callback can then use to apply any custom + * slaving/synchronization schemes. + * + * The external clock is the sink's element clock, the internal one is the + * internal audio clock. The internal audio clock's calibration is applied to + * the timestamps before they are passed to the callback. The difference between + * etime and itime is the skew; how much internal and external clock lie apart + * from each other. A skew of 0 means both clocks are perfectly in sync. + * itime > etime means the external clock is going slower, while itime < etime + * means it is going faster than the internal clock. etime and itime are always + * valid timestamps, except for when a discontinuity happens. + * + * requested_skew is an output value the callback can write to. It informs the + * sink of whether or not it should move the playout pointer, and if so, by how + * much. This pointer is only NULL if a discontinuity occurs; otherwise, it is + * safe to write to *requested_skew. The default skew is 0. + * + * The sink may experience discontinuities. If one happens, discont is TRUE, + * itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL. + * This makes it possible to reset custom clock slaving algorithms when a + * discontinuity happens. + * + * Since: 1.6 + */ +typedef void (*GstAudioBaseSinkCustomSlavingCallback) (GstAudioBaseSink *sink, GstClockTime etime, GstClockTime itime, GstClockTimeDiff *requested_skew, GstAudioBaseSinkDiscontReason discont_reason, gpointer user_data); + +/** * GstAudioBaseSink: * * Opaque #GstAudioBaseSink. @@ -186,6 +250,14 @@ GstClockTime gst_audio_base_sink_get_discont_wait (GstAudioBaseSink * sink); +void +gst_audio_base_sink_set_custom_slaving_callback (GstAudioBaseSink * sink, + GstAudioBaseSinkCustomSlavingCallback callback, + gpointer user_data, + GDestroyNotify notify); + +void gst_audio_base_sink_report_device_failure (GstAudioBaseSink * sink); + G_END_DECLS #endif /* __GST_AUDIO_BASE_SINK_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesrc.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesrc.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesrc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -169,14 +169,17 @@ g_param_spec_int64 ("buffer-time", "Buffer Time", "Size of audio buffer in microseconds. This is the maximum amount " "of data that is buffered in the device and the maximum latency that " - "the source reports", 1, G_MAXINT64, DEFAULT_BUFFER_TIME, + "the source reports. This value might be ignored by the element if " + "necessary; see \"actual-buffer-time\"", + 1, G_MAXINT64, DEFAULT_BUFFER_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_LATENCY_TIME, g_param_spec_int64 ("latency-time", "Latency Time", "The minimum amount of data to read in each iteration in " - "microseconds. This is the minimum latency that the source reports", - 1, G_MAXINT64, DEFAULT_LATENCY_TIME, + "microseconds. This is the minimum latency that the source reports. " + "This value might be ignored by the element if necessary; see " + "\"actual-latency-time\"", 1, G_MAXINT64, DEFAULT_LATENCY_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** @@ -1124,17 +1127,28 @@ GstAudioBaseSrc *src = GST_AUDIO_BASE_SRC (element); switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: + case GST_STATE_CHANGE_NULL_TO_READY:{ + GstAudioRingBuffer *rb; + GST_DEBUG_OBJECT (src, "NULL->READY"); + gst_audio_clock_reset (GST_AUDIO_CLOCK (src->clock), 0); + rb = gst_audio_base_src_create_ringbuffer (src); + if (rb == NULL) + goto create_failed; + GST_OBJECT_LOCK (src); - if (src->ringbuffer == NULL) { - gst_audio_clock_reset (GST_AUDIO_CLOCK (src->clock), 0); - src->ringbuffer = gst_audio_base_src_create_ringbuffer (src); - } + src->ringbuffer = rb; GST_OBJECT_UNLOCK (src); - if (!gst_audio_ring_buffer_open_device (src->ringbuffer)) + + if (!gst_audio_ring_buffer_open_device (src->ringbuffer)) { + GST_OBJECT_LOCK (src); + gst_object_unparent (GST_OBJECT_CAST (src->ringbuffer)); + src->ringbuffer = NULL; + GST_OBJECT_UNLOCK (src); goto open_failed; + } break; + } case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG_OBJECT (src, "READY->PAUSED"); src->next_sample = -1; @@ -1197,6 +1211,12 @@ return ret; /* ERRORS */ +create_failed: + { + /* subclass must post a meaningful error message */ + GST_DEBUG_OBJECT (src, "create failed"); + return GST_STATE_CHANGE_FAILURE; + } open_failed: { /* subclass must post a meaningful error message */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesrc.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesrc.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiobasesrc.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiobasesrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -37,6 +37,7 @@ #define GST_TYPE_AUDIO_BASE_SRC (gst_audio_base_src_get_type()) #define GST_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrc)) +#define GST_AUDIO_BASE_SRC_CAST(obj) ((GstAudioBaseSrc*)obj) #define GST_AUDIO_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrcClass)) #define GST_AUDIO_BASE_SRC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SRC, GstAudioBaseSrcClass)) #define GST_IS_AUDIO_BASE_SRC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SRC)) diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioclock.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioclock.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioclock.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioclock.c 2015-10-22 08:01:34.000000000 +0000 @@ -40,42 +40,12 @@ GST_DEBUG_CATEGORY_STATIC (gst_audio_clock_debug); #define GST_CAT_DEFAULT gst_audio_clock_debug -static void gst_audio_clock_class_init (GstAudioClockClass * klass); -static void gst_audio_clock_init (GstAudioClock * clock); - static void gst_audio_clock_dispose (GObject * object); static GstClockTime gst_audio_clock_get_internal_time (GstClock * clock); -static GstSystemClockClass *parent_class = NULL; - -/* static guint gst_audio_clock_signals[LAST_SIGNAL] = { 0 }; */ - -GType -gst_audio_clock_get_type (void) -{ - static volatile gsize clock_type = 0; - static const GTypeInfo clock_info = { - sizeof (GstAudioClockClass), - NULL, - NULL, - (GClassInitFunc) gst_audio_clock_class_init, - NULL, - NULL, - sizeof (GstAudioClock), - 4, - (GInstanceInitFunc) gst_audio_clock_init, - NULL - }; - - if (g_once_init_enter (&clock_type)) { - GType tmp = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstAudioClock", - &clock_info, 0); - g_once_init_leave (&clock_type, tmp); - } - - return (GType) clock_type; -} +#define parent_class gst_audio_clock_parent_class +G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK); static void gst_audio_clock_class_init (GstAudioClockClass * klass) @@ -86,8 +56,6 @@ gobject_class = (GObjectClass *) klass; gstclock_class = (GstClockClass *) klass; - parent_class = g_type_class_peek_parent (klass); - gobject_class->dispose = gst_audio_clock_dispose; gstclock_class->get_internal_time = gst_audio_clock_get_internal_time; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiodecoder.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiodecoder.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiodecoder.c 2014-09-19 06:38:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiodecoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -149,6 +149,7 @@ #endif #include "gstaudiodecoder.h" +#include "gstaudioutilsprivate.h" #include #include @@ -238,8 +239,9 @@ gboolean drained; /* subclass currently being forcibly drained */ gboolean force; - /* need to handle changed input caps */ - gboolean do_caps; + /* input_segment are output_segment identical */ + gboolean in_out_segment_sync; + /* input bps estimatation */ /* global in bytes seen */ @@ -250,9 +252,15 @@ guint sync_flush; /* error count */ gint error_count; - /* codec id tag */ - GstTagList *taglist; - gboolean taglist_changed; + + /* upstream stream tags (global tags are passed through as-is) */ + GstTagList *upstream_tags; + + /* subclass tags */ + GstTagList *taglist; /* FIXME: rename to decoder_tags */ + GstTagMergeMode decoder_tags_merge_mode; + + gboolean taglist_changed; /* FIXME: rename to tags_changed */ /* whether circumstances allow output aggregation */ gint agg; @@ -277,6 +285,9 @@ /* pending serialized sink events, will be sent from finish_frame() */ GList *pending_events; + + /* flags */ + gboolean use_default_pad_acceptcaps; }; //* Default channel layouts taken from audioconvert */ @@ -379,6 +390,15 @@ dec, GstQuery * query); static gboolean gst_audio_decoder_negotiate_default (GstAudioDecoder * dec); static gboolean gst_audio_decoder_negotiate_unlocked (GstAudioDecoder * dec); +static gboolean gst_audio_decoder_handle_gap (GstAudioDecoder * dec, + GstEvent * event); +static gboolean gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, + GstQuery * query); +static gboolean gst_audio_decoder_src_query_default (GstAudioDecoder * dec, + GstQuery * query); + +static gboolean gst_audio_decoder_transform_meta_default (GstAudioDecoder * + decoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); static GstElementClass *parent_class = NULL; @@ -466,6 +486,12 @@ GST_DEBUG_FUNCPTR (gst_audio_decoder_decide_allocation_default); audiodecoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_audio_decoder_negotiate_default); + audiodecoder_class->sink_query = + GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_query_default); + audiodecoder_class->src_query = + GST_DEBUG_FUNCPTR (gst_audio_decoder_src_query_default); + audiodecoder_class->transform_meta = + GST_DEBUG_FUNCPTR (gst_audio_decoder_transform_meta_default); } static void @@ -502,7 +528,6 @@ GST_DEBUG_FUNCPTR (gst_audio_decoder_src_event)); gst_pad_set_query_function (dec->srcpad, GST_DEBUG_FUNCPTR (gst_audio_decoder_src_query)); - gst_pad_use_fixed_caps (dec->srcpad); gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad); GST_DEBUG_OBJECT (dec, "srcpad created"); @@ -520,6 +545,8 @@ dec->priv->needs_format = DEFAULT_NEEDS_FORMAT; /* init state */ + dec->priv->ctx.min_latency = 0; + dec->priv->ctx.max_latency = 0; gst_audio_decoder_reset (dec, TRUE); GST_DEBUG_OBJECT (dec, "init ok"); } @@ -543,10 +570,16 @@ gst_tag_list_unref (dec->priv->taglist); dec->priv->taglist = NULL; } + dec->priv->decoder_tags_merge_mode = GST_TAG_MERGE_KEEP_ALL; + if (dec->priv->upstream_tags) { + gst_tag_list_unref (dec->priv->upstream_tags); + dec->priv->upstream_tags = NULL; + } dec->priv->taglist_changed = FALSE; gst_segment_init (&dec->input_segment, GST_FORMAT_TIME); gst_segment_init (&dec->output_segment, GST_FORMAT_TIME); + dec->priv->in_out_segment_sync = TRUE; g_list_foreach (dec->priv->pending_events, (GFunc) gst_event_unref, NULL); g_list_free (dec->priv->pending_events); @@ -602,6 +635,32 @@ G_OBJECT_CLASS (parent_class)->finalize (object); } +static GstEvent * +gst_audio_decoder_create_merged_tags_event (GstAudioDecoder * dec) +{ + GstTagList *merged_tags; + + GST_LOG_OBJECT (dec, "upstream : %" GST_PTR_FORMAT, dec->priv->upstream_tags); + GST_LOG_OBJECT (dec, "decoder : %" GST_PTR_FORMAT, dec->priv->taglist); + GST_LOG_OBJECT (dec, "mode : %d", dec->priv->decoder_tags_merge_mode); + + merged_tags = + gst_tag_list_merge (dec->priv->upstream_tags, + dec->priv->taglist, dec->priv->decoder_tags_merge_mode); + + GST_DEBUG_OBJECT (dec, "merged : %" GST_PTR_FORMAT, merged_tags); + + if (merged_tags == NULL) + return NULL; + + if (gst_tag_list_is_empty (merged_tags)) { + gst_tag_list_unref (merged_tags); + return NULL; + } + + return gst_event_new_tag (merged_tags); +} + static gboolean gst_audio_decoder_push_event (GstAudioDecoder * dec, GstEvent * event) { @@ -615,6 +674,8 @@ GST_DEBUG_OBJECT (dec, "starting segment %" GST_SEGMENT_FORMAT, &seg); dec->output_segment = seg; + dec->priv->in_out_segment_sync = + gst_segment_is_equal (&dec->input_segment, &seg); GST_AUDIO_DECODER_STREAM_UNLOCK (dec); break; } @@ -928,11 +989,15 @@ ctx->info.bpf); if (G_UNLIKELY (!buf)) { GST_DEBUG_OBJECT (dec, "no data after clipping to segment"); - if (dec->output_segment.rate >= 0) { - if (ts >= dec->output_segment.stop) + /* only check and return EOS if upstream still + * in the same segment and interested as such */ + if (dec->priv->in_out_segment_sync) { + if (dec->output_segment.rate >= 0) { + if (ts >= dec->output_segment.stop) + ret = GST_FLOW_EOS; + } else if (ts < dec->output_segment.start) { ret = GST_FLOW_EOS; - } else if (ts < dec->output_segment.start) { - ret = GST_FLOW_EOS; + } } goto exit; } @@ -1078,6 +1143,39 @@ g_list_free (pending_events); } +/* Iterate the list of pending events, and ensure + * the current output segment is up to date for + * decoding */ +static void +apply_pending_events (GstAudioDecoder * dec) +{ + GstAudioDecoderPrivate *priv = dec->priv; + GList *l; + + GST_DEBUG_OBJECT (dec, "Applying pending segments"); + for (l = priv->pending_events; l; l = l->next) { + GstEvent *event = GST_EVENT (l->data); + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEGMENT:{ + GstSegment seg; + + GST_AUDIO_DECODER_STREAM_LOCK (dec); + gst_event_copy_segment (event, &seg); + + GST_DEBUG_OBJECT (dec, "starting segment %" GST_SEGMENT_FORMAT, &seg); + + dec->output_segment = seg; + dec->priv->in_out_segment_sync = + gst_segment_is_equal (&dec->input_segment, &seg); + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + break; + } + default: + break; + } + } +} + static GstFlowReturn check_pending_reconfigure (GstAudioDecoder * dec) { @@ -1102,6 +1200,61 @@ return ret; } +static gboolean +gst_audio_decoder_transform_meta_default (GstAudioDecoder * + decoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) + return TRUE; + + return FALSE; +} + +typedef struct +{ + GstAudioDecoder *decoder; + GstBuffer *outbuf; +} CopyMetaData; + +static gboolean +foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) +{ + CopyMetaData *data = user_data; + GstAudioDecoder *decoder = data->decoder; + GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (decoder); + GstBuffer *outbuf = data->outbuf; + const GstMetaInfo *info = (*meta)->info; + gboolean do_copy = FALSE; + + if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) { + /* never call the transform_meta with memory specific metadata */ + GST_DEBUG_OBJECT (decoder, "not copying memory specific metadata %s", + g_type_name (info->api)); + do_copy = FALSE; + } else if (klass->transform_meta) { + do_copy = klass->transform_meta (decoder, outbuf, *meta, inbuf); + GST_DEBUG_OBJECT (decoder, "transformed metadata %s: copy: %d", + g_type_name (info->api), do_copy); + } + + /* we only copy metadata when the subclass implemented a transform_meta + * function and when it returns %TRUE */ + if (do_copy) { + GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; + GST_DEBUG_OBJECT (decoder, "copy metadata %s", g_type_name (info->api)); + /* simply copy then */ + info->transform_func (outbuf, *meta, inbuf, + _gst_meta_transform_copy, ©_data); + } + return TRUE; +} /** * gst_audio_decoder_finish_frame: @@ -1128,10 +1281,12 @@ { GstAudioDecoderPrivate *priv; GstAudioDecoderContext *ctx; + GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (dec); gint samples = 0; GstClockTime ts, next_ts; gsize size; GstFlowReturn ret = GST_FLOW_OK; + GQueue inbufs = G_QUEUE_INIT; /* subclass should not hand us no data */ g_return_val_if_fail (buf == NULL || gst_buffer_get_size (buf) > 0, @@ -1174,7 +1329,7 @@ /* frame and ts book-keeping */ if (G_UNLIKELY (frames < 0)) { if (G_UNLIKELY (-frames - 1 > priv->frames.length)) { - GST_ELEMENT_WARNING (dec, STREAM, ENCODE, + GST_ELEMENT_WARNING (dec, STREAM, DECODE, ("received more decoded frames %d than provided %d", frames, priv->frames.length), (NULL)); frames = 0; @@ -1183,7 +1338,7 @@ } } else if (G_UNLIKELY (frames > priv->frames.length)) { if (G_LIKELY (!priv->force)) { - GST_ELEMENT_WARNING (dec, STREAM, ENCODE, + GST_ELEMENT_WARNING (dec, STREAM, DECODE, ("received more decoded frames %d than provided %d", frames, priv->frames.length), (NULL)); } @@ -1199,7 +1354,7 @@ GST_TIME_ARGS (ts)); while (priv->frames.length && frames) { - gst_buffer_unref (g_queue_pop_head (&priv->frames)); + g_queue_push_tail (&inbufs, g_queue_pop_head (&priv->frames)); dec->priv->ctx.delay = dec->priv->frames.length; frames--; } @@ -1251,10 +1406,13 @@ /* delayed one-shot stuff until confirmed data */ if (priv->taglist && priv->taglist_changed) { - GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, priv->taglist); - if (!gst_tag_list_is_empty (priv->taglist)) - gst_audio_decoder_push_event (dec, - gst_event_new_tag (gst_tag_list_ref (priv->taglist))); + GstEvent *tags_event; + + tags_event = gst_audio_decoder_create_merged_tags_event (dec); + + if (tags_event != NULL) + gst_audio_decoder_push_event (dec, tags_event); + priv->taglist_changed = FALSE; } @@ -1271,6 +1429,23 @@ GST_BUFFER_DURATION (buf) = GST_FRAMES_TO_CLOCK_TIME (samples, ctx->info.rate); } + + if (klass->transform_meta) { + if (inbufs.length) { + GList *l; + for (l = inbufs.head; l; l = l->next) { + CopyMetaData data; + + data.decoder = dec; + data.outbuf = buf; + gst_buffer_foreach_meta (l->data, foreach_metadata, &data); + } + } else { + GST_WARNING_OBJECT (dec, + "Can't copy metadata because input buffers disappeared"); + } + } + priv->samples += samples; priv->samples_out += samples; @@ -1281,6 +1456,8 @@ ret = gst_audio_decoder_output (dec, buf); exit: + g_queue_foreach (&inbufs, (GFunc) gst_buffer_unref, NULL); + g_queue_clear (&inbufs); GST_AUDIO_DECODER_STREAM_UNLOCK (dec); @@ -1289,7 +1466,7 @@ /* ERRORS */ wrong_buffer: { - GST_ELEMENT_ERROR (dec, STREAM, ENCODE, (NULL), + GST_ELEMENT_ERROR (dec, STREAM, DECODE, (NULL), ("buffer size %" G_GSIZE_FORMAT " not a multiple of %d", size, ctx->info.bpf)); gst_buffer_unref (buf); @@ -1302,6 +1479,27 @@ gst_audio_decoder_handle_frame (GstAudioDecoder * dec, GstAudioDecoderClass * klass, GstBuffer * buffer) { + /* Skip decoding and send a GAP instead if + * GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO is set and we have timestamps + * FIXME: We only do this for forward playback atm, because reverse + * playback would require accumulating GAP events and pushing them + * out in reverse order as for normal audio samples + */ + if (G_UNLIKELY (dec->input_segment.rate > 0.0 + && dec->input_segment.flags & GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO)) { + if (buffer) { + GstClockTime ts = GST_BUFFER_PTS (buffer); + if (GST_CLOCK_TIME_IS_VALID (ts)) { + GstEvent *event = gst_event_new_gap (ts, GST_BUFFER_DURATION (buffer)); + + gst_buffer_unref (buffer); + GST_LOG_OBJECT (dec, "Skipping decode in trickmode and sending gap"); + gst_audio_decoder_handle_gap (dec, event); + return GST_FLOW_OK; + } + } + } + if (G_LIKELY (buffer)) { gsize size = gst_buffer_get_size (buffer); /* keep around for admin */ @@ -1443,29 +1641,40 @@ if (dec->priv->drained && !dec->priv->gather) return GST_FLOW_OK; - else { - /* dispatch reverse pending buffers */ - /* chain eventually calls upon drain as well, but by that time - * gather list should be clear, so ok ... */ - if (dec->output_segment.rate < 0.0 && dec->priv->gather) - gst_audio_decoder_chain_reverse (dec, NULL); - /* have subclass give all it can */ - ret = gst_audio_decoder_push_buffers (dec, TRUE); - /* ensure all output sent */ - ret = gst_audio_decoder_output (dec, NULL); - /* everything should be away now */ - if (dec->priv->frames.length) { - /* not fatal/impossible though if subclass/codec eats stuff */ - GST_WARNING_OBJECT (dec, "still %d frames left after draining", - dec->priv->frames.length); - g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL); - g_queue_clear (&dec->priv->frames); - } - /* discard (unparsed) leftover */ - gst_adapter_clear (dec->priv->adapter); - return ret; + /* Apply any pending events before draining, as that + * may update the pending segment info */ + apply_pending_events (dec); + + /* dispatch reverse pending buffers */ + /* chain eventually calls upon drain as well, but by that time + * gather list should be clear, so ok ... */ + if (dec->output_segment.rate < 0.0 && dec->priv->gather) + gst_audio_decoder_chain_reverse (dec, NULL); + /* have subclass give all it can */ + ret = gst_audio_decoder_push_buffers (dec, TRUE); + if (ret != GST_FLOW_OK) { + GST_WARNING_OBJECT (dec, "audio decoder push buffers failed"); + goto drain_failed; + } + /* ensure all output sent */ + ret = gst_audio_decoder_output (dec, NULL); + if (ret != GST_FLOW_OK) + GST_WARNING_OBJECT (dec, "audio decoder output failed"); + +drain_failed: + /* everything should be away now */ + if (dec->priv->frames.length) { + /* not fatal/impossible though if subclass/codec eats stuff */ + GST_WARNING_OBJECT (dec, "still %d frames left after draining", + dec->priv->frames.length); + g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL); + g_queue_clear (&dec->priv->frames); } + + /* discard (unparsed) leftover */ + gst_adapter_clear (dec->priv->adapter); + return ret; } /* hard == FLUSH, otherwise discont */ @@ -1730,21 +1939,6 @@ return result; } -static gboolean -gst_audio_decoder_do_caps (GstAudioDecoder * dec) -{ - GstCaps *caps = gst_pad_get_current_caps (dec->sinkpad); - if (caps) { - if (!gst_audio_decoder_sink_setcaps (dec, caps)) { - gst_caps_unref (caps); - return FALSE; - } - gst_caps_unref (caps); - } - dec->priv->do_caps = FALSE; - return TRUE; -} - static GstFlowReturn gst_audio_decoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { @@ -1753,12 +1947,6 @@ dec = GST_AUDIO_DECODER (parent); - if (G_UNLIKELY (dec->priv->do_caps)) { - if (!gst_audio_decoder_do_caps (dec)) { - goto not_negotiated; - } - } - if (G_UNLIKELY (!gst_pad_has_current_caps (pad) && dec->priv->needs_format)) goto not_negotiated; @@ -1834,12 +2022,6 @@ gint caps_size; GstStructure *structure; - caps = gst_pad_get_current_caps (dec->srcpad); - if (caps && !gst_audio_info_from_caps (&dec->priv->ctx.info, caps)) - goto caps_error; - if (caps) - gst_caps_unref (caps); - caps = gst_pad_get_allowed_caps (dec->srcpad); if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps)) goto caps_error; @@ -1908,12 +2090,6 @@ "Chose default caps %" GST_PTR_FORMAT " for initial gap", caps); gst_caps_unref (caps); - if (!gst_audio_decoder_negotiate_unlocked (dec)) { - GST_INFO_OBJECT (dec, "Failed to negotiate default caps for initial gap"); - gst_pad_mark_reconfigure (dec->srcpad); - return FALSE; - } - return TRUE; caps_error: @@ -1929,23 +2105,26 @@ { gboolean ret; GstClockTime timestamp, duration; - - /* Check if there is a caps pending to be pushed */ - if (G_UNLIKELY (dec->priv->do_caps)) { - if (!gst_audio_decoder_do_caps (dec)) { - goto not_negotiated; - } - } + gboolean needs_reconfigure = FALSE; /* Ensure we have caps first */ GST_AUDIO_DECODER_STREAM_LOCK (dec); if (!GST_AUDIO_INFO_IS_VALID (&dec->priv->ctx.info)) { if (!gst_audio_decoder_negotiate_default_caps (dec)) { + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL), ("Decoder output not negotiated before GAP event.")); - GST_AUDIO_DECODER_STREAM_UNLOCK (dec); return FALSE; } + needs_reconfigure = TRUE; + } + needs_reconfigure = gst_pad_check_reconfigure (dec->srcpad) + || needs_reconfigure; + if (G_UNLIKELY (dec->priv->ctx.output_format_changed || needs_reconfigure)) { + if (!gst_audio_decoder_negotiate_unlocked (dec)) { + GST_WARNING_OBJECT (dec, "Failed to negotiate with downstream"); + gst_pad_mark_reconfigure (dec->srcpad); + } } GST_AUDIO_DECODER_STREAM_UNLOCK (dec); @@ -1985,14 +2164,6 @@ } } return ret; - - /* ERRORS */ -not_negotiated: - { - GST_ELEMENT_ERROR (dec, CORE, NEGOTIATION, (NULL), - ("decoder not initialized")); - return FALSE; - } } static GList * @@ -2021,15 +2192,18 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_STREAM_START: GST_AUDIO_DECODER_STREAM_LOCK (dec); + /* finish any data in current segment and clear the decoder + * to be ready for new stream data */ gst_audio_decoder_drain (dec); + gst_audio_decoder_flush (dec, FALSE); GST_DEBUG_OBJECT (dec, "received STREAM_START. Clearing taglist"); - /* Flush our merged taglist after a STREAM_START */ - if (dec->priv->taglist) { - gst_tag_list_unref (dec->priv->taglist); - dec->priv->taglist = NULL; + /* Flush upstream tags after a STREAM_START */ + if (dec->priv->upstream_tags) { + gst_tag_list_unref (dec->priv->upstream_tags); + dec->priv->upstream_tags = NULL; + dec->priv->taglist_changed = TRUE; } - dec->priv->taglist_changed = FALSE; GST_AUDIO_DECODER_STREAM_UNLOCK (dec); ret = gst_audio_decoder_push_event (dec, event); @@ -2076,22 +2250,17 @@ } } - /* finish current segment */ - gst_audio_decoder_drain (dec); - - { - /* prepare for next one */ - gst_audio_decoder_flush (dec, FALSE); - /* and that's where we time from, - * in case upstream does not come up with anything better - * (e.g. upstream BYTE) */ - if (format != GST_FORMAT_TIME) { - dec->priv->base_ts = seg.start; - dec->priv->samples = 0; - } + /* prepare for next segment */ + /* Use the segment start as a base timestamp + * in case upstream does not come up with anything better + * (e.g. upstream BYTE) */ + if (format != GST_FORMAT_TIME) { + dec->priv->base_ts = seg.start; + dec->priv->samples = 0; } /* and follow along with segment */ + dec->priv->in_out_segment_sync = FALSE; dec->input_segment = seg; dec->priv->pending_events = g_list_append (dec->priv->pending_events, event); @@ -2117,6 +2286,18 @@ ret = gst_audio_decoder_push_event (dec, event); break; + case GST_EVENT_SEGMENT_DONE: + GST_AUDIO_DECODER_STREAM_LOCK (dec); + gst_audio_decoder_drain (dec); + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + + /* Forward SEGMENT_DONE because no buffer or serialized event might come after + * SEGMENT_DONE and nothing could trigger another _finish_frame() call. */ + if (dec->priv->pending_events) + send_pending_events (dec); + ret = gst_audio_decoder_push_event (dec, event); + break; + case GST_EVENT_EOS: GST_AUDIO_DECODER_STREAM_LOCK (dec); gst_audio_decoder_drain (dec); @@ -2130,13 +2311,17 @@ /* Forward EOS because no buffer or serialized event will come after * EOS and nothing could trigger another _finish_frame() call. */ + if (dec->priv->pending_events) + send_pending_events (dec); ret = gst_audio_decoder_push_event (dec, event); break; case GST_EVENT_CAPS: { - ret = TRUE; - dec->priv->do_caps = TRUE; + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + ret = gst_audio_decoder_sink_setcaps (dec, caps); gst_event_unref (event); break; } @@ -2147,11 +2332,23 @@ gst_event_parse_tag (event, &tags); if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) { - gst_audio_decoder_merge_tags (dec, tags, GST_TAG_MERGE_REPLACE); + GST_AUDIO_DECODER_STREAM_LOCK (dec); + if (dec->priv->upstream_tags != tags) { + if (dec->priv->upstream_tags) + gst_tag_list_unref (dec->priv->upstream_tags); + dec->priv->upstream_tags = gst_tag_list_ref (tags); + GST_INFO_OBJECT (dec, "upstream stream tags: %" GST_PTR_FORMAT, tags); + } gst_event_unref (event); - event = NULL; - ret = TRUE; - break; + event = gst_audio_decoder_create_merged_tags_event (dec); + dec->priv->taglist_changed = FALSE; + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + + /* No tags, go out of here instead of fall through */ + if (!event) { + ret = TRUE; + break; + } } /* fall through */ @@ -2222,7 +2419,7 @@ return FALSE; } - if (end_type != GST_SEEK_TYPE_NONE || + if ((end_type != GST_SEEK_TYPE_SET && end_type != GST_SEEK_TYPE_NONE) || (end_type == GST_SEEK_TYPE_SET && end_time != GST_CLOCK_TIME_NONE)) { GST_DEBUG_OBJECT (dec, "unsupported seek: end time"); return FALSE; @@ -2451,14 +2648,52 @@ return res; } +/** + * gst_audio_decoder_proxy_getcaps: + * @decoder: a #GstAudioDecoder + * @caps: (allow-none): initial caps + * @filter: (allow-none): filter caps + * + * Returns caps that express @caps (or sink template caps if @caps == NULL) + * restricted to rate/channels/... combinations supported by downstream + * elements. + * + * Returns: (transfer full): a #GstCaps owned by caller + * + * Since: 1.6 + */ +GstCaps * +gst_audio_decoder_proxy_getcaps (GstAudioDecoder * decoder, GstCaps * caps, + GstCaps * filter) +{ + return __gst_audio_element_proxy_getcaps (GST_ELEMENT_CAST (decoder), + GST_AUDIO_DECODER_SINK_PAD (decoder), + GST_AUDIO_DECODER_SRC_PAD (decoder), caps, filter); +} + +static GstCaps * +gst_audio_decoder_sink_getcaps (GstAudioDecoder * decoder, GstCaps * filter) +{ + GstAudioDecoderClass *klass; + GstCaps *caps; + + klass = GST_AUDIO_DECODER_GET_CLASS (decoder); + + if (klass->getcaps) + caps = klass->getcaps (decoder, filter); + else + caps = gst_audio_decoder_proxy_getcaps (decoder, NULL, filter); + + GST_LOG_OBJECT (decoder, "Returning caps %" GST_PTR_FORMAT, caps); + + return caps; +} + static gboolean -gst_audio_decoder_sink_query (GstPad * pad, GstObject * parent, - GstQuery * query) +gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, GstQuery * query) { + GstPad *pad = GST_AUDIO_DECODER_SINK_PAD (dec); gboolean res = FALSE; - GstAudioDecoder *dec; - - dec = GST_AUDIO_DECODER (parent); GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query); @@ -2490,6 +2725,47 @@ res = klass->propose_allocation (dec, query); break; } + case GST_QUERY_CAPS:{ + GstCaps *filter, *caps; + + gst_query_parse_caps (query, &filter); + caps = gst_audio_decoder_sink_getcaps (dec, filter); + gst_query_set_caps_result (query, caps); + gst_caps_unref (caps); + res = TRUE; + break; + } + case GST_QUERY_ACCEPT_CAPS:{ + if (dec->priv->use_default_pad_acceptcaps) { + res = + gst_pad_query_default (GST_AUDIO_DECODER_SINK_PAD (dec), + GST_OBJECT_CAST (dec), query); + } else { + GstCaps *caps; + GstCaps *allowed_caps; + GstCaps *template_caps; + gboolean accept; + + gst_query_parse_accept_caps (query, &caps); + + template_caps = gst_pad_get_pad_template_caps (pad); + accept = gst_caps_is_subset (caps, template_caps); + gst_caps_unref (template_caps); + + if (accept) { + allowed_caps = gst_pad_query_caps (GST_AUDIO_DECODER_SINK_PAD (dec), + caps); + + accept = gst_caps_can_intersect (caps, allowed_caps); + + gst_caps_unref (allowed_caps); + } + + gst_query_set_accept_caps_result (query, accept); + res = TRUE; + } + break; + } case GST_QUERY_SEEKING: { GstFormat format; @@ -2504,7 +2780,7 @@ /* fall-through */ } default: - res = gst_pad_query_default (pad, parent, query); + res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query); break; } @@ -2512,18 +2788,35 @@ return res; } +static gboolean +gst_audio_decoder_sink_query (GstPad * pad, GstObject * parent, + GstQuery * query) +{ + GstAudioDecoderClass *dec_class; + GstAudioDecoder *dec; + gboolean ret = FALSE; + + dec = GST_AUDIO_DECODER (parent); + dec_class = GST_AUDIO_DECODER_GET_CLASS (dec); + + GST_DEBUG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query); + + if (dec_class->sink_query) + ret = dec_class->sink_query (dec, query); + + return ret; +} + /* FIXME ? are any of these queries (other than latency) a decoder's business ?? * also, the conversion stuff might seem to make sense, but seems to not mind * segment stuff etc at all * Supposedly that's backward compatibility ... */ static gboolean -gst_audio_decoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) +gst_audio_decoder_src_query_default (GstAudioDecoder * dec, GstQuery * query) { - GstAudioDecoder *dec; + GstPad *pad = GST_AUDIO_DECODER_SRC_PAD (dec); gboolean res = FALSE; - dec = GST_AUDIO_DECODER (parent); - GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query); switch (GST_QUERY_TYPE (query)) { @@ -2532,7 +2825,7 @@ GstFormat format; /* upstream in any case */ - if ((res = gst_pad_query_default (pad, parent, query))) + if ((res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query))) break; gst_query_parse_duration (query, &format, NULL); @@ -2617,9 +2910,10 @@ GST_OBJECT_LOCK (dec); /* add our latency */ - if (min_latency != -1) - min_latency += dec->priv->ctx.min_latency; - if (max_latency != -1) + min_latency += dec->priv->ctx.min_latency; + if (max_latency == -1 || dec->priv->ctx.max_latency == -1) + max_latency = -1; + else max_latency += dec->priv->ctx.max_latency; GST_OBJECT_UNLOCK (dec); @@ -2628,7 +2922,7 @@ break; } default: - res = gst_pad_query_default (pad, parent, query); + res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query); break; } @@ -2636,6 +2930,24 @@ } static gboolean +gst_audio_decoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) +{ + GstAudioDecoder *dec; + GstAudioDecoderClass *dec_class; + gboolean ret = FALSE; + + dec = GST_AUDIO_DECODER (parent); + dec_class = GST_AUDIO_DECODER_GET_CLASS (dec); + + GST_DEBUG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query); + + if (dec_class->src_query) + ret = dec_class->src_query (dec, query); + + return ret; +} + +static gboolean gst_audio_decoder_stop (GstAudioDecoder * dec) { GstAudioDecoderClass *klass; @@ -2955,11 +3267,17 @@ GstClockTime min, GstClockTime max) { g_return_if_fail (GST_IS_AUDIO_DECODER (dec)); + g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min)); + g_return_if_fail (min <= max); GST_OBJECT_LOCK (dec); dec->priv->ctx.min_latency = min; dec->priv->ctx.max_latency = max; GST_OBJECT_UNLOCK (dec); + + /* post latency message on the bus */ + gst_element_post_message (GST_ELEMENT (dec), + gst_message_new_latency (GST_OBJECT (dec))); } /** @@ -3234,36 +3552,39 @@ /** * gst_audio_decoder_merge_tags: * @dec: a #GstAudioDecoder - * @tags: a #GstTagList to merge - * @mode: the #GstTagMergeMode to use + * @tags: (allow-none): a #GstTagList to merge, or NULL + * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE * - * Adds tags to so-called pending tags, which will be processed - * before pushing out data downstream. + * Sets the audio decoder tags and how they should be merged with any + * upstream stream tags. This will override any tags previously-set + * with gst_audio_decoder_merge_tags(). * * Note that this is provided for convenience, and the subclass is - * not required to use this and can still do tag handling on its own, - * although it should be aware that baseclass already takes care - * of the usual CODEC/AUDIO_CODEC tags. - * - * MT safe. + * not required to use this and can still do tag handling on its own. */ void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, const GstTagList * tags, GstTagMergeMode mode) { - GstTagList *otags; - g_return_if_fail (GST_IS_AUDIO_DECODER (dec)); g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags)); + g_return_if_fail (mode != GST_TAG_MERGE_UNDEFINED); GST_AUDIO_DECODER_STREAM_LOCK (dec); - if (tags) - GST_DEBUG_OBJECT (dec, "merging tags %" GST_PTR_FORMAT, tags); - otags = dec->priv->taglist; - dec->priv->taglist = gst_tag_list_merge (dec->priv->taglist, tags, mode); - if (otags) - gst_tag_list_unref (otags); - dec->priv->taglist_changed = TRUE; + if (dec->priv->taglist != tags) { + if (dec->priv->taglist) { + gst_tag_list_unref (dec->priv->taglist); + dec->priv->taglist = NULL; + dec->priv->decoder_tags_merge_mode = GST_TAG_MERGE_KEEP_ALL; + } + if (tags) { + dec->priv->taglist = gst_tag_list_ref ((GstTagList *) tags); + dec->priv->decoder_tags_merge_mode = mode; + } + + GST_DEBUG_OBJECT (dec, "setting decoder tags to %" GST_PTR_FORMAT, tags); + dec->priv->taglist_changed = TRUE; + } GST_AUDIO_DECODER_STREAM_UNLOCK (dec); } @@ -3344,3 +3665,24 @@ if (params) *params = dec->priv->ctx.params; } + +/** + * gst_audio_decoder_set_use_default_pad_acceptcaps: + * @decoder: a #GstAudioDecoder + * @use: if the default pad accept-caps query handling should be used + * + * Lets #GstAudioDecoder sub-classes decide if they want the sink pad + * to use the default pad query handler to reply to accept-caps queries. + * + * By setting this to true it is possible to further customize the default + * handler with %GST_PAD_SET_ACCEPT_INTERSECT and + * %GST_PAD_SET_ACCEPT_TEMPLATE + * + * Since: 1.6 + */ +void +gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder, + gboolean use) +{ + decoder->priv->use_default_pad_acceptcaps = use; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiodecoder.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiodecoder.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiodecoder.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiodecoder.h 2015-10-22 08:01:34.000000000 +0000 @@ -231,6 +231,26 @@ * Propose buffer allocation parameters for upstream elements. * Subclasses should chain up to the parent implementation to * invoke the default handler. + * @sink_query: Optional. + * Query handler on the sink pad. This function should + * return TRUE if the query could be performed. Subclasses + * should chain up to the parent implementation to invoke the + * default handler. Since 1.6 + * @src_query: Optional. + * Query handler on the source pad. This function should + * return TRUE if the query could be performed. Subclasses + * should chain up to the parent implementation to invoke the + * default handler. Since 1.6 + * @getcaps: Optional. + * Allows for a custom sink getcaps implementation. + * If not implemented, + * default returns gst_audio_decoder_proxy_getcaps + * applied to sink template caps. + * @transform_meta: Optional. Transform the metadata on the input buffer to the + * output buffer. By default this method copies all meta without + * tags and meta with only the "audio" tag. subclasses can + * implement this method and return %TRUE if the metadata is to be + * copied. Since 1.6 * * Subclasses can override any of the available virtual methods or not, as * needed. At minimum @handle_frame (and likely @set_format) needs to be @@ -278,8 +298,18 @@ gboolean (*propose_allocation) (GstAudioDecoder *dec, GstQuery * query); + gboolean (*sink_query) (GstAudioDecoder *dec, GstQuery *query); + + gboolean (*src_query) (GstAudioDecoder *dec, GstQuery *query); + + GstCaps * (*getcaps) (GstAudioDecoder * dec, + GstCaps * filter); + + gboolean (*transform_meta) (GstAudioDecoder *enc, GstBuffer *outbuf, + GstMeta *meta, GstBuffer *inbuf); + /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; + gpointer _gst_reserved[GST_PADDING_LARGE - 4]; }; GType gst_audio_decoder_get_type (void); @@ -287,6 +317,9 @@ gboolean gst_audio_decoder_set_output_format (GstAudioDecoder * dec, const GstAudioInfo * info); +GstCaps * gst_audio_decoder_proxy_getcaps (GstAudioDecoder * decoder, + GstCaps * caps, + GstCaps * filter); gboolean gst_audio_decoder_negotiate (GstAudioDecoder * dec); GstFlowReturn gst_audio_decoder_finish_frame (GstAudioDecoder * dec, @@ -361,6 +394,9 @@ void gst_audio_decoder_merge_tags (GstAudioDecoder * dec, const GstTagList * tags, GstTagMergeMode mode); +void gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder, + gboolean use); + G_END_DECLS #endif /* _GST_AUDIO_DECODER_H_ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioencoder.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioencoder.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioencoder.c 2014-09-19 06:38:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioencoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -152,6 +152,7 @@ #endif #include "gstaudioencoder.h" +#include "gstaudioutilsprivate.h" #include #include #include @@ -257,9 +258,15 @@ gboolean hard_min; gboolean drainable; - /* pending tags */ + /* upstream stream tags (global tags are passed through as-is) */ + GstTagList *upstream_tags; + + /* subclass tags */ GstTagList *tags; + GstTagMergeMode tags_merge_mode; + gboolean tags_changed; + /* pending serialized sink events, will be sent from finish_frame() */ GList *pending_events; }; @@ -343,6 +350,14 @@ static gboolean gst_audio_encoder_negotiate_default (GstAudioEncoder * enc); static gboolean gst_audio_encoder_negotiate_unlocked (GstAudioEncoder * enc); +static gboolean gst_audio_encoder_transform_meta_default (GstAudioEncoder * + encoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf); + +static gboolean gst_audio_encoder_sink_query_default (GstAudioEncoder * encoder, + GstQuery * query); +static gboolean gst_audio_encoder_src_query_default (GstAudioEncoder * encoder, + GstQuery * query); + static void gst_audio_encoder_class_init (GstAudioEncoderClass * klass) { @@ -388,9 +403,12 @@ klass->getcaps = gst_audio_encoder_getcaps_default; klass->sink_event = gst_audio_encoder_sink_event_default; klass->src_event = gst_audio_encoder_src_event_default; + klass->sink_query = gst_audio_encoder_sink_query_default; + klass->src_query = gst_audio_encoder_src_query_default; klass->propose_allocation = gst_audio_encoder_propose_allocation_default; klass->decide_allocation = gst_audio_encoder_decide_allocation_default; klass->negotiate = gst_audio_encoder_negotiate_default; + klass->transform_meta = gst_audio_encoder_transform_meta_default; } static void @@ -445,6 +463,8 @@ enc->priv->drainable = DEFAULT_DRAINABLE; /* init state */ + enc->priv->ctx.min_latency = 0; + enc->priv->ctx.max_latency = 0; gst_audio_encoder_reset (enc, TRUE); GST_DEBUG_OBJECT (enc, "init ok"); } @@ -476,9 +496,14 @@ memset (&enc->priv->ctx, 0, sizeof (enc->priv->ctx)); gst_audio_info_init (&enc->priv->ctx.info); + if (enc->priv->upstream_tags) { + gst_tag_list_unref (enc->priv->upstream_tags); + enc->priv->upstream_tags = NULL; + } if (enc->priv->tags) gst_tag_list_unref (enc->priv->tags); enc->priv->tags = NULL; + enc->priv->tags_merge_mode = GST_TAG_MERGE_APPEND; enc->priv->tags_changed = FALSE; g_list_foreach (enc->priv->pending_events, (GFunc) gst_event_unref, NULL); @@ -597,32 +622,111 @@ } } -static inline void -gst_audio_encoder_check_and_push_ending_tags (GstAudioEncoder * enc) +static GstEvent * +gst_audio_encoder_create_merged_tags_event (GstAudioEncoder * enc) { - if (G_UNLIKELY (enc->priv->tags && enc->priv->tags_changed)) { -#if 0 - GstCaps *caps; -#endif + GstTagList *merged_tags; + + GST_LOG_OBJECT (enc, "upstream : %" GST_PTR_FORMAT, enc->priv->upstream_tags); + GST_LOG_OBJECT (enc, "encoder : %" GST_PTR_FORMAT, enc->priv->tags); + GST_LOG_OBJECT (enc, "mode : %d", enc->priv->tags_merge_mode); + + merged_tags = + gst_tag_list_merge (enc->priv->upstream_tags, enc->priv->tags, + enc->priv->tags_merge_mode); + + GST_DEBUG_OBJECT (enc, "merged : %" GST_PTR_FORMAT, merged_tags); - /* add codec info to pending tags */ + if (merged_tags == NULL) + return NULL; + + if (gst_tag_list_is_empty (merged_tags)) { + gst_tag_list_unref (merged_tags); + return NULL; + } + + /* add codec info to pending tags */ #if 0 - if (!enc->priv->tags) - enc->priv->tags = gst_tag_list_new (); - enc->priv->tags = gst_tag_list_make_writable (enc->priv->tags); - caps = gst_pad_get_current_caps (enc->srcpad); - gst_pb_utils_add_codec_description_to_tag_list (enc->priv->tags, - GST_TAG_CODEC, caps); - gst_pb_utils_add_codec_description_to_tag_list (enc->priv->tags, - GST_TAG_AUDIO_CODEC, caps); + caps = gst_pad_get_current_caps (enc->srcpad); + gst_pb_utils_add_codec_description_to_tag_list (merged_tags, + GST_TAG_AUDIO_CODEC, caps); #endif - GST_DEBUG_OBJECT (enc, "sending tags %" GST_PTR_FORMAT, enc->priv->tags); - gst_audio_encoder_push_event (enc, - gst_event_new_tag (gst_tag_list_ref (enc->priv->tags))); + + return gst_event_new_tag (merged_tags); +} + +static void +gst_audio_encoder_check_and_push_pending_tags (GstAudioEncoder * enc) +{ + if (enc->priv->tags_changed) { + GstEvent *tags_event; + + tags_event = gst_audio_encoder_create_merged_tags_event (enc); + + if (tags_event != NULL) + gst_audio_encoder_push_event (enc, tags_event); + enc->priv->tags_changed = FALSE; } } + +static gboolean +gst_audio_encoder_transform_meta_default (GstAudioEncoder * + encoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) + return TRUE; + + return FALSE; +} + +typedef struct +{ + GstAudioEncoder *encoder; + GstBuffer *outbuf; +} CopyMetaData; + +static gboolean +foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) +{ + CopyMetaData *data = user_data; + GstAudioEncoder *encoder = data->encoder; + GstAudioEncoderClass *klass = GST_AUDIO_ENCODER_GET_CLASS (encoder); + GstBuffer *outbuf = data->outbuf; + const GstMetaInfo *info = (*meta)->info; + gboolean do_copy = FALSE; + + if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) { + /* never call the transform_meta with memory specific metadata */ + GST_DEBUG_OBJECT (encoder, "not copying memory specific metadata %s", + g_type_name (info->api)); + do_copy = FALSE; + } else if (klass->transform_meta) { + do_copy = klass->transform_meta (encoder, outbuf, *meta, inbuf); + GST_DEBUG_OBJECT (encoder, "transformed metadata %s: copy: %d", + g_type_name (info->api), do_copy); + } + + /* we only copy metadata when the subclass implemented a transform_meta + * function and when it returns %TRUE */ + if (do_copy) { + GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; + GST_DEBUG_OBJECT (encoder, "copy metadata %s", g_type_name (info->api)); + /* simply copy then */ + info->transform_func (outbuf, *meta, inbuf, + _gst_meta_transform_copy, ©_data); + } + return TRUE; +} + /** * gst_audio_encoder_finish_frame: * @enc: a #GstAudioEncoder @@ -651,6 +755,7 @@ GstAudioEncoderContext *ctx; GstFlowReturn ret = GST_FLOW_OK; gboolean needs_reconfigure = FALSE; + GstBuffer *inbuf = NULL; klass = GST_AUDIO_ENCODER_GET_CLASS (enc); priv = enc->priv; @@ -688,8 +793,8 @@ gst_audio_encoder_push_pending_events (enc); - /* send after pending events, which likely includes newsegment event */ - gst_audio_encoder_check_and_push_ending_tags (enc); + /* send after pending events, which likely includes segment event */ + gst_audio_encoder_check_and_push_pending_tags (enc); /* remove corresponding samples from input */ if (samples < 0) @@ -740,20 +845,30 @@ } /* advance sample view */ if (G_UNLIKELY (samples * ctx->info.bpf > priv->offset)) { + guint avail = gst_adapter_available (priv->adapter); + if (G_LIKELY (!priv->force)) { - /* no way we can let this pass */ - g_assert_not_reached (); - /* really no way */ + /* we should have received EOS to enable force */ goto overflow; } else { priv->offset = 0; - if (samples * ctx->info.bpf >= gst_adapter_available (priv->adapter)) + if (avail > 0 && samples * ctx->info.bpf >= avail) { + inbuf = gst_adapter_take_buffer_fast (priv->adapter, avail); gst_adapter_clear (priv->adapter); - else - gst_adapter_flush (priv->adapter, samples * ctx->info.bpf); + } else if (avail > 0) { + inbuf = + gst_adapter_take_buffer_fast (priv->adapter, + samples * ctx->info.bpf); + } } } else { - gst_adapter_flush (priv->adapter, samples * ctx->info.bpf); + guint avail = gst_adapter_available (priv->adapter); + + if (avail > 0) { + inbuf = + gst_adapter_take_buffer_fast (priv->adapter, + samples * ctx->info.bpf); + } priv->offset -= samples * ctx->info.bpf; /* avoid subsequent stray prev_ts */ if (G_UNLIKELY (gst_adapter_available (priv->adapter) == 0)) @@ -843,6 +958,19 @@ } } + if (klass->transform_meta) { + if (G_LIKELY (inbuf)) { + CopyMetaData data; + + data.encoder = enc; + data.outbuf = buf; + gst_buffer_foreach_meta (inbuf, foreach_metadata, &data); + } else { + GST_WARNING_OBJECT (enc, + "Can't copy metadata because input buffer disappeared"); + } + } + priv->bytes_out += size; if (G_UNLIKELY (priv->discont)) { @@ -878,6 +1006,9 @@ } exit: + if (inbuf) + gst_buffer_unref (inbuf); + GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); return ret; @@ -893,11 +1024,14 @@ overflow: { GST_ELEMENT_ERROR (enc, STREAM, ENCODE, - ("received more encoded samples %d than provided %d", + ("received more encoded samples %d than provided %d as inputs", samples, priv->offset / ctx->info.bpf), (NULL)); if (buf) gst_buffer_unref (buf); ret = GST_FLOW_ERROR; + /* no way we can let this pass */ + g_assert_not_reached (); + /* really no way */ goto exit; } } @@ -1246,8 +1380,6 @@ GstAudioInfo state; gboolean res = TRUE; guint old_rate; - GstClockTime old_min_latency; - GstClockTime old_max_latency; klass = GST_AUDIO_ENCODER_GET_CLASS (enc); @@ -1290,12 +1422,6 @@ enc->priv->ctx.frame_max = 0; enc->priv->ctx.lookahead = 0; - /* element might report latency */ - GST_OBJECT_LOCK (enc); - old_min_latency = ctx->min_latency; - old_max_latency = ctx->max_latency; - GST_OBJECT_UNLOCK (enc); - if (klass->set_format) res = klass->set_format (enc, &state); @@ -1309,18 +1435,6 @@ goto exit; } - /* notify if new latency */ - GST_OBJECT_LOCK (enc); - if ((ctx->min_latency > 0 && ctx->min_latency != old_min_latency) || - (ctx->max_latency > 0 && ctx->max_latency != old_max_latency)) { - GST_OBJECT_UNLOCK (enc); - /* post latency message on the bus */ - gst_element_post_message (GST_ELEMENT (enc), - gst_message_new_latency (GST_OBJECT (enc))); - GST_OBJECT_LOCK (enc); - } - GST_OBJECT_UNLOCK (enc); - exit: GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); @@ -1345,83 +1459,22 @@ /** * gst_audio_encoder_proxy_getcaps: * @enc: a #GstAudioEncoder - * @caps: initial caps - * @filter: filter caps + * @caps: (allow-none): initial caps + * @filter: (allow-none): filter caps * * Returns caps that express @caps (or sink template caps if @caps == NULL) * restricted to channel/rate combinations supported by downstream elements * (e.g. muxers). * - * Returns: a #GstCaps owned by caller + * Returns: (transfer full): a #GstCaps owned by caller */ GstCaps * gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc, GstCaps * caps, GstCaps * filter) { - GstCaps *templ_caps = NULL; - GstCaps *allowed = NULL; - GstCaps *fcaps, *filter_caps; - gint i, j; - - /* we want to be able to communicate to upstream elements like audioconvert - * and audioresample any rate/channel restrictions downstream (e.g. muxer - * only accepting certain sample rates) */ - templ_caps = - caps ? gst_caps_ref (caps) : gst_pad_get_pad_template_caps (enc->sinkpad); - allowed = gst_pad_get_allowed_caps (enc->srcpad); - if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) { - fcaps = templ_caps; - goto done; - } - - GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, templ_caps); - GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed); - - filter_caps = gst_caps_new_empty (); - - for (i = 0; i < gst_caps_get_size (templ_caps); i++) { - GQuark q_name; - - q_name = gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); - - /* pick rate + channel fields from allowed caps */ - for (j = 0; j < gst_caps_get_size (allowed); j++) { - const GstStructure *allowed_s = gst_caps_get_structure (allowed, j); - const GValue *val; - GstStructure *s; - - s = gst_structure_new_id_empty (q_name); - if ((val = gst_structure_get_value (allowed_s, "rate"))) - gst_structure_set_value (s, "rate", val); - if ((val = gst_structure_get_value (allowed_s, "channels"))) - gst_structure_set_value (s, "channels", val); - /* following might also make sense for some encoded formats, - * e.g. wavpack */ - if ((val = gst_structure_get_value (allowed_s, "channel-mask"))) - gst_structure_set_value (s, "channel-mask", val); - - filter_caps = gst_caps_merge_structure (filter_caps, s); - } - } - - fcaps = gst_caps_intersect (filter_caps, templ_caps); - gst_caps_unref (filter_caps); - gst_caps_unref (templ_caps); - - if (filter) { - GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter); - filter_caps = gst_caps_intersect_full (filter, fcaps, - GST_CAPS_INTERSECT_FIRST); - gst_caps_unref (fcaps); - fcaps = filter_caps; - } - -done: - gst_caps_replace (&allowed, NULL); - - GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps); - - return fcaps; + return __gst_audio_element_proxy_getcaps (GST_ELEMENT_CAST (enc), + GST_AUDIO_ENCODER_SINK_PAD (enc), GST_AUDIO_ENCODER_SRC_PAD (enc), + caps, filter); } static GstCaps * @@ -1520,7 +1573,7 @@ /* check for pending events and tags */ gst_audio_encoder_push_pending_events (enc); - gst_audio_encoder_check_and_push_ending_tags (enc); + gst_audio_encoder_check_and_push_pending_tags (enc); GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); @@ -1541,6 +1594,21 @@ break; } + case GST_EVENT_STREAM_START: + { + GST_AUDIO_ENCODER_STREAM_LOCK (enc); + /* Flush upstream tags after a STREAM_START */ + GST_DEBUG_OBJECT (enc, "received STREAM_START. Clearing taglist"); + if (enc->priv->upstream_tags) { + gst_tag_list_unref (enc->priv->upstream_tags); + enc->priv->upstream_tags = NULL; + enc->priv->tags_changed = TRUE; + } + GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); + res = gst_audio_encoder_push_event (enc, event); + break; + } + case GST_EVENT_TAG: { GstTagList *tags; @@ -1548,31 +1616,40 @@ gst_event_parse_tag (event, &tags); if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) { - tags = gst_tag_list_copy (tags); - - /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */ - gst_tag_list_remove_tag (tags, GST_TAG_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT); - gst_tag_list_remove_tag (tags, GST_TAG_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_ENCODER); - gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION); + GST_AUDIO_ENCODER_STREAM_LOCK (enc); + if (enc->priv->upstream_tags != tags) { + tags = gst_tag_list_copy (tags); - gst_audio_encoder_merge_tags (enc, tags, GST_TAG_MERGE_REPLACE); - gst_tag_list_unref (tags); + /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */ + gst_tag_list_remove_tag (tags, GST_TAG_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT); + gst_tag_list_remove_tag (tags, GST_TAG_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_ENCODER); + gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION); + + if (enc->priv->upstream_tags) + gst_tag_list_unref (enc->priv->upstream_tags); + enc->priv->upstream_tags = tags; + GST_INFO_OBJECT (enc, "upstream stream tags: %" GST_PTR_FORMAT, tags); + } gst_event_unref (event); - event = NULL; - res = TRUE; - break; + event = gst_audio_encoder_create_merged_tags_event (enc); + GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); + + /* No tags, go out of here instead of fall through */ + if (!event) { + res = TRUE; + break; + } } /* fall through */ } - default: /* Forward non-serialized events immediately. */ if (!GST_EVENT_IS_SERIALIZED (event)) { @@ -1617,13 +1694,10 @@ } static gboolean -gst_audio_encoder_sink_query (GstPad * pad, GstObject * parent, - GstQuery * query) +gst_audio_encoder_sink_query_default (GstAudioEncoder * enc, GstQuery * query) { + GstPad *pad = GST_AUDIO_ENCODER_SINK_PAD (enc); gboolean res = FALSE; - GstAudioEncoder *enc; - - enc = GST_AUDIO_ENCODER (parent); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_FORMATS: @@ -1671,7 +1745,7 @@ break; } default: - res = gst_pad_query_default (pad, parent, query); + res = gst_pad_query_default (pad, GST_OBJECT (enc), query); break; } @@ -1680,6 +1754,26 @@ } static gboolean +gst_audio_encoder_sink_query (GstPad * pad, GstObject * parent, + GstQuery * query) +{ + GstAudioEncoder *encoder; + GstAudioEncoderClass *encoder_class; + gboolean ret = FALSE; + + encoder = GST_AUDIO_ENCODER (parent); + encoder_class = GST_AUDIO_ENCODER_GET_CLASS (encoder); + + GST_DEBUG_OBJECT (encoder, "received query %d, %s", GST_QUERY_TYPE (query), + GST_QUERY_TYPE_NAME (query)); + + if (encoder_class->sink_query) + ret = encoder_class->sink_query (encoder, query); + + return ret; +} + +static gboolean gst_audio_encoder_src_event_default (GstAudioEncoder * enc, GstEvent * event) { gboolean res; @@ -1828,13 +1922,11 @@ * segment stuff etc at all * Supposedly that's backward compatibility ... */ static gboolean -gst_audio_encoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) +gst_audio_encoder_src_query_default (GstAudioEncoder * enc, GstQuery * query) { - GstAudioEncoder *enc; + GstPad *pad = GST_AUDIO_ENCODER_SRC_PAD (enc); gboolean res = FALSE; - enc = GST_AUDIO_ENCODER (parent); - GST_LOG_OBJECT (enc, "handling query: %" GST_PTR_FORMAT, query); switch (GST_QUERY_TYPE (query)) { @@ -1914,9 +2006,10 @@ GST_OBJECT_LOCK (enc); /* add our latency */ - if (min_latency != -1) - min_latency += enc->priv->ctx.min_latency; - if (max_latency != -1) + min_latency += enc->priv->ctx.min_latency; + if (max_latency == -1 || enc->priv->ctx.max_latency == -1) + max_latency = -1; + else max_latency += enc->priv->ctx.max_latency; GST_OBJECT_UNLOCK (enc); @@ -1925,13 +2018,33 @@ break; } default: - res = gst_pad_query_default (pad, parent, query); + res = gst_pad_query_default (pad, GST_OBJECT (enc), query); break; } return res; } +static gboolean +gst_audio_encoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) +{ + GstAudioEncoder *encoder; + GstAudioEncoderClass *encoder_class; + gboolean ret = FALSE; + + encoder = GST_AUDIO_ENCODER (parent); + encoder_class = GST_AUDIO_ENCODER_GET_CLASS (encoder); + + GST_DEBUG_OBJECT (encoder, "received query %d, %s", GST_QUERY_TYPE (query), + GST_QUERY_TYPE_NAME (query)); + + if (encoder_class->src_query) + ret = encoder_class->src_query (encoder, query); + + return ret; +} + + static void gst_audio_encoder_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) @@ -2000,11 +2113,8 @@ GST_DEBUG_OBJECT (enc, "activate %d", active); if (active) { - - if (enc->priv->tags) - gst_tag_list_unref (enc->priv->tags); - enc->priv->tags = gst_tag_list_new_empty (); - enc->priv->tags_changed = FALSE; + /* arrange clean state */ + gst_audio_encoder_reset (enc, TRUE); if (!enc->priv->active && klass->start) result = klass->start (enc); @@ -2202,6 +2312,8 @@ GstClockTime min, GstClockTime max) { g_return_if_fail (GST_IS_AUDIO_ENCODER (enc)); + g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min)); + g_return_if_fail (min <= max); GST_OBJECT_LOCK (enc); enc->priv->ctx.min_latency = min; @@ -2210,6 +2322,10 @@ GST_LOG_OBJECT (enc, "set to %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT, GST_TIME_ARGS (min), GST_TIME_ARGS (max)); + + /* post latency message on the bus */ + gst_element_post_message (GST_ELEMENT (enc), + gst_message_new_latency (GST_OBJECT (enc))); } /** @@ -2532,16 +2648,16 @@ /** * gst_audio_encoder_merge_tags: * @enc: a #GstAudioEncoder - * @tags: a #GstTagList to merge - * @mode: the #GstTagMergeMode to use - * - * Adds tags to so-called pending tags, which will be processed - * before pushing out data downstream. + * @tags: (allow-none): a #GstTagList to merge, or NULL to unset + * previously-set tags + * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE + * + * Sets the audio encoder tags and how they should be merged with any + * upstream stream tags. This will override any tags previously-set + * with gst_audio_encoder_merge_tags(). * * Note that this is provided for convenience, and the subclass is - * not required to use this and can still do tag handling on its own, - * although it should be aware that baseclass already takes care - * of the usual CODEC/AUDIO_CODEC tags. + * not required to use this and can still do tag handling on its own. * * MT safe. */ @@ -2549,19 +2665,25 @@ gst_audio_encoder_merge_tags (GstAudioEncoder * enc, const GstTagList * tags, GstTagMergeMode mode) { - GstTagList *otags; - g_return_if_fail (GST_IS_AUDIO_ENCODER (enc)); g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags)); + g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED); GST_AUDIO_ENCODER_STREAM_LOCK (enc); - if (tags) - GST_DEBUG_OBJECT (enc, "merging tags %" GST_PTR_FORMAT, tags); - otags = enc->priv->tags; - enc->priv->tags = gst_tag_list_merge (enc->priv->tags, tags, mode); - if (otags) - gst_tag_list_unref (otags); - enc->priv->tags_changed = TRUE; + if (enc->priv->tags != tags) { + if (enc->priv->tags) { + gst_tag_list_unref (enc->priv->tags); + enc->priv->tags = NULL; + enc->priv->tags_merge_mode = GST_TAG_MERGE_APPEND; + } + if (tags) { + enc->priv->tags = gst_tag_list_ref ((GstTagList *) tags); + enc->priv->tags_merge_mode = mode; + } + + GST_DEBUG_OBJECT (enc, "setting encoder tags to %" GST_PTR_FORMAT, tags); + enc->priv->tags_changed = TRUE; + } GST_AUDIO_ENCODER_STREAM_UNLOCK (enc); } @@ -2704,7 +2826,7 @@ /* * gst_audio_encoder_set_output_format: * @enc: a #GstAudioEncoder - * @caps: #GstCaps + * @caps: (transfer none): #GstCaps * * Configure output caps on the srcpad of @enc. * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioencoder.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioencoder.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioencoder.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioencoder.h 2015-10-22 08:01:34.000000000 +0000 @@ -174,6 +174,21 @@ * Propose buffer allocation parameters for upstream elements. * Subclasses should chain up to the parent implementation to * invoke the default handler. + * @transform_meta: Optional. Transform the metadata on the input buffer to the + * output buffer. By default this method copies all meta without + * tags and meta with only the "audio" tag. subclasses can + * implement this method and return %TRUE if the metadata is to be + * copied. Since 1.6 + * @sink_query: Optional. + * Query handler on the sink pad. This function should + * return TRUE if the query could be performed. Subclasses + * should chain up to the parent implementation to invoke the + * default handler. Since 1.6 + * @src_query: Optional. + * Query handler on the source pad. This function should + * return TRUE if the query could be performed. Subclasses + * should chain up to the parent implementation to invoke the + * default handler. Since 1.6 * * Subclasses can override any of the available virtual methods or not, as * needed. At minimum @set_format and @handle_frame needs to be overridden. @@ -218,8 +233,18 @@ gboolean (*propose_allocation) (GstAudioEncoder * enc, GstQuery * query); + gboolean (*transform_meta) (GstAudioEncoder *enc, GstBuffer *outbuf, + GstMeta *meta, GstBuffer *inbuf); + + gboolean (*sink_query) (GstAudioEncoder *encoder, + GstQuery *query); + + gboolean (*src_query) (GstAudioEncoder *encoder, + GstQuery *query); + + /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; + gpointer _gst_reserved[GST_PADDING_LARGE-3]; }; GType gst_audio_encoder_get_type (void); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiofilter.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiofilter.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiofilter.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiofilter.c 2015-10-22 08:01:34.000000000 +0000 @@ -63,6 +63,25 @@ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstAudioFilter, gst_audio_filter, GST_TYPE_BASE_TRANSFORM, do_init); +static gboolean +gst_audio_filter_transform_meta (GstBaseTransform * trans, GstBuffer * inbuf, + GstMeta * meta, GstBuffer * outbuf) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) + return TRUE; + + return + GST_BASE_TRANSFORM_CLASS (gst_audio_filter_parent_class)->transform_meta + (trans, inbuf, meta, outbuf); +} + static void gst_audio_filter_class_init (GstAudioFilterClass * klass) { @@ -74,6 +93,7 @@ basetrans_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_filter_set_caps); basetrans_class->get_unit_size = GST_DEBUG_FUNCPTR (gst_audio_filter_get_unit_size); + basetrans_class->transform_meta = gst_audio_filter_transform_meta; } static void diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioiec61937.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioiec61937.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioiec61937.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioiec61937.c 2015-10-22 08:01:34.000000000 +0000 @@ -114,12 +114,15 @@ if (version == 1 && layer == 1) frames = 384; - else if (version == 2 && layer == 1 && spec->info.rate < 32000) + else if (version == 2 && layer == 1 && spec->info.rate <= 12000) frames = 768; - else if (version == 2 && layer == 1 && spec->info.rate < 32000) + else if (version == 2 && layer == 2 && spec->info.rate <= 12000) frames = 2304; - else + else { + /* MPEG-1 layer 2,3, MPEG-2 with or without extension, + * MPEG-2 layer 3 low sample freq. */ frames = 1152; + } return frames * 4; } @@ -273,17 +276,18 @@ * 06 = MPEG 2, with extension * 08 - MPEG 2 LSF, Layer 1 * 09 - MPEG 2 LSF, Layer 2 - * 10 - MPEG 2 LSF, Layer 3 */ + * 10 - MPEG 2 LSF, Layer 3 + * FIXME: we don't handle type 06 at the moment */ if (version == 1 && layer == 1) dst[five] = 0x04; else if ((version == 1 && (layer == 2 || layer == 3)) || - (version == 2 && spec->info.rate >= 32000)) + (version == 2 && spec->info.rate >= 12000)) dst[five] = 0x05; - else if (version == 2 && layer == 1 && spec->info.rate < 32000) + else if (version == 2 && layer == 1 && spec->info.rate < 12000) dst[five] = 0x08; - else if (version == 2 && layer == 2 && spec->info.rate < 32000) + else if (version == 2 && layer == 2 && spec->info.rate < 12000) dst[five] = 0x09; - else if (version == 2 && layer == 3 && spec->info.rate < 32000) + else if (version == 2 && layer == 3 && spec->info.rate < 12000) dst[five] = 0x0A; else g_return_val_if_reached (FALSE); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiometa.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiometa.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiometa.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiometa.c 2015-10-22 08:01:34.000000000 +0000 @@ -59,12 +59,20 @@ gst_audio_downmix_meta_transform (GstBuffer * dest, GstMeta * meta, GstBuffer * buffer, GQuark type, gpointer data) { - GstAudioDownmixMeta *smeta; + GstAudioDownmixMeta *smeta, *dmeta; smeta = (GstAudioDownmixMeta *) meta; - gst_buffer_add_audio_downmix_meta (dest, smeta->from_position, - smeta->from_channels, smeta->to_position, smeta->to_channels, - (const gfloat **) smeta->matrix); + + if (GST_META_TRANSFORM_IS_COPY (type)) { + dmeta = gst_buffer_add_audio_downmix_meta (dest, smeta->from_position, + smeta->from_channels, smeta->to_position, smeta->to_channels, + (const gfloat **) smeta->matrix); + if (!dmeta) + return FALSE; + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; + } return TRUE; } @@ -79,7 +87,7 @@ * Find the #GstAudioDownmixMeta on @buffer for the given destination * channel positions. * - * Returns: the #GstAudioDownmixMeta on @buffer. + * Returns: (transfer none): the #GstAudioDownmixMeta on @buffer. */ GstAudioDownmixMeta * gst_buffer_get_audio_downmix_meta_for_channels (GstBuffer * buffer, @@ -119,7 +127,7 @@ * the input channels with the coefficients in @matrix[i] and taking the sum * of the results. * - * Returns: the #GstAudioDownmixMeta on @buffer. + * Returns: (transfer none): the #GstAudioDownmixMeta on @buffer. */ GstAudioDownmixMeta * gst_buffer_add_audio_downmix_meta (GstBuffer * buffer, diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiopack-dist.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiopack-dist.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiopack-dist.c 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiopack-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -250,7 +250,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << 24; + var39.i = ((orc_uint32) var38.i) << 24; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -292,7 +292,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << 24; + var39.i = ((orc_uint32) var38.i) << 24; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -391,7 +391,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << 24; + var35.i = ((orc_uint32) var37.i) << 24; /* 4: storel */ ptr0[i] = var35; } @@ -423,7 +423,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << 24; + var35.i = ((orc_uint32) var37.i) << 24; /* 4: storel */ ptr0[i] = var35; } @@ -522,7 +522,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << 16; + var37.i = ((orc_uint32) var36.i) << 16; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -561,7 +561,7 @@ /* 1: convuwl */ var36.i = (orc_uint16) var33.i; /* 2: shll */ - var37.i = var36.i << 16; + var37.i = ((orc_uint32) var36.i) << 16; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -654,7 +654,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var34.i = var35.i << 16; + var34.i = ((orc_uint32) var35.i) << 16; /* 3: storel */ ptr0[i] = var34; } @@ -683,7 +683,7 @@ /* 1: convuwl */ var35.i = (orc_uint16) var33.i; /* 2: shll */ - var34.i = var35.i << 16; + var34.i = ((orc_uint32) var35.i) << 16; /* 3: storel */ ptr0[i] = var34; } @@ -781,7 +781,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << 16; + var39.i = ((orc_uint32) var38.i) << 16; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -823,7 +823,7 @@ /* 2: convuwl */ var38.i = (orc_uint16) var37.i; /* 3: shll */ - var39.i = var38.i << 16; + var39.i = ((orc_uint32) var38.i) << 16; /* 5: xorl */ var36.i = var39.i ^ var35.i; /* 6: storel */ @@ -923,7 +923,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << 16; + var35.i = ((orc_uint32) var37.i) << 16; /* 4: storel */ ptr0[i] = var35; } @@ -955,7 +955,7 @@ /* 2: convuwl */ var37.i = (orc_uint16) var36.i; /* 3: shll */ - var35.i = var37.i << 16; + var35.i = ((orc_uint32) var37.i) << 16; /* 4: storel */ ptr0[i] = var35; } @@ -1051,7 +1051,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << 8; + var36.i = ((orc_uint32) var33.i) << 8; /* 3: xorl */ var35.i = var36.i ^ var34.i; /* 4: storel */ @@ -1087,7 +1087,7 @@ /* 0: loadl */ var33 = ptr4[i]; /* 1: shll */ - var36.i = var33.i << 8; + var36.i = ((orc_uint32) var33.i) << 8; /* 3: xorl */ var35.i = var36.i ^ var34.i; /* 4: storel */ @@ -1175,7 +1175,7 @@ /* 0: loadl */ var32 = ptr4[i]; /* 1: shll */ - var33.i = var32.i << 8; + var33.i = ((orc_uint32) var32.i) << 8; /* 2: storel */ ptr0[i] = var33; } @@ -1201,7 +1201,7 @@ /* 0: loadl */ var32 = ptr4[i]; /* 1: shll */ - var33.i = var32.i << 8; + var33.i = ((orc_uint32) var32.i) << 8; /* 2: storel */ ptr0[i] = var33; } @@ -1293,7 +1293,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << 8; + var37.i = ((orc_uint32) var36.i) << 8; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -1332,7 +1332,7 @@ /* 1: swapl */ var36.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var37.i = var36.i << 8; + var37.i = ((orc_uint32) var36.i) << 8; /* 4: xorl */ var35.i = var37.i ^ var34.i; /* 5: storel */ @@ -1426,7 +1426,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var34.i = var35.i << 8; + var34.i = ((orc_uint32) var35.i) << 8; /* 3: storel */ ptr0[i] = var34; } @@ -1455,7 +1455,7 @@ /* 1: swapl */ var35.i = ORC_SWAP_L (var33.i); /* 2: shll */ - var34.i = var35.i << 8; + var34.i = ((orc_uint32) var35.i) << 8; /* 3: storel */ ptr0[i] = var34; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioringbuffer.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioringbuffer.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioringbuffer.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioringbuffer.c 2015-10-22 08:01:34.000000000 +0000 @@ -218,6 +218,10 @@ gst_structure_get_int (structure, "channels", &info.channels))) goto parse_error; + if (!(gst_audio_channel_positions_from_mask (info.channels, 0, + info.position))) + goto parse_error; + spec->type = GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW; info.bpf = info.channels; } else if (g_str_equal (mimetype, "audio/x-mulaw")) { @@ -226,6 +230,10 @@ gst_structure_get_int (structure, "channels", &info.channels))) goto parse_error; + if (!(gst_audio_channel_positions_from_mask (info.channels, 0, + info.position))) + goto parse_error; + spec->type = GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW; info.bpf = info.channels; } else if (g_str_equal (mimetype, "audio/x-iec958")) { @@ -675,7 +683,7 @@ buf->acquired = FALSE; /* if this fails, something is wrong in this file */ - g_assert (buf->open == TRUE); + g_assert (buf->open); rclass = GST_AUDIO_RING_BUFFER_GET_CLASS (buf); if (G_LIKELY (rclass->release)) @@ -910,7 +918,7 @@ if (G_UNLIKELY (!buf->acquired)) goto not_acquired; - if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE)) + if (G_UNLIKELY (!g_atomic_int_get (&buf->may_start))) goto may_not_start; /* if stopped, set to started */ @@ -1277,7 +1285,7 @@ if (G_UNLIKELY (g_atomic_int_get (&buf->state) != GST_AUDIO_RING_BUFFER_STATE_STARTED)) { /* see if we are allowed to start it */ - if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE)) + if (G_UNLIKELY (!g_atomic_int_get (&buf->may_start))) goto no_start; GST_DEBUG_OBJECT (buf, "start!"); @@ -1462,6 +1470,18 @@ g_return_val_if_fail (buf->memory != NULL, -1); g_return_val_if_fail (data != NULL, -1); + /* writing stuff now, ensure running clock */ + if (G_UNLIKELY (g_atomic_int_get (&buf->state) != + GST_AUDIO_RING_BUFFER_STATE_STARTED)) { + /* see if we are allowed to start it */ + if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE)) { + GST_DEBUG_OBJECT (buf, "not allowed to start"); + } else { + GST_DEBUG_OBJECT (buf, "start!"); + gst_audio_ring_buffer_start (buf); + } + } + need_reorder = buf->need_reorder; channels = buf->spec.info.channels; @@ -1725,8 +1745,8 @@ * reading) */ diff = segdone - readseg; - GST_DEBUG - ("pointer at %d, sample %" G_GUINT64_FORMAT + GST_DEBUG_OBJECT + (buf, "pointer at %d, sample %" G_GUINT64_FORMAT ", read from %d-%d, to_read %d, diff %d, segtotal %d, segsize %d", segdone, sample, readseg, sampleoff, to_read, diff, segtotal, segsize); @@ -1838,7 +1858,7 @@ *len = buf->spec.segsize; *readptr = data + *segment * *len; - GST_LOG ("prepare read from segment %d (real %d) @%p", + GST_LOG_OBJECT (buf, "prepare read from segment %d (real %d) @%p", *segment, segdone, *readptr); /* callback to fill the memory with data, for pull based @@ -1908,7 +1928,7 @@ data = buf->memory; data += segment * buf->spec.segsize; - GST_LOG ("clear segment %d @%p", segment, data); + GST_LOG_OBJECT (buf, "clear segment %d @%p", segment, data); memcpy (data, buf->empty_seg, buf->spec.segsize); } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioringbuffer.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioringbuffer.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioringbuffer.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioringbuffer.h 2015-10-22 08:01:34.000000000 +0000 @@ -220,7 +220,7 @@ * @pause: pause processing of samples * @resume: resume processing of samples after pause * @stop: stop processing of samples - * @delay: get number of samples queued in device + * @delay: get number of frames queued in device * @activate: activate the thread that starts pulling and monitoring the * consumed segments in the device. * @commit: write samples into the ringbuffer diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosink.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosink.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosink.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosink.c 2015-10-22 08:01:34.000000000 +0000 @@ -412,7 +412,17 @@ spec->seglatency = spec->segtotal + 1; buf->size = spec->segtotal * spec->segsize; - buf->memory = g_malloc0 (buf->size); + + buf->memory = g_malloc (buf->size); + + if (buf->spec.type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW) { + gst_audio_format_fill_silence (buf->spec.info.finfo, buf->memory, + buf->size); + } else { + /* FIXME, non-raw formats get 0 as the empty sample */ + memset (buf->memory, 0, buf->size); + } + return TRUE; @@ -470,6 +480,7 @@ GST_ERROR_OBJECT (sink, "could not create thread %s", error->message); else GST_ERROR_OBJECT (sink, "could not create thread for unknown reason"); + g_clear_error (&error); return FALSE; } } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosink.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosink.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosink.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosink.h 2015-10-22 08:01:34.000000000 +0000 @@ -66,7 +66,7 @@ * @unprepare: Undo operations done in prepare. * @close: Close the device. * @write: Write data to the device. - * @delay: Return how many samples are still in the device. This is used to + * @delay: Return how many frames are still in the device. This is used to * drive the synchronisation. * @reset: Returns as quickly as possible from a write and flush any pending * samples from the device. @@ -88,7 +88,7 @@ gboolean (*close) (GstAudioSink *sink); /* write samples to the device */ gint (*write) (GstAudioSink *sink, gpointer data, guint length); - /* get number of samples queued in the device */ + /* get number of frames queued in the device */ guint (*delay) (GstAudioSink *sink); /* reset the audio device, unblock from a write */ void (*reset) (GstAudioSink *sink); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosrc.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosrc.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosrc.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -393,7 +393,14 @@ goto could_not_open; buf->size = spec->segtotal * spec->segsize; - buf->memory = g_malloc0 (buf->size); + buf->memory = g_malloc (buf->size); + if (buf->spec.type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW) { + gst_audio_format_fill_silence (buf->spec.info.finfo, buf->memory, + buf->size); + } else { + /* FIXME, non-raw formats get 0 as the empty sample */ + memset (buf->memory, 0, buf->size); + } abuf = GST_AUDIO_SRC_RING_BUFFER (buf); abuf->running = TRUE; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosrc.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosrc.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudiosrc.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudiosrc.h 2015-10-22 08:01:34.000000000 +0000 @@ -65,7 +65,7 @@ * @unprepare: undo the configuration * @close: close the device * @read: read samples from the audio device - * @delay: the number of samples queued in the device + * @delay: the number of frames queued in the device * @reset: unblock a read to the device and reset. * * #GstAudioSrc class. Override the vmethod to implement @@ -87,7 +87,7 @@ /* read samples from the device */ guint (*read) (GstAudioSrc *src, gpointer data, guint length, GstClockTime *timestamp); - /* get number of samples queued in the device */ + /* get number of frames queued in the device */ guint (*delay) (GstAudioSrc *src); /* reset the audio device, unblock from a write */ void (*reset) (GstAudioSrc *src); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioutilsprivate.c gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioutilsprivate.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioutilsprivate.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioutilsprivate.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,144 @@ +/* GStreamer + * Copyright (C) 2011 Mark Nauwelaerts . + * Copyright (C) 2011 Nokia Corporation. All rights reserved. + * Contact: Stefan Kost + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "gstaudioutilsprivate.h" + +/* + * Takes caps and copies its audio fields to tmpl_caps + */ +static GstCaps * +__gst_audio_element_proxy_caps (GstElement * element, GstCaps * templ_caps, + GstCaps * caps) +{ + GstCaps *result = gst_caps_new_empty (); + gint i, j; + gint templ_caps_size = gst_caps_get_size (templ_caps); + gint caps_size = gst_caps_get_size (caps); + + for (i = 0; i < templ_caps_size; i++) { + GQuark q_name = + gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); + GstCapsFeatures *features = gst_caps_get_features (templ_caps, i); + + for (j = 0; j < caps_size; j++) { + const GstStructure *caps_s = gst_caps_get_structure (caps, j); + const GValue *val; + GstStructure *s; + GstCaps *tmp = gst_caps_new_empty (); + + s = gst_structure_new_id_empty (q_name); + if ((val = gst_structure_get_value (caps_s, "rate"))) + gst_structure_set_value (s, "rate", val); + if ((val = gst_structure_get_value (caps_s, "channels"))) + gst_structure_set_value (s, "channels", val); + if ((val = gst_structure_get_value (caps_s, "channels-mask"))) + gst_structure_set_value (s, "channels-mask", val); + + gst_caps_append_structure_full (tmp, s, + gst_caps_features_copy (features)); + result = gst_caps_merge (result, tmp); + } + } + + return result; +} + +/** + * __gst_audio_element_proxy_getcaps: + * @element: a #GstElement + * @sinkpad: the element's sink #GstPad + * @srcpad: the element's source #GstPad + * @initial_caps: initial caps + * @filter: filter caps + * + * Returns caps that express @initial_caps (or sink template caps if + * @initial_caps == NULL) restricted to rate/channels/... + * combinations supported by downstream elements (e.g. muxers). + * + * Returns: a #GstCaps owned by caller + */ +GstCaps * +__gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkpad, + GstPad * srcpad, GstCaps * initial_caps, GstCaps * filter) +{ + GstCaps *templ_caps, *src_templ_caps; + GstCaps *peer_caps; + GstCaps *allowed; + GstCaps *fcaps, *filter_caps; + + /* Allow downstream to specify rate/channels constraints + * and forward them upstream for audio converters to handle + */ + templ_caps = initial_caps ? gst_caps_ref (initial_caps) : + gst_pad_get_pad_template_caps (sinkpad); + src_templ_caps = gst_pad_get_pad_template_caps (srcpad); + if (filter && !gst_caps_is_any (filter)) { + GstCaps *proxy_filter = + __gst_audio_element_proxy_caps (element, src_templ_caps, filter); + + peer_caps = gst_pad_peer_query_caps (srcpad, proxy_filter); + gst_caps_unref (proxy_filter); + } else { + peer_caps = gst_pad_peer_query_caps (srcpad, NULL); + } + + allowed = gst_caps_intersect_full (peer_caps, src_templ_caps, + GST_CAPS_INTERSECT_FIRST); + + gst_caps_unref (src_templ_caps); + gst_caps_unref (peer_caps); + + if (!allowed || gst_caps_is_any (allowed)) { + fcaps = templ_caps; + goto done; + } else if (gst_caps_is_empty (allowed)) { + fcaps = gst_caps_ref (allowed); + goto done; + } + + GST_LOG_OBJECT (element, "template caps %" GST_PTR_FORMAT, templ_caps); + GST_LOG_OBJECT (element, "allowed caps %" GST_PTR_FORMAT, allowed); + + filter_caps = __gst_audio_element_proxy_caps (element, templ_caps, allowed); + + fcaps = gst_caps_intersect (filter_caps, templ_caps); + gst_caps_unref (filter_caps); + gst_caps_unref (templ_caps); + + if (filter) { + GST_LOG_OBJECT (element, "intersecting with %" GST_PTR_FORMAT, filter); + filter_caps = gst_caps_intersect (fcaps, filter); + gst_caps_unref (fcaps); + fcaps = filter_caps; + } + +done: + gst_caps_replace (&allowed, NULL); + + GST_LOG_OBJECT (element, "proxy caps %" GST_PTR_FORMAT, fcaps); + + return fcaps; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioutilsprivate.h gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioutilsprivate.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/gstaudioutilsprivate.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/gstaudioutilsprivate.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,40 @@ +/* GStreamer + * Copyright (C) 2011 Mark Nauwelaerts . + * Copyright (C) 2011 Nokia Corporation. All rights reserved. + * Contact: Stefan Kost + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_AUDIO_H__ +#include +#endif + +#ifndef _GST_AUDIO_UTILS_PRIVATE_H_ +#define _GST_AUDIO_UTILS_PRIVATE_H_ + +#include + +G_BEGIN_DECLS + +/* Element utility functions */ +GstCaps *__gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkpad, + GstPad * srcpad, GstCaps * initial_caps, + GstCaps * filter); + +G_END_DECLS + +#endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -38,6 +38,7 @@ gstaudiometa.c \ gstaudiosink.c \ gstaudiosrc.c \ + gstaudioutilsprivate.c \ streamvolume.c \ gstaudioiec61937.c @@ -66,6 +67,8 @@ nodist_libgstaudio_@GST_API_VERSION@include_HEADERS = \ audio-enumtypes.h +noinst_HEADERS = gstaudioutilsprivate.h + libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \ $(ORC_CFLAGS) libgstaudio_@GST_API_VERSION@_la_LIBADD = \ @@ -84,7 +87,7 @@ gir_sources+=$(patsubst %,$(builddir)/%, $(built_sources)) GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstAudio \ --nsversion=@GST_API_VERSION@ \ @@ -107,7 +110,7 @@ --pkg gstreamer-@GST_API_VERSION@ \ --pkg gstreamer-base-@GST_API_VERSION@ \ --pkg-export gstreamer-audio-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -133,19 +136,3 @@ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudio_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstaudio_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstaudio_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstaudio_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstaudio_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/audio/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/audio/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -47,7 +47,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -111,10 +121,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak \ - $(top_srcdir)/common/gst-glib-gen.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp \ - $(libgstaudio_@GST_API_VERSION@include_HEADERS) TODO @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/audio ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -137,7 +143,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -154,6 +159,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstaudio_@GST_API_VERSION@include_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -210,6 +218,7 @@ libgstaudio_@GST_API_VERSION@_la-gstaudiometa.lo \ libgstaudio_@GST_API_VERSION@_la-gstaudiosink.lo \ libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.lo \ + libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo \ libgstaudio_@GST_API_VERSION@_la-streamvolume.lo \ libgstaudio_@GST_API_VERSION@_la-gstaudioiec61937.lo am__objects_1 = libgstaudio_@GST_API_VERSION@_la-audio-enumtypes.lo @@ -272,8 +281,30 @@ esac DATA = $(gir_DATA) $(typelibs_DATA) HEADERS = $(libgstaudio_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) + $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) \ + $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak \ + $(top_srcdir)/common/orc.mak $(top_srcdir)/depcomp TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -334,6 +365,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -363,6 +396,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -390,7 +425,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -405,6 +439,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -494,13 +529,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -553,6 +587,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -610,6 +645,7 @@ gstaudiometa.c \ gstaudiosink.c \ gstaudiosrc.c \ + gstaudioutilsprivate.c \ streamvolume.c \ gstaudioiec61937.c @@ -637,6 +673,7 @@ nodist_libgstaudio_@GST_API_VERSION@include_HEADERS = \ audio-enumtypes.h +noinst_HEADERS = gstaudioutilsprivate.h libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \ $(ORC_CFLAGS) @@ -679,7 +716,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -688,7 +724,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak $(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/orc.mak $(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -760,6 +796,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiosink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-tmp-orc.Plo@am__quote@ @@ -892,6 +929,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.lo `test -f 'gstaudiosrc.c' || echo '$(srcdir)/'`gstaudiosrc.c +libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo: gstaudioutilsprivate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo `test -f 'gstaudioutilsprivate.c' || echo '$(srcdir)/'`gstaudioutilsprivate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstaudioutilsprivate.c' object='libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo `test -f 'gstaudioutilsprivate.c' || echo '$(srcdir)/'`gstaudioutilsprivate.c + libgstaudio_@GST_API_VERSION@_la-streamvolume.lo: streamvolume.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-streamvolume.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-streamvolume.lo `test -f 'streamvolume.c' || echo '$(srcdir)/'`streamvolume.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Plo @@ -1009,12 +1053,58 @@ @list='$(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstaudio_@GST_API_VERSION@includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir) -tags TAGS: -ctags CTAGS: +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am -cscope cscopelist: +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -1098,7 +1188,8 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags dvi: dvi-am @@ -1168,14 +1259,15 @@ .MAKE: all check install install-am install-strip -.PHONY: all all-am check check-am clean clean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \ - ctags-am dist-hook distclean distclean-compile \ - distclean-generic distclean-libtool distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-girDATA install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ + ctags ctags-am dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-girDATA install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES \ install-libgstaudio_@GST_API_VERSION@includeHEADERS \ install-man \ install-nodist_libgstaudio_@GST_API_VERSION@includeHEADERS \ @@ -1184,12 +1276,14 @@ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags-am uninstall uninstall-am uninstall-girDATA \ + tags tags-am uninstall uninstall-am uninstall-girDATA \ uninstall-libLTLIBRARIES \ uninstall-libgstaudio_@GST_API_VERSION@includeHEADERS \ uninstall-nodist_libgstaudio_@GST_API_VERSION@includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -1264,7 +1358,7 @@ @touch $@ @HAVE_INTROSPECTION_TRUE@GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstAudio \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1287,7 +1381,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-base-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-audio-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1302,22 +1396,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstaudio_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstaudio_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstaudio_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstaudio_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstaudio_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstfftf32.c gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstfftf32.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstfftf32.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstfftf32.c 2015-10-22 08:01:34.000000000 +0000 @@ -69,7 +69,7 @@ }; /** - * gst_fft_f32_new: + * gst_fft_f32_new: (skip) * @len: Length of the FFT in the time domain * @inverse: %TRUE if the #GstFFTF32 instance should be used for the inverse FFT * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstfftf64.c gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstfftf64.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstfftf64.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstfftf64.c 2015-10-22 08:01:34.000000000 +0000 @@ -69,7 +69,7 @@ }; /** - * gst_fft_f64_new: + * gst_fft_f64_new: (skip) * @len: Length of the FFT in the time domain * @inverse: %TRUE if the #GstFFTF64 instance should be used for the inverse FFT * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstffts16.c gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstffts16.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstffts16.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstffts16.c 2015-10-22 08:01:34.000000000 +0000 @@ -69,7 +69,7 @@ }; /** - * gst_fft_s16_new: + * gst_fft_s16_new: (skip) * @len: Length of the FFT in the time domain * @inverse: %TRUE if the #GstFFTS16 instance should be used for the inverse FFT * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstffts32.c gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstffts32.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/gstffts32.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/gstffts32.c 2015-10-22 08:01:34.000000000 +0000 @@ -68,7 +68,7 @@ }; /** - * gst_fft_s32_new: + * gst_fft_s32_new: (skip) * @len: Length of the FFT in the time domain * @inverse: %TRUE if the #GstFFTS32 instance should be used for the inverse FFT * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -52,7 +52,7 @@ gir_sources=$(patsubst %,$(srcdir)/%, $(libgstfft_@GST_API_VERSION@_la_SOURCES)) GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstFft \ --nsversion=@GST_API_VERSION@ \ @@ -90,17 +90,3 @@ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am - androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstfft_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(libgstfft_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstfft_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstfft_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/fft \ - -:HEADERS $(libgstfftinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/fft/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/fft/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,10 +92,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs/gst/fft -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp \ - $(libgstfft_@GST_API_VERSION@_include_HEADERS) \ - $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -106,7 +112,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +128,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstfft_@GST_API_VERSION@_include_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -248,6 +256,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -308,6 +317,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -337,6 +348,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -364,7 +377,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -379,6 +391,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -468,13 +481,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -527,6 +539,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -609,7 +622,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -1086,9 +1098,11 @@ uninstall-libgstfft_@GST_API_VERSION@_includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + @HAVE_INTROSPECTION_TRUE@GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstFft \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1115,20 +1129,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am - androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstfft_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(libgstfft_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstfft_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstfft_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/fft \ - -:HEADERS $(libgstfftinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -1,11 +1,11 @@ SUBDIRS = \ tag \ fft \ - rtp \ sdp \ rtsp \ video \ audio \ + rtp \ pbutils \ riff \ app \ @@ -22,8 +22,10 @@ pbutils: video audio +rtp: audio + INDEPENDENT_SUBDIRS = \ - tag audio fft rtp sdp video app + tag audio fft sdp video app .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,8 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs/gst -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -102,7 +110,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -119,6 +126,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -179,6 +188,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -264,6 +274,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -293,6 +305,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -320,7 +334,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -335,6 +348,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -424,13 +438,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -483,6 +496,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -498,11 +512,11 @@ SUBDIRS = \ tag \ fft \ - rtp \ sdp \ rtsp \ video \ audio \ + rtp \ pbutils \ riff \ app \ @@ -510,7 +524,7 @@ noinst_HEADERS = gettext.h gst-i18n-app.h gst-i18n-plugin.h glib-compat-private.h INDEPENDENT_SUBDIRS = \ - tag audio fft rtp sdp video app + tag audio fft sdp video app all: all-recursive @@ -527,7 +541,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -822,6 +835,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # dependencies: audio: tag @@ -832,6 +847,8 @@ pbutils: video audio +rtp: audio + .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS) independent-subdirs: $(INDEPENDENT_SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/codec-utils.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/codec-utils.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/codec-utils.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/codec-utils.c 2015-10-22 08:01:34.000000000 +0000 @@ -258,12 +258,19 @@ num_cpe = 2; break; case 7: + case 12: + case 14: /* front left, right, center and LFE; outside front left and right; * rear left and right surround */ num_sce = 1; num_cpe = 3; num_lfe = 1; break; + case 11: + num_sce = 2; + num_cpe = 2; + num_lfe = 1; + break; default: GST_WARNING ("Unknown channel config in header: %d", channel_config); return NULL; @@ -320,6 +327,10 @@ ret = 4; else if (num_channels <= 5 && rate <= 96000 && pcu <= 38 && rcu <= 15) ret = 5; + else if (num_channels <= 7 && rate <= 48000 && pcu <= 25 && rcu <= 19) + ret = 6; + else if (num_channels <= 7 && rate <= 96000 && pcu <= 50 && rcu <= 19) + ret = 7; } else { /* Return the level as per the 'Main Profile' */ if (pcu < 40 && rcu < 20) @@ -682,7 +693,6 @@ gst_codec_utils_h265_get_profile (const guint8 * profile_tier_level, guint len) { const gchar *profile = NULL; - gint gpcf1 = 0, gpcf2 = 0, gpcf3 = 0; gint profile_idc; g_return_val_if_fail (profile_tier_level != NULL, NULL); @@ -694,15 +704,11 @@ profile_idc = (profile_tier_level[0] & 0x1f); - gpcf1 = (profile_tier_level[1] & 0x40) >> 6; - gpcf2 = (profile_tier_level[1] & 0x20) >> 5; - gpcf3 = (profile_tier_level[1] & 0x10) >> 4; - - if (profile_idc == 1 || gpcf1) + if (profile_idc == 1) profile = "main"; - else if (profile_idc == 2 || gpcf2) + else if (profile_idc == 2) profile = "main-10"; - else if (profile_idc == 3 || gpcf3) + else if (profile_idc == 3) profile = "main-still-picture"; else profile = NULL; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/descriptions.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/descriptions.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/descriptions.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/descriptions.c 2015-10-22 08:01:34.000000000 +0000 @@ -133,6 +133,8 @@ {"audio/x-amr-wb-sh", "Adaptive Multi Rate WideBand (AMR-WB)", AUDIO_CONTAINER, "amr"}, {"audio/x-au", "Sun .au", AUDIO_CONTAINER, "au"}, + {"audio/x-audible", "Audible Audio", AUDIO_CONTAINER, "aa"}, + {"audio/x-caf", "Apple Core Audio Format", AUDIO_CONTAINER, "caf"}, {"audio/x-celt", "Constrained Energy Lapped Transform (CELT)", FLAG_AUDIO, ""}, {"audio/x-cinepak", "Cinepak Audio", FLAG_AUDIO, ""}, @@ -192,11 +194,11 @@ {"video/x-apple-video", "Apple video", FLAG_VIDEO, ""}, {"video/x-aasc", "Autodesk Animator", FLAG_VIDEO, ""}, {"video/x-camtasia", "TechSmith Camtasia", FLAG_VIDEO, ""}, + {"video/x-cavs", "Chinese AVS (CAVS)", FLAG_VIDEO, ""}, {"video/x-cdxa", "RIFF/CDXA (VCD)", AV_CONTAINER, ""}, {"video/x-cinepak", "Cinepak Video", FLAG_VIDEO, ""}, {"video/x-cirrus-logic-accupak", "Cirrus Logipak AccuPak", FLAG_VIDEO, ""}, {"video/x-compressed-yuv", N_("CYUV Lossless"), FLAG_VIDEO, ""}, - {"video/x-dirac", "Dirac", FLAG_VIDEO, ""}, {"video/x-dnxhd", "Digital Nonlinear Extensible High Definition (DNxHD)", FLAG_VIDEO, ""}, {"subpicture/x-dvd", "DVD subpicture", FLAG_VIDEO, ""}, @@ -303,6 +305,7 @@ {"video/mpeg", NULL, FLAG_VIDEO, ""}, {"video/x-asus", NULL, FLAG_VIDEO, ""}, {"video/x-ati-vcr", NULL, FLAG_VIDEO, ""}, + {"video/x-dirac", NULL, FLAG_VIDEO, ""}, {"video/x-divx", NULL, FLAG_VIDEO, ""}, {"video/x-dv", "Digital Video (DV) System Stream", FLAG_CONTAINER | FLAG_SYSTEMSTREAM, "dv"}, @@ -327,6 +330,102 @@ {"video/x-tscc", NULL, FLAG_VIDEO, ""} }; +static const gchar * +pbutils_desc_get_profile_name_from_nick (const gchar * map, gsize map_len, + const gchar * nick) +{ + const gchar *end = map + map_len; + const gchar *p; + + p = map; + while (*p != '\0' && p < end) { + guint len = strlen (p); + + if (strcmp (p, nick) == 0) + return p + len + 1; + p += len + 1; + p += strlen (p) + 1; + } + return NULL; +} + +static const gchar * +pbutils_desc_get_mpeg2v_profile_name_from_nick (const gchar * nick) +{ + static const gchar map[] = + "simple\000Simple\000main\000Main\000high\000High\000"; + + return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick); +} + +static const gchar * +pbutils_desc_get_mpeg4v_profile_name_from_nick (const gchar * nick) +{ + static const gchar map[] = "simple\000Simple\000" + "simple-scalable\000Simple Scalable\000" + "core\000Core\000" + "main\000Main\000" + "n-bit\000N-bit\000" + "scalable\000Scalable\000" + "hybrid\000Hybrid\000" + "advanced-real-time-simple\000Advanced Real-Time Simple\000" + "core-scalable\000Core-Scalable\000" + "advanced-coding-efficiency\000Advanced Coding Efficiency\000" + "advanced-core\000Advanced Core\000" + "advanced-scalable-texture\000Advanced Scalable Texture\000" + "simple-face\000Simple Face Animation\000" + "simple-fba\000Simple FBA\000" + "simple-studio\000Simple Studio\000" + "core-studio\000Core Studio\000" + "advanced-simple\000Advanced Simple\000" + "fine-granularity-scalable\000Fine Granularity Scalable\000" + "basic-animated-texture\000Basic Animated Texture\000" + "baseline\000Baseline Profile\000"; + + return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick); +} + +static const gchar * +pbutils_desc_get_h264_profile_name_from_nick (const gchar * nick) +{ + static const gchar map[] = "baseline\000Baseline\000" + "constrained-baseline\000Constrained Baseline\000" + "main\000Main\000" + "extended\000Extended\000" + "high\000High\000" + "high-10-intra\000High 10 Intra\000" + "high-10\000High 10\000" + "high-4:2:2-intra\000High 4:2:2 Intra\000" + "high-4:2:2\000High 4:2:2\000" + "high-4:4:4-intra\000High 4:4:4 Intra\000" + "high-4:4:4\000High 4:4:4\000" + "cavlc-4:4:4-intra\000CAVLC 4:4:4 Intra\000" + "multiview-high\000Multiview High\000" + "stereo-high\000Stereo High\000" + "scalable-constrained-baseline\000Scalable Constrained Baseline\000" + "scalable-baseline\000Scalable Baseline\000" + "scalable-high\000Scalable High\000"; + + return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick); +} + +static const gchar * +pbutils_desc_get_h265_profile_name_from_nick (const gchar * nick) +{ + static const gchar map[] = "main\000Main\000" + "main-10\000Main 10\000" + "main-12\000Main 12\000" + "main-4:2:2-10\000Main 4:2:2 10\000" + "main-4:2:2-12\000Main 4:2:2 12\000" + "main-4:4:4\000Main 4:4:4\000" + "main-4:4:4-10\000Main 4:4:4 10\000" + "main-4:4:4-12\000Main 4:4:4 12\000" + "main-4:4:4-16-intra\000Main 4:4:4 16 Intra\000" + "main-still-picture\000Main Still Picture\000"; + + return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick); +} + /* returns static descriptions and dynamic ones (such as video/x-raw), * or NULL if caps aren't known at all */ static gchar * @@ -430,6 +529,7 @@ return g_strdup (ret); } else if (strcmp (info->type, "video/x-h264") == 0) { const gchar *variant, *ret; + const gchar *profile; variant = gst_structure_get_string (s, "variant"); if (variant == NULL) @@ -444,10 +544,34 @@ GST_WARNING ("Unknown H264 variant '%s'", variant); ret = "H.264"; } - return g_strdup (ret); + /* profile */ + profile = gst_structure_get_string (s, "profile"); + if (profile != NULL) + profile = pbutils_desc_get_h264_profile_name_from_nick (profile); + if (profile == NULL) + return g_strdup (ret); + return g_strdup_printf ("%s (%s Profile)", ret, profile); } else if (strcmp (info->type, "video/x-h265") == 0) { - /* TODO: Any variants? */ + const gchar *profile = gst_structure_get_string (s, "profile"); + + if (profile != NULL) + profile = pbutils_desc_get_h265_profile_name_from_nick (profile); + if (profile != NULL) + return g_strdup_printf ("H.265 (%s Profile)", profile); + return g_strdup ("H.265"); + } else if (strcmp (info->type, "video/x-dirac") == 0) { + const gchar *profile = gst_structure_get_string (s, "profile"); + if (profile == NULL) + return g_strdup ("Dirac"); + if (strcmp (profile, "vc2-low-delay") == 0) + return g_strdup_printf ("Dirac (%s)", "VC-2 Low Delay Profile"); + else if (strcmp (profile, "vc2-simple") == 0) + return g_strdup_printf ("Dirac (%s)", "VC-2 Simple Profile"); + else if (strcmp (profile, "vc2-main") == 0) + return g_strdup_printf ("Dirac (%s)", "VC-2 Main Profile"); + else + return g_strdup ("Dirac"); } else if (strcmp (info->type, "video/x-divx") == 0) { gint ver = 0; @@ -674,7 +798,19 @@ if (sysstream) { return g_strdup_printf ("MPEG-%d System Stream", ver); } else { - return g_strdup_printf ("MPEG-%d Video", ver); + const gchar *profile = gst_structure_get_string (s, "profile"); + if (profile != NULL) { + if (ver == 4) + profile = pbutils_desc_get_mpeg4v_profile_name_from_nick (profile); + else if (ver == 2) + profile = pbutils_desc_get_mpeg2v_profile_name_from_nick (profile); + else + profile = NULL; + } + if (profile != NULL) + return g_strdup_printf ("MPEG-%d Video (%s Profile)", ver, profile); + else + return g_strdup_printf ("MPEG-%d Video", ver); } } GST_WARNING ("Missing mpegversion field in mpeg video caps " diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/encoding-profile.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/encoding-profile.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/encoding-profile.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/encoding-profile.c 2015-10-22 08:01:34.000000000 +0000 @@ -188,6 +188,8 @@ gchar *preset_name; guint presence; GstCaps *restriction; + gboolean allow_dynamic_output; + gboolean enabled; }; struct _GstEncodingProfileClass @@ -400,6 +402,20 @@ } /** + * gst_encoding_profile_get_enabled: + * @profile: a #GstEncodingProfile + * + * Returns: Whther @profile is enabled or not + */ +gboolean +gst_encoding_profile_is_enabled (GstEncodingProfile * profile) +{ + g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE); + + return profile->enabled; +} + +/** * gst_encoding_profile_get_restriction: * @profile: a #GstEncodingProfile * @@ -465,6 +481,35 @@ } /** + * gst_encoding_profile_get_allow_dynamic_output: + * @profile: a #GstEncodingProfile + * + * Get whether the format that has been negotiated in at some point can be renegotiated + * later during the encoding. + */ +gboolean +gst_encoding_profile_get_allow_dynamic_output (GstEncodingProfile * profile) +{ + return profile->allow_dynamic_output; +} + +/** + * gst_encoding_profile_set_allow_dynamic_output: + * @profile: a #GstEncodingProfile + * @allow_dynamic_output: Whether the format that has been negotiated first can be renegotiated + * during the encoding + * + * Sets whether the format that has been negotiated in at some point can be renegotiated + * later during the encoding. + */ +void +gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile * profile, + gboolean allow_dynamic_output) +{ + profile->allow_dynamic_output = allow_dynamic_output; +} + +/** * gst_encoding_profile_set_preset: * @profile: a #GstEncodingProfile * @preset: the element preset to use @@ -513,6 +558,22 @@ } /** + * gst_encoding_profile_set_enabled: + * @profile: a #GstEncodingProfile + * @enabled: %FALSE to disable #profile, %TRUE to enable it + * + * Set whether the profile should be used or not. + */ +void +gst_encoding_profile_set_enabled (GstEncodingProfile * profile, + gboolean enabled) +{ + g_return_if_fail (GST_IS_ENCODING_PROFILE (profile)); + + profile->enabled = enabled; +} + +/** * gst_encoding_profile_set_restriction: * @profile: a #GstEncodingProfile * @restriction: (transfer full): the restriction to apply @@ -837,6 +898,8 @@ prof->restriction = gst_caps_ref (restriction); prof->presence = presence; prof->preset_name = NULL; + prof->allow_dynamic_output = TRUE; + prof->enabled = TRUE; return prof; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/encoding-profile.h gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/encoding-profile.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/encoding-profile.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/encoding-profile.h 2015-10-22 08:01:34.000000000 +0000 @@ -125,6 +125,9 @@ GstCaps * gst_encoding_profile_get_format (GstEncodingProfile *profile); void gst_encoding_profile_set_format (GstEncodingProfile *profile, GstCaps *format); +gboolean gst_encoding_profile_get_allow_dynamic_output (GstEncodingProfile *profile); +void gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile *profile, + gboolean allow_dynamic_output); const gchar * gst_encoding_profile_get_preset (GstEncodingProfile *profile); const gchar * gst_encoding_profile_get_preset_name (GstEncodingProfile *profile); void gst_encoding_profile_set_preset (GstEncodingProfile *profile, @@ -149,6 +152,9 @@ const gchar *profilename, const gchar *category); +gboolean gst_encoding_profile_is_enabled (GstEncodingProfile *profile); +void gst_encoding_profile_set_enabled (GstEncodingProfile *profile, + gboolean enabled); /* GstEncodingContainerProfile API */ gboolean gst_encoding_container_profile_add_profile (GstEncodingContainerProfile *container, GstEncodingProfile *profile); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer.c 2014-08-11 06:44:22.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer.c 2015-10-22 08:01:34.000000000 +0000 @@ -1423,7 +1423,9 @@ gst_message_parse_toc (msg, &tmp, NULL); GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Got toc %" GST_PTR_FORMAT, tmp); - dc->priv->current_info->toc = tmp; + if (dc->priv->current_info->toc) + gst_toc_unref (dc->priv->current_info->toc); + dc->priv->current_info->toc = tmp; /* transfer ownership */ GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Current info %p, toc %" GST_PTR_FORMAT, dc->priv->current_info, tmp); } @@ -1462,6 +1464,11 @@ dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT; } + DISCO_LOCK (dc); + dc->priv->processing = FALSE; + DISCO_UNLOCK (dc); + + GST_DEBUG ("Done"); g_timer_stop (timer); @@ -1630,6 +1637,316 @@ return res; } +/* Serializing code */ + +static GVariant * +_serialize_common_stream_info (GstDiscovererStreamInfo * sinfo, + GstDiscovererSerializeFlags flags) +{ + GVariant *common; + gchar *caps_str = NULL, *tags_str = NULL, *misc_str = NULL; + + if (sinfo->caps && (flags & GST_DISCOVERER_SERIALIZE_CAPS)) + caps_str = gst_caps_to_string (sinfo->caps); + + if (sinfo->tags && (flags & GST_DISCOVERER_SERIALIZE_TAGS)) + tags_str = gst_tag_list_to_string (sinfo->tags); + + if (sinfo->misc && (flags & GST_DISCOVERER_SERIALIZE_MISC)) + misc_str = gst_structure_to_string (sinfo->misc); + + common = + g_variant_new ("(msmsmsms)", sinfo->stream_id, caps_str, tags_str, + misc_str); + + g_free (caps_str); + g_free (tags_str); + g_free (misc_str); + + return common; +} + +static GVariant * +_serialize_info (GstDiscovererInfo * info, GstDiscovererSerializeFlags flags) +{ + gchar *tags_str = NULL; + GVariant *ret; + + if (info->tags && (flags & GST_DISCOVERER_SERIALIZE_TAGS)) + tags_str = gst_tag_list_to_string (info->tags); + + ret = + g_variant_new ("(mstbms)", info->uri, info->duration, info->seekable, + tags_str); + + g_free (tags_str); + + return ret; +} + +static GVariant * +_serialize_audio_stream_info (GstDiscovererAudioInfo * ainfo) +{ + return g_variant_new ("(uuuuums)", + ainfo->channels, + ainfo->sample_rate, + ainfo->bitrate, ainfo->max_bitrate, ainfo->depth, ainfo->language); +} + +static GVariant * +_serialize_video_stream_info (GstDiscovererVideoInfo * vinfo) +{ + return g_variant_new ("(uuuuuuubuub)", + vinfo->width, + vinfo->height, + vinfo->depth, + vinfo->framerate_num, + vinfo->framerate_denom, + vinfo->par_num, + vinfo->par_denom, + vinfo->interlaced, vinfo->bitrate, vinfo->max_bitrate, vinfo->is_image); +} + +static GVariant * +_serialize_subtitle_stream_info (GstDiscovererSubtitleInfo * sinfo) +{ + return g_variant_new ("ms", sinfo->language); +} + +static GVariant * +gst_discoverer_info_to_variant_recurse (GstDiscovererStreamInfo * sinfo, + GstDiscovererSerializeFlags flags) +{ + GVariant *stream_variant = NULL; + GVariant *common_stream_variant = + _serialize_common_stream_info (sinfo, flags); + + if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) { + GList *tmp; + GList *streams = + gst_discoverer_container_info_get_streams (GST_DISCOVERER_CONTAINER_INFO + (sinfo)); + + if (g_list_length (streams) > 0) { + GVariantBuilder children; + GVariant *child_variant; + g_variant_builder_init (&children, G_VARIANT_TYPE_ARRAY); + + for (tmp = streams; tmp; tmp = tmp->next) { + child_variant = + gst_discoverer_info_to_variant_recurse (tmp->data, flags); + g_variant_builder_add (&children, "v", child_variant); + } + stream_variant = + g_variant_new ("(yvav)", 'c', common_stream_variant, &children); + } else { + stream_variant = + g_variant_new ("(yvav)", 'c', common_stream_variant, NULL); + } + + gst_discoverer_stream_info_list_free (streams); + } else if (GST_IS_DISCOVERER_AUDIO_INFO (sinfo)) { + GVariant *audio_stream_info = + _serialize_audio_stream_info (GST_DISCOVERER_AUDIO_INFO (sinfo)); + stream_variant = + g_variant_new ("(yvv)", 'a', common_stream_variant, audio_stream_info); + } else if (GST_IS_DISCOVERER_VIDEO_INFO (sinfo)) { + GVariant *video_stream_info = + _serialize_video_stream_info (GST_DISCOVERER_VIDEO_INFO (sinfo)); + stream_variant = + g_variant_new ("(yvv)", 'v', common_stream_variant, video_stream_info); + } else if (GST_IS_DISCOVERER_SUBTITLE_INFO (sinfo)) { + GVariant *subtitle_stream_info = + _serialize_subtitle_stream_info (GST_DISCOVERER_SUBTITLE_INFO (sinfo)); + stream_variant = + g_variant_new ("(yvv)", 's', common_stream_variant, + subtitle_stream_info); + } + + return stream_variant; +} + +/* Parsing code */ + +#define GET_FROM_TUPLE(v, t, n, val) G_STMT_START{ \ + GVariant *child = g_variant_get_child_value (v, n); \ + *val = g_variant_get_##t(child); \ + g_variant_unref (child); \ +}G_STMT_END + +static const gchar * +_maybe_get_string_from_tuple (GVariant * tuple, guint index) +{ + const gchar *ret = NULL; + GVariant *maybe; + GET_FROM_TUPLE (tuple, maybe, index, &maybe); + if (maybe) { + ret = g_variant_get_string (maybe, NULL); + g_variant_unref (maybe); + } + + return ret; +} + +static void +_parse_info (GstDiscovererInfo * info, GVariant * info_variant) +{ + const gchar *str; + + str = _maybe_get_string_from_tuple (info_variant, 0); + if (str) + info->uri = g_strdup (str); + + GET_FROM_TUPLE (info_variant, uint64, 1, &info->duration); + GET_FROM_TUPLE (info_variant, boolean, 2, &info->seekable); + + str = _maybe_get_string_from_tuple (info_variant, 3); + if (str) + info->tags = gst_tag_list_new_from_string (str); +} + +static void +_parse_common_stream_info (GstDiscovererStreamInfo * sinfo, GVariant * common) +{ + const gchar *str; + + str = _maybe_get_string_from_tuple (common, 0); + if (str) + sinfo->stream_id = g_strdup (str); + + str = _maybe_get_string_from_tuple (common, 1); + if (str) + sinfo->caps = gst_caps_from_string (str); + + str = _maybe_get_string_from_tuple (common, 2); + if (str) + sinfo->tags = gst_tag_list_new_from_string (str); + + str = _maybe_get_string_from_tuple (common, 3); + if (str) + sinfo->misc = gst_structure_new_from_string (str); + + g_variant_unref (common); +} + +static void +_parse_audio_stream_info (GstDiscovererAudioInfo * ainfo, GVariant * specific) +{ + const gchar *str; + + GET_FROM_TUPLE (specific, uint32, 0, &ainfo->channels); + GET_FROM_TUPLE (specific, uint32, 1, &ainfo->sample_rate); + GET_FROM_TUPLE (specific, uint32, 2, &ainfo->bitrate); + GET_FROM_TUPLE (specific, uint32, 3, &ainfo->max_bitrate); + GET_FROM_TUPLE (specific, uint32, 4, &ainfo->depth); + + str = _maybe_get_string_from_tuple (specific, 5); + + if (str) + ainfo->language = g_strdup (str); + + g_variant_unref (specific); +} + +static void +_parse_video_stream_info (GstDiscovererVideoInfo * vinfo, GVariant * specific) +{ + GET_FROM_TUPLE (specific, uint32, 0, &vinfo->width); + GET_FROM_TUPLE (specific, uint32, 1, &vinfo->height); + GET_FROM_TUPLE (specific, uint32, 2, &vinfo->depth); + GET_FROM_TUPLE (specific, uint32, 3, &vinfo->framerate_num); + GET_FROM_TUPLE (specific, uint32, 4, &vinfo->framerate_denom); + GET_FROM_TUPLE (specific, uint32, 5, &vinfo->par_num); + GET_FROM_TUPLE (specific, uint32, 6, &vinfo->par_denom); + GET_FROM_TUPLE (specific, boolean, 7, &vinfo->interlaced); + GET_FROM_TUPLE (specific, uint32, 8, &vinfo->bitrate); + GET_FROM_TUPLE (specific, uint32, 9, &vinfo->max_bitrate); + GET_FROM_TUPLE (specific, boolean, 10, &vinfo->is_image); + + g_variant_unref (specific); +} + +static void +_parse_subtitle_stream_info (GstDiscovererSubtitleInfo * sinfo, + GVariant * specific) +{ + GVariant *maybe; + + maybe = g_variant_get_maybe (specific); + if (maybe) { + sinfo->language = g_strdup (g_variant_get_string (maybe, NULL)); + g_variant_unref (maybe); + } + + g_variant_unref (specific); +} + +static GstDiscovererStreamInfo * +_parse_discovery (GVariant * variant, GstDiscovererInfo * info) +{ + gchar type; + GVariant *common = g_variant_get_child_value (variant, 1); + GVariant *specific = g_variant_get_child_value (variant, 2); + GstDiscovererStreamInfo *sinfo = NULL; + + GET_FROM_TUPLE (variant, byte, 0, &type); + switch (type) { + case 'c': + sinfo = g_object_new (GST_TYPE_DISCOVERER_CONTAINER_INFO, NULL); + break; + case 'a': + sinfo = g_object_new (GST_TYPE_DISCOVERER_AUDIO_INFO, NULL); + _parse_audio_stream_info (GST_DISCOVERER_AUDIO_INFO (sinfo), + g_variant_get_child_value (specific, 0)); + break; + case 'v': + sinfo = g_object_new (GST_TYPE_DISCOVERER_VIDEO_INFO, NULL); + _parse_video_stream_info (GST_DISCOVERER_VIDEO_INFO (sinfo), + g_variant_get_child_value (specific, 0)); + break; + case 's': + sinfo = g_object_new (GST_TYPE_DISCOVERER_SUBTITLE_INFO, NULL); + _parse_subtitle_stream_info (GST_DISCOVERER_SUBTITLE_INFO (sinfo), + g_variant_get_child_value (specific, 0)); + break; + default: + GST_WARNING ("Unexpected discoverer info type %d", type); + goto out; + } + + _parse_common_stream_info (sinfo, g_variant_get_child_value (common, 0)); + + info->stream_list = g_list_append (info->stream_list, sinfo); + + if (!info->stream_info) { + info->stream_info = sinfo; + } + + if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) { + GVariantIter iter; + GVariant *child; + + GstDiscovererContainerInfo *cinfo = GST_DISCOVERER_CONTAINER_INFO (sinfo); + g_variant_iter_init (&iter, specific); + while ((child = g_variant_iter_next_value (&iter))) { + GstDiscovererStreamInfo *child_info; + child_info = _parse_discovery (g_variant_get_variant (child), info); + if (child_info != NULL) { + cinfo->streams = + g_list_append (cinfo->streams, + gst_discoverer_stream_info_ref (child_info)); + } + g_variant_unref (child); + } + } + +out: + + g_variant_unref (common); + g_variant_unref (specific); + g_variant_unref (variant); + return sinfo; +} /** * gst_discoverer_start: @@ -1790,6 +2107,9 @@ if (G_UNLIKELY (discoverer->priv->current_info)) { DISCO_UNLOCK (discoverer); GST_WARNING_OBJECT (discoverer, "Already handling a uri"); + if (err) + *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED, + "Already handling a uri"); return NULL; } @@ -1847,3 +2167,71 @@ } return res; } + +/** + * gst_discoverer_info_to_variant: + * @info: A #GstDiscovererInfo + * @flags: A combination of #GstDiscovererSerializeFlags to specify + * what needs to be serialized. + * + * Serializes @info to a #GVariant that can be parsed again + * through gst_discoverer_info_from_variant(). + * + * Note that any #GstToc (s) that might have been discovered will not be serialized + * for now. + * + * Returns: (transfer full): A newly-allocated #GVariant representing @info. + * + * Since: 1.6 + */ +GVariant * +gst_discoverer_info_to_variant (GstDiscovererInfo * info, + GstDiscovererSerializeFlags flags) +{ + /* FIXME: implement TOC support */ + GVariant *stream_variant; + GVariant *variant; + GstDiscovererStreamInfo *sinfo = gst_discoverer_info_get_stream_info (info); + GVariant *wrapper; + + stream_variant = gst_discoverer_info_to_variant_recurse (sinfo, flags); + variant = + g_variant_new ("(vv)", _serialize_info (info, flags), stream_variant); + + /* Returning a wrapper implies some small overhead, but simplifies + * deserializing from bytes */ + wrapper = g_variant_new_variant (variant); + + gst_discoverer_stream_info_unref (sinfo); + return wrapper; +} + +/** + * gst_discoverer_info_from_variant: + * @variant: A #GVariant to deserialize into a #GstDiscovererInfo. + * + * Parses a #GVariant as produced by gst_discoverer_info_to_variant() + * back to a #GstDiscovererInfo. + * + * Returns: (transfer full): A newly-allocated #GstDiscovererInfo. + * + * Since: 1.6 + */ +GstDiscovererInfo * +gst_discoverer_info_from_variant (GVariant * variant) +{ + GstDiscovererInfo *info = g_object_new (GST_TYPE_DISCOVERER_INFO, NULL); + GVariant *info_variant = g_variant_get_variant (variant); + GVariant *info_specific_variant; + GVariant *wrapped; + + GET_FROM_TUPLE (info_variant, variant, 0, &info_specific_variant); + GET_FROM_TUPLE (info_variant, variant, 1, &wrapped); + + _parse_info (info, info_specific_variant); + _parse_discovery (wrapped, info); + g_variant_unref (info_specific_variant); + g_variant_unref (info_variant); + + return info; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer.h gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer.h 2015-10-22 08:01:34.000000000 +0000 @@ -173,6 +173,29 @@ GST_DISCOVERER_MISSING_PLUGINS = 5 } GstDiscovererResult; +/** + * GstDiscovererSerializeFlags: + * @GST_DISCOVERER_SERIALIZE_BASIC: Serialize only basic information, excluding + * caps, tags and miscellaneous information + * @GST_DISCOVERER_SERIALIZE_CAPS: Serialize the caps for each stream + * @GST_DISCOVERER_SERIALIZE_TAGS: Serialize the tags for each stream + * @GST_DISCOVERER_SERIALIZE_MISC: Serialize miscellaneous information for each stream + * @GST_DISCOVERER_SERIALIZE_ALL: Serialize all the available info, including + * caps, tags and miscellaneous information + * + * You can use these flags to control what is serialized by + * gst_discoverer_info_to_variant() + * + * Since: 1.6 + */ + +typedef enum { + GST_DISCOVERER_SERIALIZE_BASIC = 0, + GST_DISCOVERER_SERIALIZE_CAPS = 1 << 0, + GST_DISCOVERER_SERIALIZE_TAGS = 1 << 1, + GST_DISCOVERER_SERIALIZE_MISC = 1 << 2, + GST_DISCOVERER_SERIALIZE_ALL = GST_DISCOVERER_SERIALIZE_CAPS | GST_DISCOVERER_SERIALIZE_TAGS | GST_DISCOVERER_SERIALIZE_MISC +} GstDiscovererSerializeFlags; /** * GstDiscovererInfo: @@ -191,7 +214,7 @@ GType gst_discoverer_info_get_type (void); #define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info)) -#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info)) +#define gst_discoverer_info_ref(info) (g_object_ref((GObject*)info)) GstDiscovererInfo* gst_discoverer_info_copy (GstDiscovererInfo * ptr); @@ -213,6 +236,10 @@ GList * gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info); GList * gst_discoverer_info_get_container_streams (GstDiscovererInfo *info); +GVariant * gst_discoverer_info_to_variant (GstDiscovererInfo *info, + GstDiscovererSerializeFlags flags); +GstDiscovererInfo * gst_discoverer_info_from_variant (GVariant *variant); + void gst_discoverer_stream_info_list_free (GList *infos); #define GST_TYPE_DISCOVERER \ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer-types.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer-types.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/gstdiscoverer-types.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/gstdiscoverer-types.c 2015-10-22 08:01:34.000000000 +0000 @@ -690,7 +690,7 @@ * @info: a #GstDiscovererStreamInfo * * Deprecated: This functions is deprecated since version 1.4, use - * gst_discoverer_stream_get_missing_elements_installer_details + * #gst_discoverer_info_get_missing_elements_installer_details * * Returns: (transfer none): additional information regarding the stream (for * example codec version, profile, etc..). If you wish to use the #GstStructure @@ -1016,7 +1016,7 @@ * @info: a #GstDiscovererInfo * * Deprecated: This functions is deprecated since version 1.4, use - * gst_discoverer_info_get_missing_elements_installer_details + * #gst_discoverer_info_get_missing_elements_installer_details * * Returns: (transfer none): Miscellaneous information stored as a #GstStructure * (for example: information about missing plugins). If you wish to use the @@ -1085,9 +1085,10 @@ * * Get the installer details for missing elements * - * Returns: (transfer full) (array zero-terminated=1): An array of strings + * Returns: (transfer none) (array zero-terminated=1): An array of strings * containing informations about how to install the various missing elements - * for @info to be usable. Free with g_strfreev(). + * for @info to be usable. If you wish to use the strings after the life-time + * of @info, you will need to copy them. * * Since: 1.4 */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/install-plugins.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/install-plugins.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/install-plugins.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/install-plugins.c 2015-10-22 08:01:34.000000000 +0000 @@ -381,10 +381,97 @@ /* private struct */ struct _GstInstallPluginsContext { + gchar *confirm_search; + gchar *desktop_id; + gchar *startup_notification_id; guint xid; }; /** + * gst_install_plugins_context_set_confirm_search: + * @ctx: a #GstInstallPluginsContext + * @confirm_search: whether to ask for confirmation before searching for plugins + * + * This function is used to tell the external installer process whether it + * should ask for confirmation or not before searching for missing plugins. + * + * If set, this option will be passed to the installer via a + * --interaction=[show-confirm-search|hide-confirm-search] command line option. + * + * Since: 1.6 + */ +void +gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx, + gboolean confirm_search) +{ + g_return_if_fail (ctx != NULL); + + if (confirm_search) + ctx->confirm_search = g_strdup ("show-confirm-search"); + else + ctx->confirm_search = g_strdup ("hide-confirm-search"); +} + +/** + * gst_install_plugins_context_set_desktop_id: + * @ctx: a #GstInstallPluginsContext + * @desktop_id: the desktop file ID of the calling application + * + * This function is used to pass the calling application's desktop file ID to + * the external installer process. + * + * A desktop file ID is the basename of the desktop file, including the + * .desktop extension. + * + * If set, the desktop file ID will be passed to the installer via a + * --desktop-id= command line option. + * + * Since: 1.6 + */ +void +gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx, + const gchar * desktop_id) +{ + g_return_if_fail (ctx != NULL); + + ctx->desktop_id = g_strdup (desktop_id); +} + +/** + * gst_install_plugins_context_set_startup_notification_id: + * @ctx: a #GstInstallPluginsContext + * @startup_id: the startup notification ID + * + * Sets the startup notification ID for the launched process. + * + * This is typically used to to pass the current X11 event timestamp to the + * external installer process. + * + * Startup notification IDs are defined in the + * [FreeDesktop.Org Startup Notifications standard](http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt). + * + * If set, the ID will be passed to the installer via a + * --startup-notification-id= command line option. + * + * GTK+/GNOME applications should be able to create a startup notification ID + * like this: + * + * timestamp = gtk_get_current_event_time (); + * startup_id = g_strdup_printf ("_TIME%u", timestamp); + * ... + * + * + * Since: 1.6 + */ +void gst_install_plugins_context_set_startup_notification_id + (GstInstallPluginsContext * ctx, const gchar * startup_id) +{ + g_return_if_fail (ctx != NULL); + + ctx->startup_notification_id = g_strdup (startup_id); +} + +/** * gst_install_plugins_context_set_xid: * @ctx: a #GstInstallPluginsContext * @xid: the XWindow ID (XID) of the top-level application @@ -445,6 +532,9 @@ { g_return_if_fail (ctx != NULL); + g_free (ctx->confirm_search); + g_free (ctx->desktop_id); + g_free (ctx->startup_notification_id); g_free (ctx); } @@ -454,6 +544,9 @@ GstInstallPluginsContext *ret; ret = gst_install_plugins_context_new (); + ret->confirm_search = g_strdup (ctx->confirm_search); + ret->desktop_id = g_strdup (ctx->desktop_id); + ret->startup_notification_id = g_strdup (ctx->startup_notification_id); ret->xid = ctx->xid; return ret; @@ -495,23 +588,33 @@ GPtrArray *arr; gboolean ret; GError *err = NULL; - gchar **argv, xid_str[64] = { 0, }; + gchar **argv; - arr = g_ptr_array_new (); + arr = g_ptr_array_new_with_free_func (g_free); /* argv[0] = helper path */ - g_ptr_array_add (arr, (gchar *) gst_install_plugins_get_helper ()); + g_ptr_array_add (arr, g_strdup (gst_install_plugins_get_helper ())); /* add any additional command line args from the context */ + if (ctx != NULL && ctx->confirm_search) { + g_ptr_array_add (arr, g_strdup_printf ("--interaction=%s", + ctx->confirm_search)); + } + if (ctx != NULL && ctx->desktop_id != NULL) { + g_ptr_array_add (arr, g_strdup_printf ("--desktop-id=%s", ctx->desktop_id)); + } + if (ctx != NULL && ctx->startup_notification_id != NULL) { + g_ptr_array_add (arr, g_strdup_printf ("--startup-notification-id=%s", + ctx->startup_notification_id)); + } if (ctx != NULL && ctx->xid != 0) { - g_snprintf (xid_str, sizeof (xid_str), "--transient-for=%u", ctx->xid); - g_ptr_array_add (arr, xid_str); + g_ptr_array_add (arr, g_strdup_printf ("--transient-for=%u", ctx->xid)); } /* finally, add the detail strings, but without duplicates */ while (details != NULL && details[0] != NULL) { if (!ptr_array_contains_string (arr, details[0])) - g_ptr_array_add (arr, (gpointer) details[0]); + g_ptr_array_add (arr, g_strdup (details[0])); ++details; } @@ -538,7 +641,7 @@ g_error_free (err); } - g_ptr_array_free (arr, TRUE); + g_ptr_array_unref (arr); return ret; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/install-plugins.h gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/install-plugins.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/install-plugins.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/install-plugins.h 2015-10-22 08:01:34.000000000 +0000 @@ -101,6 +101,15 @@ void gst_install_plugins_context_free (GstInstallPluginsContext * ctx); +void gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx, + gboolean confirm_search); + +void gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx, + const gchar * desktop_id); + +void gst_install_plugins_context_set_startup_notification_id (GstInstallPluginsContext * ctx, + const gchar * startup_id); + void gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx, guint xid); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -70,7 +70,7 @@ gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES)) GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstPbutils \ --nsversion=@GST_API_VERSION@ \ @@ -100,7 +100,7 @@ --pkg gstreamer-video-@GST_API_VERSION@ \ --pkg gstreamer-audio-@GST_API_VERSION@ \ --pkg-export gstreamer-pbutils-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -128,19 +128,3 @@ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstpbutils_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstpbutils_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstpbutils_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/pbutils \ - -:HEADERS $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstpbutils_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -25,7 +25,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -89,11 +99,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/gstpluginsbaseversion.h.in $(top_srcdir)/depcomp \ - $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \ - $(noinst_HEADERS) @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/pbutils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -116,7 +121,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -133,6 +137,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gstpluginsbaseversion.h @@ -262,6 +269,9 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(srcdir)/gstpluginsbaseversion.h.in \ + $(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -322,6 +332,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -351,6 +363,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -378,7 +392,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -393,6 +406,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -482,13 +496,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -541,6 +554,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -648,7 +662,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -657,7 +670,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -1142,6 +1155,8 @@ uninstall-nodist_libgstpbutils_@GST_API_VERSION@includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + # these are all the rules generating the relevant files $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list @@ -1180,7 +1195,7 @@ @touch $@ @HAVE_INTROSPECTION_TRUE@GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstPbutils \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1210,7 +1225,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-video-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-audio-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-pbutils-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1227,22 +1242,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir="$(top_builddir)/gst-libs/gst/audio/" \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstpbutils_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstpbutils_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstpbutils_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/pbutils \ - -:HEADERS $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstpbutils_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/missing-plugins.c gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/missing-plugins.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/pbutils/missing-plugins.c 2014-07-21 08:35:58.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/pbutils/missing-plugins.c 2015-10-22 08:01:34.000000000 +0000 @@ -144,9 +144,9 @@ /* rtp fields */ gst_structure_remove_field (s, "config"); gst_structure_remove_field (s, "clock-rate"); - gst_structure_remove_field (s, "clock-base"); + gst_structure_remove_field (s, "timestamp-offset"); gst_structure_remove_field (s, "maxps"); - gst_structure_remove_field (s, "seqnum-base"); + gst_structure_remove_field (s, "seqnum-offset"); gst_structure_remove_field (s, "npt-start"); gst_structure_remove_field (s, "npt-stop"); gst_structure_remove_field (s, "play-speed"); @@ -528,7 +528,7 @@ else if (missing_type == GST_MISSING_TYPE_URISINK) ret = gst_pb_utils_get_sink_description (detail); else - ret = gst_pb_utils_get_sink_description (detail); + ret = gst_pb_utils_get_element_description (detail); g_free (detail); } break; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -20,71 +20,62 @@ libgstriff_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstriff_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) -if HAVE_INTROSPECTION -BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir - -gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) -gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) - -GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ - GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ - $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ - --nsversion=@GST_API_VERSION@ \ - --strip-prefix=Gst \ - --warn-all \ - --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@` \ - --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" \ - --pkg gstreamer-@GST_API_VERSION@ \ - --pkg gstreamer-tag-@GST_API_VERSION@ \ - --pkg gstreamer-audio-@GST_API_VERSION@ \ - --pkg-export gstreamer-riff-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ - --output $@ \ - $(gir_headers) \ - $(gir_sources) - -# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to -# install anything - we need to install inside our prefix. -girdir = $(datadir)/gir-1.0 -gir_DATA = $(BUILT_GIRSOURCES) - -typelibsdir = $(libdir)/girepository-1.0/ - -typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) - -%.typelib: %.gir $(INTROSPECTION_COMPILER) - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ - $(INTROSPECTION_COMPILER) \ - --includedir=$(srcdir) \ - --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@` \ - $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) - -CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) -endif - -Android.mk: Makefile.am - androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstriff_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstriff_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstriff_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstriff_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ +# *** GIR DISABLED for this library *** +# +# This library does not respect the type naming conventions required to be +# usable in binded languages. +# +#if HAVE_INTROSPECTION +#BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir +# +#gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) +#gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) +# +#GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la +# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ +# GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ +# $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ +# --nsversion=@GST_API_VERSION@ \ +# --strip-prefix=Gst \ +# --warn-all \ +# --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@` \ +# --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" \ +# --pkg gstreamer-@GST_API_VERSION@ \ +# --pkg gstreamer-tag-@GST_API_VERSION@ \ +# --pkg gstreamer-audio-@GST_API_VERSION@ \ +# --pkg-export gstreamer-riff-@GST_API_VERSION@ \ +# --add-init-section="$(INTROSPECTION_INIT)" \ +# --output $@ \ +# $(gir_headers) \ +# $(gir_sources) +# +## INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to +## install anything - we need to install inside our prefix. +#girdir = $(datadir)/gir-1.0 +#gir_DATA = $(BUILT_GIRSOURCES) +# +#typelibsdir = $(libdir)/girepository-1.0/ +# +#typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) +# +#%.typelib: %.gir $(INTROSPECTION_COMPILER) +# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +# $(INTROSPECTION_COMPILER) \ +# --includedir=$(srcdir) \ +# --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@` \ +# $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) +# +#CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +#endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,9 +15,18 @@ @SET_MAKE@ - VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,9 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs/gst/riff -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp \ - $(libgstriff_@GST_API_VERSION@include_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -105,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -122,6 +127,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstriff_@GST_API_VERSION@include_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -153,8 +161,7 @@ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \ - "$(DESTDIR)$(typelibsdir)" \ +am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @@ -216,9 +223,9 @@ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -DATA = $(gir_DATA) $(typelibs_DATA) HEADERS = $(libgstriff_@GST_API_VERSION@include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -279,6 +286,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -308,6 +317,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -335,7 +346,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -350,6 +360,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -439,13 +450,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -498,6 +508,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -530,17 +541,6 @@ libgstriff_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstriff_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) -@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir -@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) -@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) - -# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to -# install anything - we need to install inside our prefix. -@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0 -@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES) -@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/ -@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) -@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) all: all-am .SUFFIXES: @@ -557,7 +557,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -674,48 +673,6 @@ clean-libtool: -rm -rf .libs _libs -install-girDATA: $(gir_DATA) - @$(NORMAL_INSTALL) - @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \ - done - -uninstall-girDATA: - @$(NORMAL_UNINSTALL) - @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir) -install-typelibsDATA: $(typelibs_DATA) - @$(NORMAL_INSTALL) - @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(typelibsdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(typelibsdir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \ - done - -uninstall-typelibsDATA: - @$(NORMAL_UNINSTALL) - @list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(typelibsdir)'; $(am__uninstall_files_from_dir) install-libgstriff_@GST_API_VERSION@includeHEADERS: $(libgstriff_@GST_API_VERSION@include_HEADERS) @$(NORMAL_INSTALL) @list='$(libgstriff_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstriff_@GST_API_VERSION@includedir)" || list=; \ @@ -776,9 +733,9 @@ done check-am: all-am check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) +all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)"; do \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -803,7 +760,6 @@ mostlyclean-generic: clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -834,9 +790,7 @@ info-am: -install-data-am: install-girDATA \ - install-libgstriff_@GST_API_VERSION@includeHEADERS \ - install-typelibsDATA +install-data-am: install-libgstriff_@GST_API_VERSION@includeHEADERS install-dvi: install-dvi-am @@ -882,9 +836,8 @@ ps-am: -uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \ - uninstall-libgstriff_@GST_API_VERSION@includeHEADERS \ - uninstall-typelibsDATA +uninstall-am: uninstall-libLTLIBRARIES \ + uninstall-libgstriff_@GST_API_VERSION@includeHEADERS .MAKE: install-am install-strip @@ -893,71 +846,78 @@ distclean distclean-compile distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-girDATA \ - install-html install-html-am install-info install-info-am \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ install-libLTLIBRARIES \ install-libgstriff_@GST_API_VERSION@includeHEADERS install-man \ install-pdf install-pdf-am install-ps install-ps-am \ - install-strip install-typelibsDATA installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags-am uninstall uninstall-am uninstall-girDATA \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-libLTLIBRARIES \ - uninstall-libgstriff_@GST_API_VERSION@includeHEADERS \ - uninstall-typelibsDATA + uninstall-libgstriff_@GST_API_VERSION@includeHEADERS + +.PRECIOUS: Makefile -@HAVE_INTROSPECTION_TRUE@GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ -@HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ -@HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ -@HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --strip-prefix=Gst \ -@HAVE_INTROSPECTION_TRUE@ --warn-all \ -@HAVE_INTROSPECTION_TRUE@ --c-include "gst/riff/riff.h" \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=$(builddir)/../tag \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=$(builddir)/../audio \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ -@HAVE_INTROSPECTION_TRUE@ --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ -@HAVE_INTROSPECTION_TRUE@ --library=libgstriff-@GST_API_VERSION@.la \ -@HAVE_INTROSPECTION_TRUE@ --include=GstAudio-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --include=GstTag-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --include=Gst-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --libtool="$(top_builddir)/libtool" \ -@HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-tag-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-audio-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-riff-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ -@HAVE_INTROSPECTION_TRUE@ --output $@ \ -@HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ -@HAVE_INTROSPECTION_TRUE@ $(gir_sources) - -@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER) -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ -@HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(srcdir) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(builddir) \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(builddir)/../tag \ -@HAVE_INTROSPECTION_TRUE@ --includedir=$(builddir)/../audio \ -@HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ -@HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ -@HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) - -Android.mk: Makefile.am - androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstriff_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstriff_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstriff_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstriff_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ +# *** GIR DISABLED for this library *** +# +# This library does not respect the type naming conventions required to be +# usable in binded languages. +# +#if HAVE_INTROSPECTION +#BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir +# +#gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) +#gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) +# +#GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la +# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ +# GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ +# $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ +# --nsversion=@GST_API_VERSION@ \ +# --strip-prefix=Gst \ +# --warn-all \ +# --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@` \ +# --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" \ +# --pkg gstreamer-@GST_API_VERSION@ \ +# --pkg gstreamer-tag-@GST_API_VERSION@ \ +# --pkg gstreamer-audio-@GST_API_VERSION@ \ +# --pkg-export gstreamer-riff-@GST_API_VERSION@ \ +# --add-init-section="$(INTROSPECTION_INIT)" \ +# --output $@ \ +# $(gir_headers) \ +# $(gir_sources) +# +#girdir = $(datadir)/gir-1.0 +#gir_DATA = $(BUILT_GIRSOURCES) +# +#typelibsdir = $(libdir)/girepository-1.0/ +# +#typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) +# +#%.typelib: %.gir $(INTROSPECTION_COMPILER) +# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +# $(INTROSPECTION_COMPILER) \ +# --includedir=$(srcdir) \ +# --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@` \ +# $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) +# +#CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +#endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-ids.h gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-ids.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-ids.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-ids.h 2015-10-22 08:01:34.000000000 +0000 @@ -34,6 +34,7 @@ /* tags */ #define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F') #define GST_RIFF_TAG_AVF0 GST_MAKE_FOURCC ('A','V','F','0') +#define GST_RIFF_TAG_RF64 GST_MAKE_FOURCC ('R','F','6','4') #define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X') #define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T') #define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h') @@ -62,6 +63,7 @@ #define GST_RIFF_TAG_note GST_MAKE_FOURCC ('n','o','t','e') #define GST_RIFF_TAG_smpl GST_MAKE_FOURCC ('s','m','p','l') #define GST_RIFF_TAG_inst GST_MAKE_FOURCC ('i','n','s','t') +#define GST_RIFF_TAG_FLLR GST_MAKE_FOURCC ('F','L','L','R') /* LIST types */ #define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i') diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-media.c gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-media.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-media.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-media.c 2015-10-22 08:01:34.000000000 +0000 @@ -1021,26 +1021,24 @@ { gint i, p; guint64 channel_mask = 0; - GstAudioChannelPosition from[18], to[18]; + GstAudioChannelPosition *from, *to; + gboolean ret = FALSE; - if (num_channels < 1 || num_channels > MAX_CHANNEL_POSITIONS) { + if (num_channels < 1) { GST_DEBUG ("invalid number of channels: %d", num_channels); return FALSE; } + from = g_new (GstAudioChannelPosition, num_channels); + to = g_new (GstAudioChannelPosition, num_channels); p = 0; for (i = 0; i < MAX_CHANNEL_POSITIONS; ++i) { if ((layout & layout_mapping[i].ms_mask) != 0) { if (p >= num_channels) { GST_WARNING ("More bits set in the channel layout map than there " - "are channels! Broken file"); - return FALSE; - } - if (layout_mapping[i].gst_pos == GST_AUDIO_CHANNEL_POSITION_INVALID) { - GST_WARNING ("Unsupported channel position (mask 0x%08x) in channel " - "layout map - ignoring those channels", layout_mapping[i].ms_mask); - /* what to do? just ignore it and let downstream deal with a channel - * layout that has INVALID positions in it for now ... */ + "are channels! Setting channel-mask to 0."); + channel_mask = 0; + break; } channel_mask |= G_GUINT64_CONSTANT (1) << layout_mapping[i].gst_pos; from[p] = layout_mapping[i].gst_pos; @@ -1048,25 +1046,33 @@ } } - if (p != num_channels) { - GST_WARNING ("Only %d bits set in the channel layout map, but there are " - "supposed to be %d channels! Broken file", p, num_channels); - return FALSE; - } - - if (channel_reorder_map) { + if (channel_mask > 0 && channel_reorder_map) { + if (p != num_channels) { + /* WAVEFORMATEXTENSIBLE allows to have more channels than bits in + * the channel mask. We accept this, too, and hope that downstream + * can handle this */ + GST_WARNING ("Partially unknown positions in channel mask"); + for (; p < num_channels; ++p) + from[p] = GST_AUDIO_CHANNEL_POSITION_INVALID; + } memcpy (to, from, sizeof (from[0]) * num_channels); if (!gst_audio_channel_positions_to_valid_order (to, num_channels)) - return FALSE; + goto fail; if (!gst_audio_get_channel_reorder_map (num_channels, from, to, channel_reorder_map)) - return FALSE; + goto fail; } gst_caps_set_simple (caps, "channel-mask", GST_TYPE_BITMASK, channel_mask, NULL); - return TRUE; + ret = TRUE; + +fail: + g_free (from); + g_free (to); + + return ret; } static gboolean @@ -1202,17 +1208,21 @@ gint wd, ws; GstAudioFormat format; - /* If we have an empty blockalign, we take the width contained in - * strf->bits_per_sample */ - if (ba != 0) + if (ba > (32 / 8) * ch) { + GST_WARNING ("Invalid block align: %d > %d", ba, (32 / 8) * ch); + wd = GST_ROUND_UP_8 (strf->bits_per_sample); + } else if (ba != 0) { + /* If we have an empty blockalign, we take the width contained in + * strf->bits_per_sample */ wd = ba * 8 / ch; - else - wd = strf->bits_per_sample; + } else { + wd = GST_ROUND_UP_8 (strf->bits_per_sample); + } if (strf->bits_per_sample > 32) { GST_WARNING ("invalid depth (%d) of pcm audio, overwriting.", strf->bits_per_sample); - strf->bits_per_sample = 8 * ((wd + 7) / 8); + strf->bits_per_sample = wd; } /* in riff, the depth is stored in the size field but it just means that @@ -1223,6 +1233,10 @@ format = gst_audio_format_build_integer (wd != 8, G_LITTLE_ENDIAN, wd, ws); + if (format == GST_AUDIO_FORMAT_UNKNOWN) { + GST_WARNING ("Unsupported raw audio format with width %d", wd); + return NULL; + } caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, gst_audio_format_to_string (format), diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-read.c gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-read.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/riff/riff-read.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/riff/riff-read.c 2015-10-22 08:01:34.000000000 +0000 @@ -235,7 +235,8 @@ goto too_small; tag = GST_READ_UINT32_LE (info.data); - if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0) + if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0 + && tag != GST_RIFF_TAG_RF64) goto not_riff; *doctype = GST_READ_UINT32_LE (info.data + 8); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtcpbuffer.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtcpbuffer.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtcpbuffer.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtcpbuffer.c 2015-10-22 08:01:34.000000000 +0000 @@ -87,20 +87,9 @@ return gst_rtcp_buffer_new_take_data (g_memdup (data, len), len); } -/** - * gst_rtcp_buffer_validate_data: - * @data: (array length=len): the data to validate - * @len: the length of @data to validate - * - * Check if the @data and @size point to the data of a valid RTCP (compound) - * packet. - * Use this function to validate a packet before using the other functions in - * this module. - * - * Returns: TRUE if the data points to a valid RTCP packet. - */ -gboolean -gst_rtcp_buffer_validate_data (guint8 * data, guint len) +static gboolean +gst_rtcp_buffer_validate_data_internal (guint8 * data, guint len, + guint16 valid_mask) { guint16 header_mask; guint header_len; @@ -116,7 +105,7 @@ goto wrong_length; /* first packet must be RR or SR and version must be 2 */ - header_mask = ((data[0] << 8) | data[1]) & GST_RTCP_VALID_MASK; + header_mask = ((data[0] << 8) | data[1]) & valid_mask; if (G_UNLIKELY (header_mask != GST_RTCP_VALID_VALUE)) goto wrong_mask; @@ -140,24 +129,28 @@ if (data_len < 4) break; + /* padding only allowed on last packet */ + if (padding) + break; + /* check version of new packet */ version = data[0] & 0xc0; if (version != (GST_RTCP_VERSION << 6)) goto wrong_version; - /* padding only allowed on last packet */ - if ((padding = data[0] & 0x20)) - break; + /* check padding of new packet */ + if (data[0] & 0x20) { + padding = TRUE; + /* last byte of padding contains the number of padded bytes including + * itself. must be a multiple of 4, but cannot be 0. */ + pad_bytes = data[data_len - 1]; + if (pad_bytes == 0 || (pad_bytes & 0x3)) + goto wrong_padding; + } } - if (data_len > 0) { - /* some leftover bytes, check padding */ - if (!padding) - goto wrong_length; - - /* get padding */ - pad_bytes = data[data_len - 1]; - if (data_len != pad_bytes) - goto wrong_padding; + if (data_len != 0) { + /* some leftover bytes */ + goto wrong_length; } return TRUE; @@ -169,8 +162,7 @@ } wrong_mask: { - GST_DEBUG ("mask check failed (%04x != %04x)", header_mask, - GST_RTCP_VALID_VALUE); + GST_DEBUG ("mask check failed (%04x != %04x)", header_mask, valid_mask); return FALSE; } wrong_version: @@ -186,6 +178,75 @@ } /** + * gst_rtcp_buffer_validate_data_reduced: + * @data: (array length=len): the data to validate + * @len: the length of @data to validate + * + * Check if the @data and @size point to the data of a valid RTCP packet. + * Use this function to validate a packet before using the other functions in + * this module. + * + * This function is updated to support reduced size rtcp packets according to + * RFC 5506 and will validate full compound RTCP packets as well as reduced + * size RTCP packets. + * + * Returns: TRUE if the data points to a valid RTCP packet. + * + * Since: 1.6 + */ +gboolean +gst_rtcp_buffer_validate_data_reduced (guint8 * data, guint len) +{ + return gst_rtcp_buffer_validate_data_internal (data, len, + GST_RTCP_REDUCED_SIZE_VALID_MASK); +} + +/** + * gst_rtcp_buffer_validate_data: + * @data: (array length=len): the data to validate + * @len: the length of @data to validate + * + * Check if the @data and @size point to the data of a valid compound, + * non-reduced size RTCP packet. + * Use this function to validate a packet before using the other functions in + * this module. + * + * Returns: TRUE if the data points to a valid RTCP packet. + */ +gboolean +gst_rtcp_buffer_validate_data (guint8 * data, guint len) +{ + return gst_rtcp_buffer_validate_data_internal (data, len, + GST_RTCP_VALID_MASK); +} + +/** + * gst_rtcp_buffer_validate_reduced: + * @buffer: the buffer to validate + * + * Check if the data pointed to by @buffer is a valid RTCP packet using + * gst_rtcp_buffer_validate_reduced(). + * + * Returns: TRUE if @buffer is a valid RTCP packet. + * + * Since: 1.6 + */ +gboolean +gst_rtcp_buffer_validate_reduced (GstBuffer * buffer) +{ + gboolean res; + GstMapInfo map; + + g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); + + gst_buffer_map (buffer, &map, GST_MAP_READ); + res = gst_rtcp_buffer_validate_data_reduced (map.data, map.size); + gst_buffer_unmap (buffer, &map); + + return res; +} + +/** * gst_rtcp_buffer_validate: * @buffer: the buffer to validate * @@ -261,7 +322,7 @@ * gst_rtcp_buffer_unmap: * @rtcp: a buffer with an RTCP packet * - * Finish @rtcp after being constructured. This function is usually called + * Finish @rtcp after being constructed. This function is usually called * after gst_rtcp_buffer_map() and after adding the RTCP items to the new buffer. * * The function adjusts the size of @rtcp with the total length of all the diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtcpbuffer.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtcpbuffer.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtcpbuffer.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtcpbuffer.h 2015-10-22 08:01:34.000000000 +0000 @@ -59,6 +59,9 @@ GST_RTCP_TYPE_PSFB = 206 } GstRTCPType; +/* FIXME 2.0: backwards compatibility define for enum typo */ +#define GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ + /** * GstRTCPFBType: * @GST_RTCP_FB_TYPE_INVALID: Invalid type @@ -66,7 +69,7 @@ * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate * Notification - * @GST_RTCP_RTPFB_TYPE_RTCP_SR_SEQ: Request an SR packet for early + * @GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ: Request an SR packet for early * synchronization * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication @@ -89,7 +92,7 @@ GST_RTCP_RTPFB_TYPE_TMMBR = 3, GST_RTCP_RTPFB_TYPE_TMMBN = 4, /* RTPFB types assigned in RFC 6051 */ - GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ = 5, + GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ = 5, /* PSFB types */ GST_RTCP_PSFB_TYPE_PLI = 1, GST_RTCP_PSFB_TYPE_SLI = 2, @@ -165,6 +168,15 @@ * Mask for version, padding bit and packet type pair */ #define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe) + +/** + * GST_RTCP_REDUCED_SIZE_VALID_MASK: + * + * Mask for version, padding bit and packet type pair allowing reduced size + * packets, basically it accepts other types than RR and SR + */ +#define GST_RTCP_REDUCED_SIZE_VALID_MASK (0xc000 | 0x2000 | 0xf8) + /** * GST_RTCP_VALID_VALUE: * @@ -215,6 +227,10 @@ gboolean gst_rtcp_buffer_validate_data (guint8 *data, guint len); gboolean gst_rtcp_buffer_validate (GstBuffer *buffer); +gboolean gst_rtcp_buffer_validate_data_reduced (guint8 *data, guint len); +gboolean gst_rtcp_buffer_validate_reduced (GstBuffer *buffer); + + GstBuffer* gst_rtcp_buffer_new (guint mtu); gboolean gst_rtcp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c 2015-10-22 08:01:34.000000000 +0000 @@ -62,6 +62,7 @@ #include #include #include +#include #include "gstrtpbaseaudiopayload.h" @@ -415,7 +416,7 @@ } gst_rtp_buffer_unmap (&rtp); - GST_BUFFER_TIMESTAMP (buffer) = timestamp; + GST_BUFFER_PTS (buffer) = timestamp; /* get the offset in RTP time */ GST_BUFFER_OFFSET (buffer) = priv->bytes_to_rtptime (payload, priv->offset); @@ -477,6 +478,36 @@ return ret; } +typedef struct +{ + GstRTPBaseAudioPayload *pay; + GstBuffer *outbuf; +} CopyMetaData; + +static gboolean +foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) +{ + CopyMetaData *data = user_data; + GstRTPBaseAudioPayload *pay = data->pay; + GstBuffer *outbuf = data->outbuf; + const GstMetaInfo *info = (*meta)->info; + const gchar *const *tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_AUDIO_STR)))) { + GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; + GST_DEBUG_OBJECT (pay, "copy metadata %s", g_type_name (info->api)); + /* simply copy then */ + info->transform_func (outbuf, *meta, inbuf, + _gst_meta_transform_copy, ©_data); + } else { + GST_DEBUG_OBJECT (pay, "not copying metadata %s", g_type_name (info->api)); + } + + return TRUE; +} + static GstFlowReturn gst_rtp_base_audio_payload_push_buffer (GstRTPBaseAudioPayload * baseaudiopayload, GstBuffer * buffer, GstClockTime timestamp) @@ -484,7 +515,6 @@ GstRTPBasePayload *basepayload; GstRTPBaseAudioPayloadPrivate *priv; GstBuffer *outbuf; - guint8 *payload; guint payload_len; GstFlowReturn ret; @@ -496,13 +526,8 @@ GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT, payload_len, GST_TIME_ARGS (timestamp)); - if (priv->buffer_list) { - /* create just the RTP header buffer */ - outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); - } else { - /* create buffer to hold the payload */ - outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0); - } + /* create just the RTP header buffer */ + outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); /* set metadata */ gst_rtp_base_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len, @@ -525,15 +550,13 @@ GST_DEBUG_OBJECT (baseaudiopayload, "Pushing list %p", list); ret = gst_rtp_base_payload_push_list (basepayload, list); } else { - GstRTPBuffer rtp = { NULL }; + CopyMetaData data; /* copy payload */ - gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp); - payload = gst_rtp_buffer_get_payload (&rtp); - gst_buffer_extract (buffer, 0, payload, payload_len); - gst_rtp_buffer_unmap (&rtp); - - gst_buffer_unref (buffer); + data.pay = baseaudiopayload; + data.outbuf = outbuf; + gst_buffer_foreach_meta (buffer, foreach_metadata, &data); + outbuf = gst_buffer_append (outbuf, buffer); GST_DEBUG_OBJECT (baseaudiopayload, "Pushing buffer %p", outbuf); ret = gst_rtp_base_payload_push (basepayload, outbuf); @@ -609,11 +632,17 @@ timestamp); } else { GstBuffer *paybuf; + CopyMetaData data; + /* create buffer to hold the payload */ outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); paybuf = gst_adapter_take_buffer_fast (adapter, payload_len); + + data.pay = baseaudiopayload; + data.outbuf = outbuf; + gst_buffer_foreach_meta (paybuf, foreach_metadata, &data); outbuf = gst_buffer_append (outbuf, paybuf); /* set metadata */ @@ -820,7 +849,7 @@ payload = GST_RTP_BASE_AUDIO_PAYLOAD_CAST (basepayload); priv = payload->priv; - timestamp = GST_BUFFER_TIMESTAMP (buffer); + timestamp = GST_BUFFER_PTS (buffer); discont = GST_BUFFER_IS_DISCONT (buffer); if (discont) { @@ -885,6 +914,7 @@ GST_DEBUG_OBJECT (payload, "available now %u", available); /* as long as we have full frames */ + /* TODO: Use buffer lists here */ while (available >= min_payload_len) { /* get multiple of alignment */ payload_len = MIN (max_payload_len, available); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasedepayload.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasedepayload.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasedepayload.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasedepayload.c 2015-10-22 08:01:34.000000000 +0000 @@ -39,6 +39,7 @@ GstClockTime npt_stop; gdouble play_speed; gdouble play_scale; + guint clock_base; gboolean discont; GstClockTime pts; @@ -52,6 +53,7 @@ gboolean negotiated; GstCaps *last_caps; + GstEvent *segment_event; }; /* Filter signals and args */ @@ -76,6 +78,8 @@ static GstFlowReturn gst_rtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * in); +static GstFlowReturn gst_rtp_base_depayload_chain_list (GstPad * pad, + GstObject * parent, GstBufferList * list); static gboolean gst_rtp_base_depayload_handle_sink_event (GstPad * pad, GstObject * parent, GstEvent * event); @@ -92,6 +96,8 @@ klass); static void gst_rtp_base_depayload_init (GstRTPBaseDepayload * rtpbasepayload, GstRTPBaseDepayloadClass * klass); +static GstEvent *create_segment_event (GstRTPBaseDepayload * filter, + guint rtptime, GstClockTime position); GType gst_rtp_base_depayload_get_type (void) @@ -223,6 +229,8 @@ g_return_if_fail (pad_template != NULL); filter->sinkpad = gst_pad_new_from_template (pad_template, "sink"); gst_pad_set_chain_function (filter->sinkpad, gst_rtp_base_depayload_chain); + gst_pad_set_chain_list_function (filter->sinkpad, + gst_rtp_base_depayload_chain_list); gst_pad_set_event_function (filter->sinkpad, gst_rtp_base_depayload_handle_sink_event); gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); @@ -238,6 +246,7 @@ priv->npt_stop = -1; priv->play_speed = 1.0; priv->play_scale = 1.0; + priv->clock_base = -1; priv->dts = -1; priv->pts = -1; priv->duration = -1; @@ -306,6 +315,12 @@ else priv->play_scale = 1.0; + value = gst_structure_get_value (caps_struct, "clock-base"); + if (value && G_VALUE_HOLDS_UINT (value)) + priv->clock_base = g_value_get_uint (value); + else + priv->clock_base = -1; + if (bclass->set_caps) { res = bclass->set_caps (filter, caps); if (!res) { @@ -331,23 +346,26 @@ } static GstFlowReturn -gst_rtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * in) +gst_rtp_base_depayload_handle_buffer (GstRTPBaseDepayload * filter, + GstRTPBaseDepayloadClass * bclass, GstBuffer * in) { - GstRTPBaseDepayload *filter; + GstBuffer *(*process_rtp_packet_func) (GstRTPBaseDepayload * base, + GstRTPBuffer * rtp_buffer); + GstBuffer *(*process_func) (GstRTPBaseDepayload * base, GstBuffer * in); GstRTPBaseDepayloadPrivate *priv; - GstRTPBaseDepayloadClass *bclass; GstFlowReturn ret = GST_FLOW_OK; GstBuffer *out_buf; - GstClockTime pts, dts; guint16 seqnum; guint32 rtptime; gboolean discont, buf_discont; gint gap; GstRTPBuffer rtp = { NULL }; - filter = GST_RTP_BASE_DEPAYLOAD (parent); priv = filter->priv; + process_func = bclass->process; + process_rtp_packet_func = bclass->process_rtp_packet; + /* we must have a setcaps first */ if (G_UNLIKELY (!priv->negotiated)) goto not_negotiated; @@ -357,19 +375,12 @@ buf_discont = GST_BUFFER_IS_DISCONT (in); - pts = GST_BUFFER_PTS (in); - dts = GST_BUFFER_DTS (in); - /* convert to running_time and save the timestamp, this is the timestamp - * we put on outgoing buffers. */ - pts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, pts); - dts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, dts); - priv->pts = pts; - priv->dts = dts; + priv->pts = GST_BUFFER_PTS (in); + priv->dts = GST_BUFFER_DTS (in); priv->duration = GST_BUFFER_DURATION (in); seqnum = gst_rtp_buffer_get_seq (&rtp); rtptime = gst_rtp_buffer_get_timestamp (&rtp); - gst_rtp_buffer_unmap (&rtp); priv->last_seqnum = seqnum; priv->last_rtptime = rtptime; @@ -378,10 +389,10 @@ GST_LOG_OBJECT (filter, "discont %d, seqnum %u, rtptime %u, pts %" GST_TIME_FORMAT ", dts %" GST_TIME_FORMAT, buf_discont, seqnum, rtptime, - GST_TIME_ARGS (pts), GST_TIME_ARGS (dts)); + GST_TIME_ARGS (priv->pts), GST_TIME_ARGS (priv->dts)); /* Check seqnum. This is a very simple check that makes sure that the seqnums - * are striclty increasing, dropping anything that is out of the ordinary. We + * are strictly increasing, dropping anything that is out of the ordinary. We * can only do this when the next_seqnum is known. */ if (G_LIKELY (priv->next_seqnum != -1)) { gap = gst_rtp_buffer_compare_seqnum (seqnum, priv->next_seqnum); @@ -422,17 +433,27 @@ } } - bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (filter); + /* prepare segment event if needed */ + if (filter->need_newsegment) { + priv->segment_event = create_segment_event (filter, rtptime, + GST_BUFFER_PTS (in)); + filter->need_newsegment = FALSE; + } - if (G_UNLIKELY (bclass->process == NULL)) + if (process_rtp_packet_func != NULL) { + out_buf = process_rtp_packet_func (filter, &rtp); + gst_rtp_buffer_unmap (&rtp); + } else if (process_func != NULL) { + gst_rtp_buffer_unmap (&rtp); + out_buf = process_func (filter, in); + } else { goto no_process; + } /* let's send it out to processing */ - out_buf = bclass->process (filter, in); if (out_buf) { ret = gst_rtp_base_depayload_push (filter, out_buf); } - gst_buffer_unref (in); return ret; @@ -448,7 +469,6 @@ "element before the depayloader and setting the 'caps' property " "on that. Also see http://cgit.freedesktop.org/gstreamer/" "gst-plugins-good/tree/gst/rtp/README")); - gst_buffer_unref (in); return GST_FLOW_NOT_NEGOTIATED; } invalid_buffer: @@ -456,25 +476,82 @@ /* this is not fatal but should be filtered earlier */ GST_ELEMENT_WARNING (filter, STREAM, DECODE, (NULL), ("Received invalid RTP payload, dropping")); - gst_buffer_unref (in); return GST_FLOW_OK; } dropping: { + gst_rtp_buffer_unmap (&rtp); GST_WARNING_OBJECT (filter, "%d <= 100, dropping old packet", gap); - gst_buffer_unref (in); return GST_FLOW_OK; } no_process: { + gst_rtp_buffer_unmap (&rtp); /* this is not fatal but should be filtered earlier */ GST_ELEMENT_ERROR (filter, STREAM, NOT_IMPLEMENTED, (NULL), - ("The subclass does not have a process method")); - gst_buffer_unref (in); + ("The subclass does not have a process or process_rtp_packet method")); return GST_FLOW_ERROR; } } +static GstFlowReturn +gst_rtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * in) +{ + GstRTPBaseDepayloadClass *bclass; + GstRTPBaseDepayload *basedepay; + GstFlowReturn flow_ret; + + basedepay = GST_RTP_BASE_DEPAYLOAD_CAST (parent); + + bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (basedepay); + + flow_ret = gst_rtp_base_depayload_handle_buffer (basedepay, bclass, in); + + gst_buffer_unref (in); + + return flow_ret; +} + +static GstFlowReturn +gst_rtp_base_depayload_chain_list (GstPad * pad, GstObject * parent, + GstBufferList * list) +{ + GstRTPBaseDepayloadClass *bclass; + GstRTPBaseDepayload *basedepay; + GstFlowReturn flow_ret; + GstBuffer *buffer; + guint i, len; + + basedepay = GST_RTP_BASE_DEPAYLOAD_CAST (parent); + + bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (basedepay); + + flow_ret = GST_FLOW_OK; + + /* chain each buffer in list individually */ + len = gst_buffer_list_length (list); + + if (len == 0) + goto done; + + for (i = 0; i < len; i++) { + buffer = gst_buffer_list_get (list, i); + + /* Should we fix up any missing timestamps for list buffers here + * (e.g. set to first or previous timestamp in list) or just assume + * the's a jitterbuffer that will have done that for us? */ + flow_ret = gst_rtp_base_depayload_handle_buffer (basedepay, bclass, buffer); + if (flow_ret != GST_FLOW_OK) + break; + } + +done: + + gst_buffer_list_unref (list); + + return flow_ret; +} + static gboolean gst_rtp_base_depayload_handle_event (GstRTPBaseDepayload * filter, GstEvent * event) @@ -484,9 +561,13 @@ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_STOP: + GST_OBJECT_LOCK (filter); gst_segment_init (&filter->segment, GST_FORMAT_UNDEFINED); + GST_OBJECT_UNLOCK (filter); + filter->need_newsegment = TRUE; filter->priv->next_seqnum = -1; + gst_event_replace (&filter->priv->segment_event, NULL); break; case GST_EVENT_CAPS: { @@ -500,7 +581,10 @@ } case GST_EVENT_SEGMENT: { + GST_OBJECT_LOCK (filter); gst_event_copy_segment (event, &filter->segment); + GST_OBJECT_UNLOCK (filter); + /* don't pass the event downstream, we generate our own segment including * the NTP time and other things we receive in caps */ forward = FALSE; @@ -560,28 +644,63 @@ } static GstEvent * -create_segment_event (GstRTPBaseDepayload * filter, GstClockTime position) +create_segment_event (GstRTPBaseDepayload * filter, guint rtptime, + GstClockTime position) { GstEvent *event; - GstClockTime stop; + GstClockTime start, stop, running_time; GstRTPBaseDepayloadPrivate *priv; GstSegment segment; priv = filter->priv; + /* We don't need the object lock around - the segment + * can't change here while we're holding the STREAM_LOCK + */ + + /* determining the start of the segment */ + start = filter->segment.start; + if (priv->clock_base != -1 && position != -1) { + GstClockTime exttime, gap; + + exttime = priv->clock_base; + gst_rtp_buffer_ext_timestamp (&exttime, rtptime); + gap = gst_util_uint64_scale_int (exttime - priv->clock_base, + filter->clock_rate, GST_SECOND); + + /* account for lost packets */ + if (position > gap) { + GST_DEBUG_OBJECT (filter, + "Found gap of %" GST_TIME_FORMAT ", adjusting start: %" + GST_TIME_FORMAT " = %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT, + GST_TIME_ARGS (gap), GST_TIME_ARGS (position - gap), + GST_TIME_ARGS (position), GST_TIME_ARGS (gap)); + start = position - gap; + } + } + + /* determining the stop of the segment */ + stop = filter->segment.stop; if (priv->npt_stop != -1) - stop = priv->npt_stop - priv->npt_start; - else - stop = -1; + stop = start + (priv->npt_stop - priv->npt_start); + + if (position == -1) + position = start; + + running_time = gst_segment_to_running_time (&filter->segment, + GST_FORMAT_TIME, start); gst_segment_init (&segment, GST_FORMAT_TIME); segment.rate = priv->play_speed; segment.applied_rate = priv->play_scale; - segment.start = 0; + segment.start = start; segment.stop = stop; segment.time = priv->npt_start; segment.position = position; + segment.base = running_time; + GST_DEBUG_OBJECT (filter, "Creating segment event %" GST_SEGMENT_FORMAT, + &segment); event = gst_event_new_segment (&segment); return event; @@ -647,14 +766,9 @@ } /* if this is the first buffer send a NEWSEGMENT */ - if (G_UNLIKELY (filter->need_newsegment)) { - GstEvent *event; - - event = create_segment_event (filter, 0); - - gst_pad_push_event (filter->srcpad, event); - - filter->need_newsegment = FALSE; + if (G_UNLIKELY (filter->priv->segment_event)) { + gst_pad_push_event (filter->srcpad, filter->priv->segment_event); + filter->priv->segment_event = NULL; GST_DEBUG_OBJECT (filter, "Pushed newsegment event on this first buffer"); } @@ -760,6 +874,7 @@ priv->npt_stop = -1; priv->play_speed = 1.0; priv->play_scale = 1.0; + priv->clock_base = -1; priv->next_seqnum = -1; priv->negotiated = FALSE; priv->discont = FALSE; @@ -777,6 +892,7 @@ break; case GST_STATE_CHANGE_PAUSED_TO_READY: gst_caps_replace (&priv->last_caps, NULL); + gst_event_replace (&priv->segment_event, NULL); break; case GST_STATE_CHANGE_READY_TO_NULL: break; @@ -791,17 +907,27 @@ { GstRTPBaseDepayloadPrivate *priv; GstStructure *s; + GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE; priv = depayload->priv; + GST_OBJECT_LOCK (depayload); + if (depayload->segment.format != GST_FORMAT_UNDEFINED) { + pts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME, + priv->pts); + dts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME, + priv->dts); + } + GST_OBJECT_UNLOCK (depayload); + s = gst_structure_new ("application/x-rtp-depayload-stats", "clock_rate", G_TYPE_UINT, depayload->clock_rate, "npt-start", G_TYPE_UINT64, priv->npt_start, "npt-stop", G_TYPE_UINT64, priv->npt_stop, "play-speed", G_TYPE_DOUBLE, priv->play_speed, "play-scale", G_TYPE_DOUBLE, priv->play_scale, - "running-time-dts", G_TYPE_UINT64, priv->dts, - "running-time-pts", G_TYPE_UINT64, priv->pts, + "running-time-dts", G_TYPE_UINT64, dts, + "running-time-pts", G_TYPE_UINT64, pts, "seqnum", G_TYPE_UINT, (guint) priv->last_seqnum, "timestamp", G_TYPE_UINT, (guint) priv->last_rtptime, NULL); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasedepayload.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasedepayload.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasedepayload.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasedepayload.h 2015-10-22 08:01:34.000000000 +0000 @@ -36,9 +36,10 @@ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_DEPAYLOAD)) #define GST_IS_RTP_BASE_DEPAYLOAD_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_DEPAYLOAD)) +#define GST_RTP_BASE_DEPAYLOAD_CAST(obj) ((GstRTPBaseDepayload *)(obj)) -#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->sinkpad) -#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->srcpad) +#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->sinkpad) +#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload) (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->srcpad) typedef struct _GstRTPBaseDepayload GstRTPBaseDepayload; typedef struct _GstRTPBaseDepayloadClass GstRTPBaseDepayloadClass; @@ -79,7 +80,8 @@ /* virtuals, inform the subclass of the caps. */ gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps); - /* pure virtual function, child must use this to process incoming + /* pure virtual function, child must implement either this method + * or the process_rtp_packet virtual method to process incoming * rtp packets. If the child returns a buffer without a valid timestamp, * the timestamp of @in will be applied to the result buffer and the * buffer will be pushed. If this function returns %NULL, nothing is @@ -95,8 +97,21 @@ * implementation can override. */ gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event); + /* Optional. Same as the process virtual function, but slightly more + * efficient, since it is passed the rtp buffer structure that has already + * been mapped (with GST_MAP_READ) by the base class and thus does not have + * to be mapped again by the subclass. Can be used by the subclass to process + * incoming rtp packets. If the subclass returns a buffer without a valid + * timestamp, the timestamp of the input buffer will be applied to the result + * buffer and the output buffer will be pushed out. If this function returns + * %NULL, nothing is pushed out. + * + * Since: 1.6 + */ + GstBuffer * (*process_rtp_packet) (GstRTPBaseDepayload *base, GstRTPBuffer * rtp_buffer); + /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + gpointer _gst_reserved[GST_PADDING - 1]; }; GType gst_rtp_base_depayload_get_type (void); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasepayload.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasepayload.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbasepayload.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbasepayload.c 2015-10-22 08:01:34.000000000 +0000 @@ -44,6 +44,8 @@ gboolean perfect_rtptime; gint notified_first_timestamp; + gboolean pt_set; + guint64 base_offset; gint64 base_rtime; guint64 base_rtime_hz; @@ -370,6 +372,7 @@ priv->seqnum_offset_random = (rtpbasepayload->seqnum_offset == -1); priv->ts_offset_random = (rtpbasepayload->ts_offset == -1); priv->ssrc_random = (rtpbasepayload->ssrc == -1); + priv->pt_set = FALSE; rtpbasepayload->max_ptime = DEFAULT_MAX_PTIME; rtpbasepayload->min_ptime = DEFAULT_MIN_PTIME; @@ -771,7 +774,7 @@ static gboolean gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload) { - GstCaps *peercaps, *filter, *srccaps; + GstCaps *templ, *peercaps, *srccaps; gboolean res; payload->priv->caps_max_ptime = DEFAULT_MAX_PTIME; @@ -779,22 +782,21 @@ gst_pad_check_reconfigure (payload->srcpad); - filter = gst_pad_get_pad_template_caps (payload->srcpad); + templ = gst_pad_get_pad_template_caps (payload->srcpad); if (payload->priv->subclass_srccaps) { GstCaps *tmp = gst_caps_intersect (payload->priv->subclass_srccaps, - filter); - gst_caps_unref (filter); - filter = tmp; + templ); + gst_caps_unref (templ); + templ = tmp; } - peercaps = gst_pad_peer_query_caps (payload->srcpad, filter); - gst_caps_unref (filter); + peercaps = gst_pad_peer_query_caps (payload->srcpad, templ); if (peercaps == NULL) { /* no peer caps, just add the other properties */ - srccaps = gst_caps_copy (payload->priv->subclass_srccaps); + srccaps = gst_caps_copy (templ); gst_caps_set_simple (srccaps, "payload", G_TYPE_INT, GST_RTP_BASE_PAYLOAD_PT (payload), "ssrc", G_TYPE_UINT, payload->current_ssrc, @@ -806,91 +808,217 @@ GstCaps *temp; GstStructure *s, *d; const GValue *value; - gint pt; + gboolean have_pt = FALSE; + gboolean have_ts_offset = FALSE; + gboolean have_seqnum_offset = FALSE; guint max_ptime, ptime; /* peer provides caps we can use to fixate. They are already intersected * with our srccaps, just make them writable */ temp = gst_caps_make_writable (peercaps); + peercaps = NULL; if (gst_caps_is_empty (temp)) { gst_caps_unref (temp); + gst_caps_unref (templ); return FALSE; } - /* now fixate, start by taking the first caps */ - temp = gst_caps_truncate (temp); + /* We prefer the pt, timestamp-offset, seqnum-offset from the + * property (if set), or any previously configured value over what + * downstream prefers. Only if downstream can't accept that, or the + * properties were not set, we fall back to choosing downstream's + * preferred value + * + * For ssrc we prefer any value downstream suggests, otherwise + * the property value or as a last resort a random value. + * This difference for ssrc is implemented for retaining backwards + * compatibility with changing rtpsession's internal-ssrc property. + * + * FIXME 2.0: All these properties should go away and be negotiated + * via caps only! + */ + + /* try to use the previously set pt, or the one from the property */ + if (payload->priv->pt_set || gst_pad_has_current_caps (payload->srcpad)) { + GstCaps *probe_caps = gst_caps_copy (templ); + GstCaps *intersection; + + gst_caps_set_simple (probe_caps, "payload", G_TYPE_INT, + GST_RTP_BASE_PAYLOAD_PT (payload), NULL); + intersection = gst_caps_intersect (probe_caps, temp); - /* get first structure */ - s = gst_caps_get_structure (temp, 0); + if (!gst_caps_is_empty (intersection)) { + GST_LOG_OBJECT (payload, "Using selected pt %d", + GST_RTP_BASE_PAYLOAD_PT (payload)); + have_pt = TRUE; + gst_caps_unref (temp); + temp = intersection; + } else { + GST_WARNING_OBJECT (payload, "Can't use selected pt %d", + GST_RTP_BASE_PAYLOAD_PT (payload)); + gst_caps_unref (intersection); + } + gst_caps_unref (probe_caps); + } - if (gst_structure_get_uint (s, "maxptime", &max_ptime)) - payload->priv->caps_max_ptime = max_ptime * GST_MSECOND; + /* If we got no pt above, select one now */ + if (!have_pt) { + gint pt; - if (gst_structure_get_uint (s, "ptime", &ptime)) - payload->ptime = ptime * GST_MSECOND; + /* get first structure */ + s = gst_caps_get_structure (temp, 0); - if (gst_structure_get_int (s, "payload", &pt)) { - /* use peer pt */ - GST_RTP_BASE_PAYLOAD_PT (payload) = pt; - GST_LOG_OBJECT (payload, "using peer pt %d", pt); - } else { - if (gst_structure_has_field (s, "payload")) { - /* can only fixate if there is a field */ - gst_structure_fixate_field_nearest_int (s, "payload", - GST_RTP_BASE_PAYLOAD_PT (payload)); - gst_structure_get_int (s, "payload", &pt); - GST_LOG_OBJECT (payload, "using peer pt %d", pt); + if (gst_structure_get_int (s, "payload", &pt)) { + /* use peer pt */ GST_RTP_BASE_PAYLOAD_PT (payload) = pt; + GST_LOG_OBJECT (payload, "using peer pt %d", pt); } else { - /* no pt field, use the internal pt */ - pt = GST_RTP_BASE_PAYLOAD_PT (payload); - gst_structure_set (s, "payload", G_TYPE_INT, pt, NULL); - GST_LOG_OBJECT (payload, "using internal pt %d", pt); + if (gst_structure_has_field (s, "payload")) { + /* can only fixate if there is a field */ + gst_structure_fixate_field_nearest_int (s, "payload", + GST_RTP_BASE_PAYLOAD_PT (payload)); + gst_structure_get_int (s, "payload", &pt); + GST_RTP_BASE_PAYLOAD_PT (payload) = pt; + GST_LOG_OBJECT (payload, "using peer pt %d", pt); + } else { + /* no pt field, use the internal pt */ + pt = GST_RTP_BASE_PAYLOAD_PT (payload); + gst_structure_set (s, "payload", G_TYPE_INT, pt, NULL); + GST_LOG_OBJECT (payload, "using internal pt %d", pt); + } } + s = NULL; } + /* If we got no ssrc above, select one now */ + /* get first structure */ + s = gst_caps_get_structure (temp, 0); + if (gst_structure_has_field_typed (s, "ssrc", G_TYPE_UINT)) { value = gst_structure_get_value (s, "ssrc"); payload->current_ssrc = g_value_get_uint (value); GST_LOG_OBJECT (payload, "using peer ssrc %08x", payload->current_ssrc); } else { - /* FIXME, fixate_nearest_uint would be even better */ + /* FIXME, fixate_nearest_uint would be even better but we + * don't support uint ranges so how likely is it that anybody + * uses a list of possible ssrcs */ gst_structure_set (s, "ssrc", G_TYPE_UINT, payload->current_ssrc, NULL); GST_LOG_OBJECT (payload, "using internal ssrc %08x", payload->current_ssrc); } + s = NULL; - if (gst_structure_has_field_typed (s, "timestamp-offset", G_TYPE_UINT)) { - value = gst_structure_get_value (s, "timestamp-offset"); - payload->ts_base = g_value_get_uint (value); - GST_LOG_OBJECT (payload, "using peer timestamp-offset %u", - payload->ts_base); - } else { - /* FIXME, fixate_nearest_uint would be even better */ - gst_structure_set (s, "timestamp-offset", G_TYPE_UINT, payload->ts_base, - NULL); - GST_LOG_OBJECT (payload, "using internal timestamp-offset %u", - payload->ts_base); + /* try to select the previously used timestamp-offset, or the one from the property */ + if (!payload->priv->ts_offset_random + || gst_pad_has_current_caps (payload->srcpad)) { + GstCaps *probe_caps = gst_caps_copy (templ); + GstCaps *intersection; + + gst_caps_set_simple (probe_caps, "timestamp-offset", G_TYPE_UINT, + payload->ts_base, NULL); + intersection = gst_caps_intersect (probe_caps, temp); + + if (!gst_caps_is_empty (intersection)) { + GST_LOG_OBJECT (payload, "Using selected timestamp-offset %u", + payload->ts_base); + gst_caps_unref (temp); + temp = intersection; + have_ts_offset = TRUE; + } else { + GST_WARNING_OBJECT (payload, "Can't use selected timestamp-offset %u", + payload->ts_base); + gst_caps_unref (intersection); + } + gst_caps_unref (probe_caps); } - if (gst_structure_has_field_typed (s, "seqnum-offset", G_TYPE_UINT)) { - value = gst_structure_get_value (s, "seqnum-offset"); - payload->seqnum_base = g_value_get_uint (value); - GST_LOG_OBJECT (payload, "using peer seqnum-offset %u", - payload->seqnum_base); - payload->priv->next_seqnum = payload->seqnum_base; - payload->seqnum = payload->seqnum_base; - payload->priv->seqnum_offset_random = FALSE; - } else { - /* FIXME, fixate_nearest_uint would be even better */ - gst_structure_set (s, "seqnum-offset", G_TYPE_UINT, payload->seqnum_base, - NULL); - GST_LOG_OBJECT (payload, "using internal seqnum-offset %u", - payload->seqnum_base); + + /* If we got no timestamp-offset above, select one now */ + if (!have_ts_offset) { + /* get first structure */ + s = gst_caps_get_structure (temp, 0); + + if (gst_structure_has_field_typed (s, "timestamp-offset", G_TYPE_UINT)) { + value = gst_structure_get_value (s, "timestamp-offset"); + payload->ts_base = g_value_get_uint (value); + GST_LOG_OBJECT (payload, "using peer timestamp-offset %u", + payload->ts_base); + } else { + /* FIXME, fixate_nearest_uint would be even better but we + * don't support uint ranges so how likely is it that anybody + * uses a list of possible timestamp-offsets */ + gst_structure_set (s, "timestamp-offset", G_TYPE_UINT, payload->ts_base, + NULL); + GST_LOG_OBJECT (payload, "using internal timestamp-offset %u", + payload->ts_base); + } + s = NULL; + } + + /* try to select the previously used seqnum-offset, or the one from the property */ + if (!payload->priv->seqnum_offset_random + || gst_pad_has_current_caps (payload->srcpad)) { + GstCaps *probe_caps = gst_caps_copy (templ); + GstCaps *intersection; + + gst_caps_set_simple (probe_caps, "seqnum-offset", G_TYPE_UINT, + payload->seqnum_base, NULL); + intersection = gst_caps_intersect (probe_caps, temp); + + if (!gst_caps_is_empty (intersection)) { + GST_LOG_OBJECT (payload, "Using selected seqnum-offset %u", + payload->seqnum_base); + gst_caps_unref (temp); + temp = intersection; + have_seqnum_offset = TRUE; + } else { + GST_WARNING_OBJECT (payload, "Can't use selected seqnum-offset %u", + payload->seqnum_base); + gst_caps_unref (intersection); + } + gst_caps_unref (probe_caps); + } + + /* If we got no seqnum-offset above, select one now */ + if (!have_seqnum_offset) { + /* get first structure */ + s = gst_caps_get_structure (temp, 0); + + if (gst_structure_has_field_typed (s, "seqnum-offset", G_TYPE_UINT)) { + value = gst_structure_get_value (s, "seqnum-offset"); + payload->seqnum_base = g_value_get_uint (value); + GST_LOG_OBJECT (payload, "using peer seqnum-offset %u", + payload->seqnum_base); + payload->priv->next_seqnum = payload->seqnum_base; + payload->seqnum = payload->seqnum_base; + payload->priv->seqnum_offset_random = FALSE; + } else { + /* FIXME, fixate_nearest_uint would be even better but we + * don't support uint ranges so how likely is it that anybody + * uses a list of possible seqnum-offsets */ + gst_structure_set (s, "seqnum-offset", G_TYPE_UINT, + payload->seqnum_base, NULL); + GST_LOG_OBJECT (payload, "using internal seqnum-offset %u", + payload->seqnum_base); + } + + s = NULL; } - /* make the target caps by copying over all the fixed caps, removing the - * unfixed caps. */ + /* now fixate, start by taking the first caps */ + temp = gst_caps_truncate (temp); + + /* get first structure */ + s = gst_caps_get_structure (temp, 0); + + if (gst_structure_get_uint (s, "maxptime", &max_ptime)) + payload->priv->caps_max_ptime = max_ptime * GST_MSECOND; + + if (gst_structure_get_uint (s, "ptime", &ptime)) + payload->ptime = ptime * GST_MSECOND; + + /* make the target caps by copying over all the fixed fields, removing the + * unfixed fields. */ srccaps = gst_caps_new_empty_simple (gst_structure_get_name (s)); d = gst_caps_get_structure (srccaps, 0); @@ -905,6 +1033,7 @@ res = gst_pad_set_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), srccaps); gst_caps_unref (srccaps); + gst_caps_unref (templ); return res; } @@ -1222,6 +1351,7 @@ break; case PROP_PT: rtpbasepayload->pt = g_value_get_uint (value); + priv->pt_set = TRUE; break; case PROP_SSRC: val = g_value_get_uint (value); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbuffer.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbuffer.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbuffer.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbuffer.c 2015-10-22 08:01:34.000000000 +0000 @@ -323,12 +323,14 @@ guint size; gsize bufsize, skip; guint idx, length; + guint n_mem; g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); g_return_val_if_fail (rtp != NULL, FALSE); g_return_val_if_fail (rtp->buffer == NULL, FALSE); - if (gst_buffer_n_memory (buffer) < 1) + n_mem = gst_buffer_n_memory (buffer); + if (n_mem < 1) goto no_memory; /* map first memory, this should be the header */ @@ -397,8 +399,9 @@ rtp->size[1] = 0; } - /* check for padding */ - if (data[0] & 0x20) { + /* check for padding unless flags says to skip */ + if ((data[0] & 0x20) != 0 && + (flags & GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING) == 0) { /* find memory for the padding bits */ if (!gst_buffer_find_memory (buffer, bufsize - 1, 1, &idx, &length, &skip)) goto wrong_length; @@ -423,10 +426,19 @@ goto wrong_padding; rtp->buffer = buffer; - /* we have not yet mapped the payload */ - rtp->data[2] = NULL; - rtp->size[2] = 0; - rtp->state = 0; + + if (n_mem == 1) { + /* we have mapped the buffer already, so might just as well fill in the + * payload pointer and size and avoid another buffer map/unmap later */ + rtp->data[2] = rtp->map[0].data + header_len; + rtp->size[2] = bufsize - header_len - padding; + } else { + /* we have not yet mapped the payload */ + rtp->data[2] = NULL; + rtp->size[2] = 0; + } + + /* rtp->state = 0; *//* unused */ return TRUE; @@ -469,7 +481,7 @@ GST_MEMDUMP ("buffer", data, size); for (i = 0; i < G_N_ELEMENTS (rtp->map); ++i) { - if (rtp->data[i] != NULL) + if (rtp->map[i].memory != NULL) gst_buffer_unmap (buffer, &rtp->map[i]); } return FALSE; @@ -491,8 +503,12 @@ g_return_if_fail (rtp->buffer != NULL); for (i = 0; i < 4; i++) { - if (rtp->data[i]) + if (rtp->map[i].memory != NULL) { gst_buffer_unmap (rtp->buffer, &rtp->map[i]); + rtp->map[i].memory = NULL; + } + rtp->data[i] = NULL; + rtp->size[i] = 0; } rtp->buffer = NULL; } @@ -703,7 +719,7 @@ } /** - * gst_rtp_buffer_get_extension_bytes: + * gst_rtp_buffer_get_extension_bytes: (rename-to gst_rtp_buffer_get_extension_data) * @rtp: the RTP packet * @bits: (out): location for header bits * @@ -719,8 +735,6 @@ * Returns: (transfer full): A new #GBytes if an extension header was present * and %NULL otherwise. * - * Rename to: gst_rtp_buffer_get_extension_data - * * Since: 1.2 */ GBytes * @@ -774,9 +788,11 @@ } if (changed) { + GstBuffer *buf = rtp->buffer; + gst_rtp_buffer_unmap (rtp); - gst_buffer_remove_memory_range (rtp->buffer, pos, -1); - gst_rtp_buffer_map (rtp->buffer, GST_MAP_READWRITE, rtp); + gst_buffer_remove_memory_range (buf, pos, -1); + gst_rtp_buffer_map (buf, GST_MAP_READWRITE, rtp); } } @@ -1148,7 +1164,7 @@ } /** - * gst_rtp_buffer_get_payload_bytes: + * gst_rtp_buffer_get_payload_bytes: (rename-to gst_rtp_buffer_get_payload) * @rtp: the RTP packet * * Similar to gst_rtp_buffer_get_payload, but more suitable for language @@ -1157,8 +1173,6 @@ * * Returns: (transfer full): A new #GBytes containing the payload data in @rtp. * - * Rename to: gst_rtp_buffer_get_payload - * * Since: 1.2 */ GBytes * @@ -1216,6 +1230,11 @@ gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2) { + /* See http://en.wikipedia.org/wiki/Serial_number_arithmetic + * for an explanation why this does the right thing even for + * wraparounds, under the assumption that the difference is + * never bigger than 2**15 sequence numbers + */ return (gint16) (seqnum2 - seqnum1); } @@ -1520,7 +1539,7 @@ static guint -get_twobytes_header_end_offset (guint8 * pdata, guint wordlen) +get_twobytes_header_end_offset (const guint8 * pdata, guint wordlen) { guint offset = 0; guint bytelen = wordlen * 4; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbuffer.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbuffer.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpbuffer.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpbuffer.h 2015-10-22 08:01:34.000000000 +0000 @@ -150,6 +150,22 @@ gpointer data, guint size); +/** + * GstRTPBufferMapFlags: + * @GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING: Skip mapping and validation of RTP + * padding and RTP pad count when present. Useful for buffers where + * the padding may be encrypted. + * @GST_RTP_BUFFER_MAP_FLAG_LAST: Offset to define more flags + * + * Additional mapping flags for gst_rtp_buffer_map(). + * + * Since: 1.6.1 + */ +typedef enum { + GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING = (GST_MAP_FLAG_LAST << 0), + GST_RTP_BUFFER_MAP_FLAG_LAST = (GST_MAP_FLAG_LAST << 8) + /* 8 more flags possible afterwards */ +} GstRTPBufferMapFlags; G_END_DECLS diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpdefs.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpdefs.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtpdefs.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtpdefs.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,49 @@ +/* GStreamer + * Copyright (C) <2005> Philippe Khalaf + * <2005> Wim Taymans + * + * gstrtpbuffer.h: various helper functions to manipulate buffers + * with RTP payload. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_RTPDEFS_H__ +#define __GST_RTPDEFS_H__ + +#include + +/** + * GstRTPProfile: + * @GST_RTP_PROFILE_UNKNOWN: invalid profile + * @GST_RTP_PROFILE_AVP: the Audio/Visual profile (RFC 3551) + * @GST_RTP_PROFILE_SAVP: the secure Audio/Visual profile (RFC 3711) + * @GST_RTP_PROFILE_AVPF: the Audio/Visual profile with feedback (RFC 4585) + * @GST_RTP_PROFILE_SAVPF: the secure Audio/Visual profile with feedback (RFC 5124) + * + * The transfer profile to use. + * + * Since: 1.6 + */ +typedef enum { + GST_RTP_PROFILE_UNKNOWN = 0, + GST_RTP_PROFILE_AVP, + GST_RTP_PROFILE_SAVP, + GST_RTP_PROFILE_AVPF, + GST_RTP_PROFILE_SAVPF +} GstRTPProfile; + +#endif /* __GST_RTPDEFS_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtphdrext.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtphdrext.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/gstrtphdrext.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/gstrtphdrext.c 2015-10-22 08:01:34.000000000 +0000 @@ -18,7 +18,7 @@ */ /** - * SECTION:gstrtpexthdr + * SECTION:gstrtphdrext * @short_description: Helper methods for dealing with RTP header extensions * @see_also: #GstRTPBasePayload, #GstRTPBaseDepayload, gstrtpbuffer * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -2,6 +2,7 @@ libgstrtpinclude_HEADERS = \ rtp.h \ + gstrtpdefs.h \ gstrtpbuffer.h \ gstrtcpbuffer.h \ gstrtppayloads.h \ @@ -20,24 +21,43 @@ gstrtpbasepayload.c \ gstrtpbasedepayload.c +built_sources = gstrtp-enumtypes.c +built_headers = gstrtp-enumtypes.h + libgstrtp_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstrtp_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) libgstrtp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) +nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES = $(built_sources) +nodist_libgstrtpinclude_HEADERS = gstrtp-enumtypes.h + +BUILT_SOURCES = $(built_headers) $(built_sources) +CLEANFILES = $(BUILT_SOURCES) + +glib_gen_prefix = __gst_rtp +glib_enum_define = gst_rtp +glib_enum_headers = $(libgstrtpinclude_HEADERS) +glib_gen_basename = gstrtp + +include $(top_srcdir)/common/gst-glib-gen.mak + if HAVE_INTROSPECTION BUILT_GIRSOURCES = GstRtp-@GST_API_VERSION@.gir gir_headers=$(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS)) +gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtpinclude_HEADERS)) gir_sources=$(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_API_VERSION@_la_SOURCES)) +gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES)) GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstRtp \ --nsversion=@GST_API_VERSION@ \ --strip-prefix=Gst \ --warn-all \ --c-include "gst/rtp/rtp.h" \ + -I$(top_builddir)/gst-libs \ -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@` \ @@ -48,7 +68,7 @@ --pkg gstreamer-@GST_API_VERSION@ \ --pkg gstreamer-base-@GST_API_VERSION@ \ --pkg-export gstreamer-rtp-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -71,19 +91,5 @@ --includedir=`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) +CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstrtp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstrtp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtp \ - -:HEADERS $(libgstrtp_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,28 @@ @SET_MAKE@ +# these are the variables your Makefile.am should set +# the example is based on the colorbalance interface + +#glib_enum_headers=$(colorbalance_headers) +#glib_enum_define=GST_COLOR_BALANCE +#glib_gen_prefix=gst_color_balance +#glib_gen_basename=colorbalance + VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,9 +99,8 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/rtp -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(libgstrtpinclude_HEADERS) README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -104,7 +121,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -121,6 +137,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libgstrtpinclude_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -153,7 +171,8 @@ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \ - "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)" + "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)" \ + "$(DESTDIR)$(libgstrtpincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgstrtp_@GST_API_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @@ -166,8 +185,11 @@ libgstrtp_@GST_API_VERSION@_la-gstrtpbaseaudiopayload.lo \ libgstrtp_@GST_API_VERSION@_la-gstrtpbasepayload.lo \ libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.lo +am__objects_1 = libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo +nodist_libgstrtp_@GST_API_VERSION@_la_OBJECTS = $(am__objects_1) libgstrtp_@GST_API_VERSION@_la_OBJECTS = \ - $(am_libgstrtp_@GST_API_VERSION@_la_OBJECTS) + $(am_libgstrtp_@GST_API_VERSION@_la_OBJECTS) \ + $(nodist_libgstrtp_@GST_API_VERSION@_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent @@ -210,7 +232,8 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES) +SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \ + $(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES) DIST_SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ @@ -218,7 +241,8 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(gir_DATA) $(typelibs_DATA) -HEADERS = $(libgstrtpinclude_HEADERS) +HEADERS = $(libgstrtpinclude_HEADERS) \ + $(nodist_libgstrtpinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -238,6 +262,9 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp \ + README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -298,6 +325,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -327,6 +356,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -354,7 +385,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -369,6 +399,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -458,13 +489,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -517,6 +547,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -532,6 +563,7 @@ libgstrtpincludedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/rtp libgstrtpinclude_HEADERS = \ rtp.h \ + gstrtpdefs.h \ gstrtpbuffer.h \ gstrtcpbuffer.h \ gstrtppayloads.h \ @@ -549,12 +581,29 @@ gstrtpbasepayload.c \ gstrtpbasedepayload.c +built_sources = gstrtp-enumtypes.c +built_headers = gstrtp-enumtypes.h libgstrtp_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstrtp_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) libgstrtp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) +nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES = $(built_sources) +nodist_libgstrtpinclude_HEADERS = gstrtp-enumtypes.h +BUILT_SOURCES = $(built_headers) $(built_sources) +CLEANFILES = $(BUILT_SOURCES) $(am__append_1) +glib_gen_prefix = __gst_rtp +glib_enum_define = gst_rtp +glib_enum_headers = $(libgstrtpinclude_HEADERS) +glib_gen_basename = gstrtp +enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtp-@GST_API_VERSION@.gir -@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS)) -@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_API_VERSION@_la_SOURCES)) +@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \ +@HAVE_INTROSPECTION_TRUE@ $(libgstrtpinclude_HEADERS)) \ +@HAVE_INTROSPECTION_TRUE@ $(patsubst %,$(builddir)/%, \ +@HAVE_INTROSPECTION_TRUE@ $(nodist_libgstrtpinclude_HEADERS)) +@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \ +@HAVE_INTROSPECTION_TRUE@ $(libgstrtp_@GST_API_VERSION@_la_SOURCES)) \ +@HAVE_INTROSPECTION_TRUE@ $(patsubst %,$(builddir)/%, \ +@HAVE_INTROSPECTION_TRUE@ $(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES)) # INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to # install anything - we need to install inside our prefix. @@ -562,12 +611,12 @@ @HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES) @HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/ @HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) -@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) -all: all-am +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -579,7 +628,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -588,6 +636,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; +$(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -643,6 +692,7 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtcpbuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbaseaudiopayload.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbasepayload.Plo@am__quote@ @@ -723,6 +773,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.lo `test -f 'gstrtpbasedepayload.c' || echo '$(srcdir)/'`gstrtpbasedepayload.c +libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo: gstrtp-enumtypes.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Tpo -c -o libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo `test -f 'gstrtp-enumtypes.c' || echo '$(srcdir)/'`gstrtp-enumtypes.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Tpo $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtp-enumtypes.c' object='libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo `test -f 'gstrtp-enumtypes.c' || echo '$(srcdir)/'`gstrtp-enumtypes.c + mostlyclean-libtool: -rm -f *.lo @@ -791,6 +848,27 @@ @list='$(libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libgstrtpincludedir)'; $(am__uninstall_files_from_dir) +install-nodist_libgstrtpincludeHEADERS: $(nodist_libgstrtpinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(libgstrtpincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libgstrtpincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstrtpincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstrtpincludedir)" || exit $$?; \ + done + +uninstall-nodist_libgstrtpincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libgstrtpincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique @@ -875,13 +953,15 @@ fi; \ done check-am: all-am -check: check-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)"; do \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)" "$(DESTDIR)$(libgstrtpincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -912,6 +992,7 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -936,7 +1017,7 @@ info-am: install-data-am: install-girDATA install-libgstrtpincludeHEADERS \ - install-typelibsDATA + install-nodist_libgstrtpincludeHEADERS install-typelibsDATA install-dvi: install-dvi-am @@ -983,9 +1064,11 @@ ps-am: uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \ - uninstall-libgstrtpincludeHEADERS uninstall-typelibsDATA + uninstall-libgstrtpincludeHEADERS \ + uninstall-nodist_libgstrtpincludeHEADERS \ + uninstall-typelibsDATA -.MAKE: install-am install-strip +.MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ @@ -995,24 +1078,66 @@ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-girDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ - install-libgstrtpincludeHEADERS install-man install-pdf \ + install-libgstrtpincludeHEADERS install-man \ + install-nodist_libgstrtpincludeHEADERS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ install-typelibsDATA installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-girDATA uninstall-libLTLIBRARIES \ - uninstall-libgstrtpincludeHEADERS uninstall-typelibsDATA + uninstall-libgstrtpincludeHEADERS \ + uninstall-nodist_libgstrtpincludeHEADERS \ + uninstall-typelibsDATA + +.PRECIOUS: Makefile + +# these are all the rules generating the relevant files +$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \ + mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h + +$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list + $(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \ + $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \ + mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c + +$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers) + $(AM_V_GEN)$(GLIB_MKENUMS) \ + --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include \n\nG_BEGIN_DECLS\n" \ + --fprod "\n/* enumerations from \"@filename@\" */\n" \ + --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ + --ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \ + $^ > $@ + +$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers) + @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi + $(AM_V_GEN)$(GLIB_MKENUMS) \ + --fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n" \ + $^ > $@ + +# a hack rule to make sure .Plo files exist because they get include'd +# from Makefile's +.deps/%-marshal.Plo: + @touch $@ + +.deps/%-enumtypes.Plo: + @touch $@ @HAVE_INTROSPECTION_TRUE@GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstRtp \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --strip-prefix=Gst \ @HAVE_INTROSPECTION_TRUE@ --warn-all \ @HAVE_INTROSPECTION_TRUE@ --c-include "gst/rtp/rtp.h" \ +@HAVE_INTROSPECTION_TRUE@ -I$(top_builddir)/gst-libs \ @HAVE_INTROSPECTION_TRUE@ -I$(top_srcdir)/gst-libs \ @HAVE_INTROSPECTION_TRUE@ --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ @@ -1023,7 +1148,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-base-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-rtp-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1037,20 +1162,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstrtp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstrtp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtp \ - -:HEADERS $(libgstrtp_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/rtp.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/rtp.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtp/rtp.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtp/rtp.h 2015-10-22 08:01:34.000000000 +0000 @@ -22,6 +22,7 @@ #ifndef __GST_RTP_H__ #define __GST_RTP_H__ +#include #include #include #include @@ -29,5 +30,6 @@ #include #include #include +#include #endif /* __GST_RTP_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspconnection.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspconnection.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspconnection.c 2014-09-04 09:56:47.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspconnection.c 2015-10-22 08:01:34.000000000 +0000 @@ -159,6 +159,7 @@ /* TLS */ GTlsDatabase *tls_database; + GTlsInteraction *tls_interaction; DecodeCtx ctx; DecodeCtx *ctxp; @@ -253,7 +254,7 @@ static void socket_client_event (GSocketClient * client, GSocketClientEvent event, - GSocketConnectable * connectable, GIOStream * connection, + GSocketConnectable * connectable, GTlsConnection * connection, GstRTSPConnection * rtspconn) { if (event == G_SOCKET_CLIENT_TLS_HANDSHAKING) { @@ -261,6 +262,8 @@ g_signal_connect (connection, "accept-certificate", (GCallback) tls_accept_certificate, rtspconn); + + g_tls_connection_set_interaction (connection, rtspconn->tls_interaction); } } @@ -353,6 +356,8 @@ * * Returns: #GST_RTSP_OK when @conn contains a valid connection. */ +/* FIXME 2.0 We don't need the ip and port since they can be got from the + * GSocket */ GstRTSPResult gst_rtsp_connection_create_from_socket (GSocket * socket, const gchar * ip, guint16 port, const gchar * initial_buffer, GstRTSPConnection ** conn) @@ -622,6 +627,61 @@ return result; } +/** + * gst_rtsp_connection_set_tls_interaction: + * @conn: a #GstRTSPConnection + * @interaction: a #GTlsInteraction + * + * Sets a #GTlsInteraction object to be used when the connection or certificate + * database need to interact with the user. This will be used to prompt the + * user for passwords where necessary. + * + * Since: 1.6 + */ +void +gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn, + GTlsInteraction * interaction) +{ + GTlsInteraction *old_interaction; + + g_return_if_fail (conn != NULL); + + if (interaction) + g_object_ref (interaction); + + old_interaction = conn->tls_interaction; + conn->tls_interaction = interaction; + + if (old_interaction) + g_object_unref (old_interaction); +} + +/** + * gst_rtsp_connection_get_tls_interaction: + * @conn: a #GstRTSPConnection + * + * Gets a #GTlsInteraction object to be used when the connection or certificate + * database need to interact with the user. This will be used to prompt the + * user for passwords where necessary. + * + * Returns: (transfer full): a reference on the #GTlsInteraction. Use + * g_object_unref() to release. + * + * Since: 1.6 + */ +GTlsInteraction * +gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn) +{ + GTlsInteraction *result; + + g_return_val_if_fail (conn != NULL, NULL); + + if ((result = conn->tls_interaction)) + g_object_ref (result); + + return result; +} + static GstRTSPResult setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout, gchar * uri) { @@ -1782,6 +1842,19 @@ next_value++; } + if (msg->type == GST_RTSP_MESSAGE_REQUEST && field == GST_RTSP_HDR_SESSION) { + /* The timeout parameter is only allowed in a session response header + * but some clients send it as part of the session request header. + * Ignore everything from the semicolon to the end of the line. */ + next_value = value; + while (*next_value != '\0') { + if (*next_value == ';') { + break; + } + next_value++; + } + } + /* trim space */ if (value != next_value && next_value[-1] == ' ') next_value[-1] = '\0'; @@ -2285,6 +2358,8 @@ g_object_unref (conn->client); if (conn->tls_database) g_object_unref (conn->tls_database); + if (conn->tls_interaction) + g_object_unref (conn->tls_interaction); g_timer_destroy (conn->timer); gst_rtsp_url_free (conn->url); @@ -2461,10 +2536,12 @@ { g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL); - if (flush) + if (flush) { g_cancellable_cancel (conn->cancellable); - else - g_cancellable_reset (conn->cancellable); + } else { + g_object_unref (conn->cancellable); + conn->cancellable = g_cancellable_new (); + } return GST_RTSP_OK; } @@ -2760,7 +2837,7 @@ } /** - * gst_rtsp_connection_get_readfd: + * gst_rtsp_connection_get_read_socket: * @conn: a #GstRTSPConnection * * Get the file descriptor for reading. @@ -2927,7 +3004,8 @@ conn2->stream1 = NULL; conn2->input_stream = NULL; conn2->control_stream = NULL; - g_cancellable_reset (conn2->cancellable); + g_object_unref (conn2->cancellable); + conn2->cancellable = NULL; /* We make socket0 the write socket and socket1 the read socket. */ conn->write_socket = conn->socket0; @@ -3129,7 +3207,8 @@ else if (G_UNLIKELY (res == GST_RTSP_EEOF)) { g_mutex_lock (&watch->mutex); if (watch->readsrc) { - g_source_remove_child_source ((GSource *) watch, watch->readsrc); + if (!g_source_is_destroyed ((GSource *) watch)) + g_source_remove_child_source ((GSource *) watch, watch->readsrc); g_source_unref (watch->readsrc); watch->readsrc = NULL; } @@ -3292,7 +3371,8 @@ rec = g_queue_pop_tail (watch->messages); if (rec == NULL) { if (watch->writesrc) { - g_source_remove_child_source ((GSource *) watch, watch->writesrc); + if (!g_source_is_destroyed ((GSource *) watch)) + g_source_remove_child_source ((GSource *) watch, watch->writesrc); g_source_unref (watch->writesrc); watch->writesrc = NULL; /* we create and add the write source again when we actually have @@ -3382,6 +3462,9 @@ { GstRTSPWatch *watch = (GstRTSPWatch *) source; + if (watch->notify) + watch->notify (watch->user_data); + build_reset (&watch->builder); gst_rtsp_message_unset (&watch->message); @@ -3401,9 +3484,6 @@ g_source_unref (watch->controlsrc); g_mutex_clear (&watch->mutex); - - if (watch->notify) - watch->notify (watch->user_data); } static GSourceFuncs gst_rtsp_source_funcs = { @@ -3416,7 +3496,7 @@ }; /** - * gst_rtsp_watch_new: + * gst_rtsp_watch_new: (skip) * @conn: a #GstRTSPConnection * @funcs: watch functions * @user_data: user data to pass to @funcs @@ -3855,7 +3935,7 @@ g_mutex_lock (&watch->mutex); watch->flushing = flushing; g_cond_signal (&watch->queue_not_full); - if (flushing == TRUE) { + if (flushing) { g_queue_foreach (watch->messages, (GFunc) gst_rtsp_rec_free, NULL); g_queue_clear (watch->messages); } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspconnection.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspconnection.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspconnection.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspconnection.h 2015-10-22 08:01:34.000000000 +0000 @@ -78,6 +78,8 @@ GTlsCertificateFlags gst_rtsp_connection_get_tls_validation_flags (GstRTSPConnection * conn); void gst_rtsp_connection_set_tls_database (GstRTSPConnection * conn, GTlsDatabase * database); GTlsDatabase * gst_rtsp_connection_get_tls_database (GstRTSPConnection * conn); +void gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn, GTlsInteraction * interaction); +GTlsInteraction * gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn); /* sending/receiving raw bytes */ GstRTSPResult gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, @@ -218,7 +220,7 @@ GTimeVal *timeout); void gst_rtsp_watch_set_flushing (GstRTSPWatch * watch, - gboolean flush); + gboolean flushing); G_END_DECLS #endif /* __GST_RTSP_CONNECTION_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspextension.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspextension.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspextension.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspextension.c 2015-10-22 08:01:34.000000000 +0000 @@ -35,7 +35,6 @@ #include "config.h" #endif -#include "gstrtsp-marshal.h" #include "gstrtsp-enumtypes.h" #include "gstrtspextension.h" @@ -82,7 +81,7 @@ gst_rtsp_extension_signals[SIGNAL_SEND] = g_signal_new ("send", G_TYPE_FROM_CLASS (iface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPExtensionInterface, - send), NULL, NULL, __gst_rtsp_marshal_ENUM__POINTER_POINTER, + send), NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_RTSP_RESULT, 2, G_TYPE_POINTER, G_TYPE_POINTER); initialized = TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsp-marshal.list gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsp-marshal.list --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsp-marshal.list 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsp-marshal.list 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# rtsp marshallers -ENUM:POINTER,POINTER diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspmessage.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspmessage.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspmessage.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspmessage.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,6 +1,7 @@ /* GStreamer * Copyright (C) <2005,2006> Wim Taymans * <2006> Lutz Mueller + * <2015> Tim-Philipp Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -58,6 +59,7 @@ { GstRTSPHeaderField field; gchar *value; + gchar *custom_key; /* custom header string (field is INVALID then) */ } RTSPKeyValue; static void @@ -462,6 +464,7 @@ RTSPKeyValue *keyval = &g_array_index (msg->hdr_fields, RTSPKeyValue, i); g_free (keyval->value); + g_free (keyval->custom_key); } g_array_free (msg->hdr_fields, TRUE); } @@ -516,6 +519,7 @@ key_value.field = field; key_value.value = value; + key_value.custom_key = NULL; g_array_append_val (msg->hdr_fields, key_value); @@ -617,6 +621,179 @@ } /** + * gst_rtsp_message_add_header_by_name: + * @msg: a #GstRTSPMessage + * @header: (transfer none): header string + * @value: (transfer none): the value of the header + * + * Add a header with key @header and @value to @msg. This function takes a copy + * of @value. + * + * Returns: a #GstRTSPResult. + * + * Since: 1.6 + */ +GstRTSPResult +gst_rtsp_message_add_header_by_name (GstRTSPMessage * msg, + const gchar * header, const gchar * value) +{ + GstRTSPHeaderField field; + + g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL); + + field = gst_rtsp_find_header_field (header); + if (field != GST_RTSP_HDR_INVALID) + return gst_rtsp_message_take_header (msg, field, g_strdup (value)); + + return gst_rtsp_message_take_header_by_name (msg, header, g_strdup (value)); +} + +/** + * gst_rtsp_message_take_header_by_name: + * @msg: a #GstRTSPMessage + * @header: (transfer none): a header string + * @value: (transfer full): the value of the header + * + * Add a header with key @header and @value to @msg. This function takes + * ownership of @value, but not of @header. + * + * Returns: a #GstRTSPResult. + * + * Since: 1.6 + */ +GstRTSPResult +gst_rtsp_message_take_header_by_name (GstRTSPMessage * msg, + const gchar * header, gchar * value) +{ + RTSPKeyValue key_value; + + g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL); + + key_value.field = GST_RTSP_HDR_INVALID; + key_value.value = value; + key_value.custom_key = g_strdup (header); + + g_array_append_val (msg->hdr_fields, key_value); + + return GST_RTSP_OK; +} + +/* returns -1 if not found, otherwise index position within msg->hdr_fields */ +static gint +gst_rtsp_message_find_header_by_name (GstRTSPMessage * msg, + const gchar * header, gint index) +{ + GstRTSPHeaderField field; + gint cnt = 0; + guint i; + + /* no header initialized, there are no headers */ + if (msg->hdr_fields == NULL) + return -1; + + field = gst_rtsp_find_header_field (header); + for (i = 0; i < msg->hdr_fields->len; i++) { + RTSPKeyValue *key_val; + + key_val = &g_array_index (msg->hdr_fields, RTSPKeyValue, i); + + if (key_val->field != field) + continue; + + if (key_val->custom_key != NULL && + g_ascii_strcasecmp (key_val->custom_key, header) != 0) + continue; + + if (index < 0 || cnt++ == index) + return i; + } + + return -1; +} + +/** + * gst_rtsp_message_remove_header_by_name: + * @msg: a #GstRTSPMessage + * @header: the header string + * @index: the index of the header + * + * Remove the @index header with key @header from @msg. If @index equals -1, + * all matching headers will be removed. + * + * Returns: a #GstRTSPResult + * + * Since: 1.6 + */ +GstRTSPResult +gst_rtsp_message_remove_header_by_name (GstRTSPMessage * msg, + const gchar * header, gint index) +{ + GstRTSPResult res = GST_RTSP_ENOTIMPL; + RTSPKeyValue *kv; + gint pos; + + g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL); + + do { + pos = gst_rtsp_message_find_header_by_name (msg, header, index); + + if (pos < 0) + break; + + kv = &g_array_index (msg->hdr_fields, RTSPKeyValue, pos); + g_free (kv->value); + g_free (kv->custom_key); + g_array_remove_index (msg->hdr_fields, pos); + res = GST_RTSP_OK; + } while (index < 0); + + return res; +} + +/** + * gst_rtsp_message_get_header_by_name: + * @msg: a #GstRTSPMessage + * @header: a #GstRTSPHeaderField + * @value: (out) (transfer none): pointer to hold the result + * @index: the index of the header + * + * Get the @index header value with key @header from @msg. The result in @value + * stays valid as long as it remains present in @msg. + * + * Returns: #GST_RTSP_OK when @field was found, #GST_RTSP_ENOTIMPL if the key + * was not found. + * + * Since: 1.6 + */ +GstRTSPResult +gst_rtsp_message_get_header_by_name (GstRTSPMessage * msg, + const gchar * header, gchar ** value, gint index) +{ + RTSPKeyValue *key_val; + gint pos; + + g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL); + g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL); + + pos = gst_rtsp_message_find_header_by_name (msg, header, index); + + if (pos < 0) + return GST_RTSP_ENOTIMPL; + + key_val = &g_array_index (msg->hdr_fields, RTSPKeyValue, pos); + + if (value) + *value = key_val->value; + + return GST_RTSP_OK; +} + +/** * gst_rtsp_message_append_headers: * @msg: a #GstRTSPMessage * @str: (transfer none): a string @@ -639,7 +816,11 @@ const gchar *keystr; key_value = &g_array_index (msg->hdr_fields, RTSPKeyValue, i); - keystr = gst_rtsp_header_as_text (key_value->field); + + if (key_value->custom_key != NULL) + keystr = key_value->custom_key; + else + keystr = gst_rtsp_header_as_text (key_value->field); g_string_append_printf (str, "%s: %s\r\n", keystr, key_value->value); } @@ -747,9 +928,14 @@ dump_key_value (gpointer data, gpointer user_data G_GNUC_UNUSED) { RTSPKeyValue *key_value = (RTSPKeyValue *) data; + const gchar *key_string; + + if (key_value->custom_key != NULL) + key_string = key_value->custom_key; + else + key_string = gst_rtsp_header_as_text (key_value->field); - g_print (" key: '%s', value: '%s'\n", - gst_rtsp_header_as_text (key_value->field), key_value->value); + g_print (" key: '%s', value: '%s'\n", key_string, key_value->value); } /** diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspmessage.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspmessage.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtspmessage.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtspmessage.h 2015-10-22 08:01:34.000000000 +0000 @@ -163,6 +163,25 @@ GstRTSPHeaderField field, gchar **value, gint indx); + +GstRTSPResult gst_rtsp_message_add_header_by_name (GstRTSPMessage * msg, + const gchar * header, + const gchar * value); + +GstRTSPResult gst_rtsp_message_take_header_by_name (GstRTSPMessage * msg, + const gchar * header, + gchar * value); + +GstRTSPResult gst_rtsp_message_remove_header_by_name (GstRTSPMessage * msg, + const gchar * header, + gint index); + +GstRTSPResult gst_rtsp_message_get_header_by_name (GstRTSPMessage * msg, + const gchar * header, + gchar ** value, + gint index); + +/* header serialization */ GstRTSPResult gst_rtsp_message_append_headers (const GstRTSPMessage *msg, GString *str); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsprange.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsprange.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsprange.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsprange.c 2015-10-22 08:01:34.000000000 +0000 @@ -342,7 +342,7 @@ time_to_string (const GstRTSPTime * t1, const GstRTSPTime2 * t2, GString * string) { - gboolean res = TRUE;; + gboolean res = TRUE; switch (t1->type) { case GST_RTSP_TIME_SECONDS: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsptransport.c gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsptransport.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsptransport.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsptransport.c 2015-10-22 08:01:34.000000000 +0000 @@ -52,6 +52,7 @@ #include #include "gstrtsptransport.h" +#include "gstrtsp-enumtypes.h" #define MAX_MANAGERS 2 @@ -118,26 +119,6 @@ {NULL, GST_RTSP_PROFILE_UNKNOWN} }; -GType -gst_rtsp_profile_get_type (void) -{ - static volatile gsize rtsp_profile_type = 0; - static const GFlagsValue rtsp_profile[] = { - {GST_RTSP_PROFILE_AVP, "GST_RTSP_PROFILE_AVP", "avp"}, - {GST_RTSP_PROFILE_SAVP, "GST_RTSP_PROFILE_SAVP", "savp"}, - {GST_RTSP_PROFILE_AVPF, "GST_RTSP_PROFILE_AVPF", "avpf"}, - {GST_RTSP_PROFILE_SAVPF, "GST_RTSP_PROFILE_SAVPF", "savpf"}, - {0, NULL, NULL}, - }; - - if (g_once_init_enter (&rtsp_profile_type)) { - GType tmp = g_flags_register_static ("GstRTSPProfile", rtsp_profile); - g_once_init_leave (&rtsp_profile_type, tmp); - } - - return (GType) rtsp_profile_type; -} - typedef struct { const gchar *name; @@ -151,28 +132,6 @@ {NULL, GST_RTSP_LOWER_TRANS_UNKNOWN} }; -GType -gst_rtsp_lower_trans_get_type (void) -{ - static volatile gsize rtsp_lower_trans_type = 0; - static const GFlagsValue rtsp_lower_trans[] = { - {GST_RTSP_LOWER_TRANS_UDP, "GST_RTSP_LOWER_TRANS_UDP", "udp-unicast"}, - {GST_RTSP_LOWER_TRANS_UDP_MCAST, "GST_RTSP_LOWER_TRANS_UDP_MCAST", - "udp-multicast"}, - {GST_RTSP_LOWER_TRANS_TCP, "GST_RTSP_LOWER_TRANS_TCP", "tcp"}, - {GST_RTSP_LOWER_TRANS_HTTP, "GST_RTSP_LOWER_TRANS_HTTP", "http"}, - {GST_RTSP_LOWER_TRANS_TLS, "GST_RTSP_LOWER_TRANS_TLS", "tls"}, - {0, NULL, NULL}, - }; - - if (g_once_init_enter (&rtsp_lower_trans_type)) { - GType tmp = g_flags_register_static ("GstRTSPLowerTrans", rtsp_lower_trans); - g_once_init_leave (&rtsp_lower_trans_type, tmp); - } - - return (GType) rtsp_lower_trans_type; -} - #define RTSP_TRANSPORT_PARAMETER_IS_UNIQUE(param) \ G_STMT_START { \ if ((transport_params & (param)) != 0) \ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsptransport.h gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsptransport.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/gstrtsptransport.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/gstrtsptransport.h 2015-10-22 08:01:34.000000000 +0000 @@ -45,6 +45,7 @@ #include #include +#include G_BEGIN_DECLS @@ -72,6 +73,8 @@ * * The transfer profile to use. */ +/* FIXME 2.0: This should probably be an enum, not flags and maybe be replaced + * by GstRTPTransport */ typedef enum { GST_RTSP_PROFILE_UNKNOWN = 0, GST_RTSP_PROFILE_AVP = (1 << 0), @@ -80,9 +83,6 @@ GST_RTSP_PROFILE_SAVPF = (1 << 3), } GstRTSPProfile; -#define GST_TYPE_RTSP_PROFILE (gst_rtsp_profile_get_type()) -GType gst_rtsp_profile_get_type (void); - /** * GstRTSPLowerTrans: * @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag @@ -103,9 +103,6 @@ GST_RTSP_LOWER_TRANS_TLS = (1 << 5) } GstRTSPLowerTrans; -#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type()) -GType gst_rtsp_lower_trans_get_type (void); - typedef struct _GstRTSPRange GstRTSPRange; typedef struct _GstRTSPTransport GstRTSPTransport; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -16,8 +16,8 @@ lib_LTLIBRARIES = libgstrtsp-@GST_API_VERSION@.la -built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c -built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h +built_sources = gstrtsp-enumtypes.c +built_headers = gstrtsp-enumtypes.h libgstrtsp_@GST_API_VERSION@_la_SOURCES = gstrtsptransport.c \ gstrtspurl.c \ @@ -38,12 +38,11 @@ libgstrtsp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) $(WIN32_LIBS) BUILT_SOURCES = $(built_headers) $(built_sources) -EXTRA_DIST = gstrtsp-marshal.list CLEANFILES = $(BUILT_SOURCES) glib_gen_prefix = __gst_rtsp glib_enum_define = gst_rtsp -glib_enum_headers = gstrtspdefs.h +glib_enum_headers = $(libgstrtspinclude_HEADERS) glib_gen_basename = gstrtsp include $(top_srcdir)/common/gst-glib-gen.mak @@ -57,7 +56,7 @@ gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES)) GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstRtsp \ --nsversion=@GST_API_VERSION@ \ @@ -77,7 +76,7 @@ --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);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -102,19 +101,3 @@ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstrtsp_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstrtsp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstrtsp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtsp \ - -:HEADERS $(libgstrtspinclude_HEADERS) \ - $(nodist_libgstrtspinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/rtsp/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/rtsp/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -25,7 +25,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -89,9 +99,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(libgstrtspinclude_HEADERS) @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/rtsp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -114,7 +121,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -131,6 +137,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libgstrtspinclude_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -177,8 +185,7 @@ libgstrtsp_@GST_API_VERSION@_la-gstrtspdefs.lo \ libgstrtsp_@GST_API_VERSION@_la-gstrtspextension.lo \ libgstrtsp_@GST_API_VERSION@_la-gstrtsprange.lo -am__objects_1 = libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo \ - libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo +am__objects_1 = libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo nodist_libgstrtsp_@GST_API_VERSION@_la_OBJECTS = $(am__objects_1) libgstrtsp_@GST_API_VERSION@_la_OBJECTS = \ $(am_libgstrtsp_@GST_API_VERSION@_la_OBJECTS) \ @@ -255,6 +262,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -315,6 +324,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -344,6 +355,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -371,7 +384,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -386,6 +398,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -475,13 +488,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -534,6 +546,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -562,8 +575,8 @@ #gstrtspextreal.h #gstrtspextwms.h lib_LTLIBRARIES = libgstrtsp-@GST_API_VERSION@.la -built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c -built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h +built_sources = gstrtsp-enumtypes.c +built_headers = gstrtsp-enumtypes.h libgstrtsp_@GST_API_VERSION@_la_SOURCES = gstrtsptransport.c \ gstrtspurl.c \ gstrtspmessage.c \ @@ -581,11 +594,10 @@ libgstrtsp_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(GIO_LIBS) $(LIBM) libgstrtsp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) $(WIN32_LIBS) BUILT_SOURCES = $(built_headers) $(built_sources) -EXTRA_DIST = gstrtsp-marshal.list CLEANFILES = $(BUILT_SOURCES) $(am__append_1) glib_gen_prefix = __gst_rtsp glib_enum_define = gst_rtsp -glib_enum_headers = gstrtspdefs.h +glib_enum_headers = $(libgstrtspinclude_HEADERS) glib_gen_basename = gstrtsp enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtsp-@GST_API_VERSION@.gir @@ -621,7 +633,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -630,7 +641,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -686,7 +697,6 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspconnection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspdefs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspextension.Plo@am__quote@ @@ -768,13 +778,6 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsprange.lo `test -f 'gstrtsprange.c' || echo '$(srcdir)/'`gstrtsprange.c -libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo: gstrtsp-marshal.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Tpo -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Tpo $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstrtsp-marshal.c' object='libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c - libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo: gstrtsp-enumtypes.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Tpo -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo `test -f 'gstrtsp-enumtypes.c' || echo '$(srcdir)/'`gstrtsp-enumtypes.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Tpo $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Plo @@ -1092,6 +1095,8 @@ uninstall-nodist_libgstrtspincludeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + # these are all the rules generating the relevant files $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list @@ -1130,7 +1135,7 @@ @touch $@ @HAVE_INTROSPECTION_TRUE@GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstRtsp \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1150,7 +1155,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-sdp-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-rtsp-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1164,22 +1169,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstrtsp_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstrtsp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstrtsp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtsp \ - -:HEADERS $(libgstrtspinclude_HEADERS) \ - $(nodist_libgstrtspinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/gstmikey.h gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/gstmikey.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/gstmikey.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/gstmikey.h 2015-10-22 08:01:34.000000000 +0000 @@ -150,14 +150,14 @@ * GstMIKEYPayload: * @type: the payload type * @len: length of the payload - * @clear_func: function to clear the payload - * @copy_func: function to copy the payload * * Hold the common fields for all payloads */ struct _GstMIKEYPayload { + /* < private > */ GstMiniObject mini_object; + /* < public > */ GstMIKEYPayloadType type; guint len; }; @@ -213,7 +213,7 @@ * Since: 1.4 */ #ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload * buf); +G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload * payload); #endif static inline GstMIKEYPayload * @@ -255,7 +255,7 @@ * @pt: the common #GstMIKEYPayload * @enc_alg: the #GstMIKEYEncAlg * @mac_alg: the #GstMIKEYMacAlg - * @subpayload: the subpayloads + * @subpayloads: the subpayloads * * A structure holding the KEMAC payload */ @@ -537,8 +537,10 @@ */ struct _GstMIKEYMessage { + /* < private > */ GstMiniObject mini_object; + /* < public > */ guint8 version; GstMIKEYType type; gboolean V; @@ -606,7 +608,7 @@ * Since: 1.4 */ #ifdef _FOOL_GTK_DOC_ -G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_copy (const GstMIKEYMessage * buf); +G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_copy (const GstMIKEYMessage * message); #endif static inline GstMIKEYMessage * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/gstsdpmessage.c gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/gstsdpmessage.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/gstsdpmessage.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/gstsdpmessage.c 2015-10-22 08:01:34.000000000 +0000 @@ -2962,21 +2962,33 @@ c.msg = msg; c.media = NULL; +#define SIZE_CHECK_GUARD \ + G_STMT_START { \ + if (p - (gchar *) data >= size) \ + goto out; \ + } G_STMT_END + p = (gchar *) data; while (TRUE) { - while (g_ascii_isspace (*p)) + while (p - (gchar *) data < size && g_ascii_isspace (*p)) p++; + SIZE_CHECK_GUARD; + type = *p++; if (type == '\0') break; + SIZE_CHECK_GUARD; + if (*p != '=') goto line_done; p++; + SIZE_CHECK_GUARD; + s = p; - while (*p != '\n' && *p != '\r' && *p != '\0') + while (p - (gchar *) data < size && *p != '\n' && *p != '\r' && *p != '\0') p++; len = p - s; @@ -2989,13 +3001,21 @@ gst_sdp_parse_line (&c, type, buffer); + SIZE_CHECK_GUARD; + line_done: - while (*p != '\n' && *p != '\0') + while (p - (gchar *) data < size && *p != '\n' && *p != '\0') p++; + + SIZE_CHECK_GUARD; + if (*p == '\n') p++; } +#undef SIZE_CHECK_GUARD + +out: if (buffer) g_free (buffer); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -20,7 +20,7 @@ gir_sources=$(patsubst %,$(srcdir)/%, $(libgstsdp_@GST_API_VERSION@_la_SOURCES)) GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstSdp \ --nsversion=@GST_API_VERSION@ \ @@ -57,17 +57,3 @@ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstsdp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstsdp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstsdp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/sdp \ - -:HEADERS $(libgstsdpinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/sdp/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/sdp/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,8 +92,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs/gst/sdp -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(libgstsdpinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -104,7 +112,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -121,6 +128,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libgstsdpinclude_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -233,6 +242,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -293,6 +303,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -322,6 +334,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -349,7 +363,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -364,6 +377,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -453,13 +467,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -512,6 +525,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -562,7 +576,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -947,9 +960,11 @@ uninstall-girDATA uninstall-libLTLIBRARIES \ uninstall-libgstsdpincludeHEADERS uninstall-typelibsDATA +.PRECIOUS: Makefile + @HAVE_INTROSPECTION_TRUE@GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstSdp \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -975,20 +990,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstsdp_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstsdp_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstsdp_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/sdp \ - -:HEADERS $(libgstsdpinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gstexiftag.c gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gstexiftag.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gstexiftag.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gstexiftag.c 2015-10-22 08:01:34.000000000 +0000 @@ -801,6 +801,20 @@ } } +static inline gboolean +gst_exif_tag_str_is_ascii (const gchar * str, gsize * length) +{ + gsize len = 0; + + while (*str) { + if (*str++ & 0x80) + return FALSE; + ++len; + } + *length = len; + return TRUE; +} + static void write_exif_ascii_tag (GstExifWriter * writer, guint16 tag, const gchar * str) { @@ -809,7 +823,11 @@ gsize ascii_size; GError *error = NULL; - ascii_str = g_convert (str, -1, "latin1", "utf8", NULL, &ascii_size, &error); + if (gst_exif_tag_str_is_ascii (str, &ascii_size)) + ascii_str = g_strndup (str, ascii_size); + else + ascii_str = + g_convert (str, -1, "latin1", "utf8", NULL, &ascii_size, &error); if (error) { GST_WARNING ("Failed to convert exif tag to ascii: 0x%x - %s. Error: %s", diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gsttagdemux.c gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gsttagdemux.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gsttagdemux.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gsttagdemux.c 2015-10-22 08:01:34.000000000 +0000 @@ -455,7 +455,7 @@ need_sub = TRUE; } - if (need_sub == TRUE) { + if (need_sub) { if (out_size != bsize || !gst_buffer_is_writable (buf)) { GstBuffer *sub; @@ -1614,6 +1614,20 @@ return res; } +static inline GstFlowReturn +gst_tag_demux_ensure_tags (GstTagDemux * demux) +{ + GstFlowReturn flow = GST_FLOW_OK; + + if (G_UNLIKELY (demux->priv->state == GST_TAG_DEMUX_READ_START_TAG && + GST_PAD_MODE (demux->priv->srcpad) == GST_PAD_MODE_PULL)) { + + flow = gst_tag_demux_element_find (demux); + GST_INFO_OBJECT (demux, "pulled tags: %s", gst_flow_get_name (flow)); + } + return flow; +} + static GstFlowReturn gst_tag_demux_read_range (GstTagDemux * demux, GstObject * parent, guint64 offset, guint length, GstBuffer ** buffer) @@ -1625,6 +1639,12 @@ g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR); + /* Ensure we already have computed our tags to properly use the offsets + * below */ + ret = gst_tag_demux_ensure_tags (demux); + if (ret != GST_FLOW_OK) + return ret; + /* Adjust offset and length of the request to trim off tag information. * For the returned buffer, adjust the output offset to match what downstream * should see */ @@ -1741,13 +1761,7 @@ * filesrc ! id3demux ! xyzparse ! .., read tags here, since we don't * have a streaming thread of our own to do that. We do it here and * not in get_range(), so we can return the right size in bytes.. */ - if (demux->priv->state == GST_TAG_DEMUX_READ_START_TAG && - GST_PAD_MODE (demux->priv->srcpad) == GST_PAD_MODE_PULL) { - GstFlowReturn flow G_GNUC_UNUSED; - - flow = gst_tag_demux_element_find (demux); - GST_INFO_OBJECT (demux, "pulled tags: %s", gst_flow_get_name (flow)); - } + gst_tag_demux_ensure_tags (demux); result -= demux->priv->strip_start + demux->priv->strip_end; if (result < 0) result = 0; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gsttagmux.c gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gsttagmux.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gsttagmux.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gsttagmux.c 2015-10-22 08:01:34.000000000 +0000 @@ -222,6 +222,9 @@ mux->priv->final_tags = gst_tag_list_merge (tagsetter_tags, mux->priv->event_tags, merge_mode); + if (mux->priv->final_tags == NULL) + mux->priv->final_tags = gst_tag_list_new_empty (); + GST_LOG_OBJECT (mux, "final tags: %" GST_PTR_FORMAT, mux->priv->final_tags); return mux->priv->final_tags; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gstxmptag.c gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gstxmptag.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/gstxmptag.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/gstxmptag.c 2015-10-22 08:01:34.000000000 +0000 @@ -1237,7 +1237,6 @@ if (len < max_ft_len) goto missing_footer; - GST_DEBUG ("checking footer: [%s]", &xps[len - max_ft_len]); xp2 = g_strstr_len (&xps[len - max_ft_len], max_ft_len, " 0) { + peak = peak << (64 - GST_ROUND_UP_8 (peak_bits)); + peak_val = + gst_guint64_to_gdouble (peak) / + gst_util_guint64_to_gdouble (G_MAXINT64); + GST_LOG ("RVA2 frame: id=%s, chan=%u, adj=%.2fdB, peak_bits=%u, peak=%.2f", + id, chan, gain_dB, (guint) peak_bits, peak_val); + } else { + peak_val = 0; + } if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "track") == 0) { gain_tag_name = GST_TAG_TRACK_GAIN; @@ -943,21 +948,17 @@ return result; } -static const gchar utf16enc[] = "UTF-16"; -static const gchar utf16leenc[] = "UTF-16LE"; -static const gchar utf16beenc[] = "UTF-16BE"; - static gboolean -find_utf16_bom (gchar * data, const gchar ** p_in_encoding) +find_utf16_bom (gchar * data, gint * p_data_endianness) { guint16 marker = (GST_READ_UINT8 (data) << 8) | GST_READ_UINT8 (data + 1); switch (marker) { case 0xFFFE: - *p_in_encoding = utf16leenc; + *p_data_endianness = G_LITTLE_ENDIAN; return TRUE; case 0xFEFF: - *p_in_encoding = utf16beenc; + *p_data_endianness = G_BIG_ENDIAN; return TRUE; default: break; @@ -1042,32 +1043,69 @@ case ID3V2_ENCODING_UTF16: case ID3V2_ENCODING_UTF16BE: { - const gchar *in_encode; + gunichar2 *utf16; + gint data_endianness; + glong n_read = 0, size = 0; + guint len, i; if (encoding == ID3V2_ENCODING_UTF16) - in_encode = utf16enc; + data_endianness = G_BYTE_ORDER; else - in_encode = utf16beenc; + data_endianness = G_BIG_ENDIAN; /* Sometimes we see strings with multiple BOM markers at the start. * In that case, we assume the innermost one is correct. If that fails * to produce valid UTF-8, we try the other endianness anyway */ - while (data_size > 2 && find_utf16_bom (data, &in_encode)) { + while (data_size > 2 && find_utf16_bom (data, &data_endianness)) { data += 2; /* skip BOM */ data_size -= 2; } - field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL); + /* alloc needed to ensure correct alignment which is required by GLib */ + len = data_size / 2; + utf16 = g_try_new (gunichar2, len + 1); + if (utf16 == NULL) + break; + + memcpy (utf16, data, 2 * len); - 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); + GST_LOG ("Trying interpreting data as UTF-16-%s first", + (data_endianness == G_LITTLE_ENDIAN) ? "LE" : "BE"); + + if (data_endianness != G_BYTE_ORDER) { + /* convert to native endian UTF-16 */ + for (i = 0; i < len; ++i) + utf16[i] = GUINT16_SWAP_LE_BE (utf16[i]); } - } + /* convert to UTF-8 */ + field = g_utf16_to_utf8 (utf16, len, &n_read, &size, NULL); + if (field != NULL && n_read > 0 && g_utf8_validate (field, -1, NULL)) { + g_free (utf16); + break; + } + + GST_DEBUG ("Trying interpreting data as UTF-16-%s now as fallback", + (data_endianness == G_LITTLE_ENDIAN) ? "BE" : "LE"); + + for (i = 0; i < len; ++i) + utf16[i] = GUINT16_SWAP_LE_BE (utf16[i]); + + g_free (field); + n_read = size = 0; + + /* try again */ + field = g_utf16_to_utf8 (utf16, len, &n_read, &size, NULL); + g_free (utf16); + + if (field != NULL && n_read > 0 && g_utf8_validate (field, -1, NULL)) + break; + + GST_DEBUG ("Could not convert UTF-16 string to UTF-8"); + g_free (field); + field = NULL; break; + } case ID3V2_ENCODING_ISO8859: if (g_utf8_validate (data, data_size, NULL)) field = g_strndup (data, data_size); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -30,7 +30,7 @@ gir_sources=$(patsubst %,$(srcdir)/%, $(libgsttag_@GST_API_VERSION@_la_SOURCES)) GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstTag \ --nsversion=@GST_API_VERSION@ \ @@ -48,7 +48,7 @@ --pkg gstreamer-@GST_API_VERSION@ \ --pkg gstreamer-base-@GST_API_VERSION@ \ --pkg-export gstreamer-tag-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -105,17 +105,3 @@ licensetransdir = $(pkgdatadir)/@GST_API_VERSION@ licensetrans_DATA = $(srcdir)/license-translations.dict #endif - -Android.mk: Makefile.am - androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttag_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttag_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgsttag_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgsttag_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgsttaginclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/tag/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/tag/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,9 +93,6 @@ target_triplet = @target@ EXTRA_PROGRAMS = mklangtables$(EXEEXT) mklicensestables$(EXEEXT) subdir = gst-libs/gst/tag -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(libgsttaginclude_HEADERS) \ - $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -106,7 +113,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +129,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(libgsttaginclude_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -264,6 +272,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -324,6 +333,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -353,6 +364,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -380,7 +393,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -395,6 +407,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -484,13 +497,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -543,6 +555,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -623,7 +636,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -1157,9 +1169,11 @@ uninstall-libLTLIBRARIES uninstall-libgsttagincludeHEADERS \ uninstall-licensetransDATA uninstall-typelibsDATA +.PRECIOUS: Makefile + @HAVE_INTROSPECTION_TRUE@GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstTag \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1177,7 +1191,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-base-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-tag-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1202,20 +1216,6 @@ echo "Updated licenses-tables.dat and license-translations.dict" #endif -Android.mk: Makefile.am - androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgsttag_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttag_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgsttag_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgsttag_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgsttaginclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/colorbalance.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/colorbalance.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/colorbalance.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/colorbalance.h 2015-10-22 08:01:34.000000000 +0000 @@ -60,7 +60,7 @@ /** * GstColorBalanceInterface: * @iface: the parent interface - * @balance_type: implementation type + * @get_balance_type: implementation type * @list_channels: list handled channels * @set_value: set a channel value * @get_value: get a channel value diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideodecoder.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideodecoder.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideodecoder.c 2014-09-23 16:44:37.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideodecoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -25,12 +25,13 @@ /** * SECTION:gstvideodecoder * @short_description: Base class for video decoders - * @see_also: + * @see_also: * * This base class is for video decoders turning encoded data into raw video * frames. * - * The GstVideoDecoder base class and derived subclasses should cooperate as follows: + * The GstVideoDecoder base class and derived subclasses should cooperate as + * follows: * * * Configuration @@ -46,7 +47,8 @@ * parameters require reconfiguration. * * - * Incoming data buffers are processed as needed, described in Data Processing below. + * Incoming data buffers are processed as needed, described in Data + * Processing below. * * * GstVideoDecoder calls @stop at end of all processing. @@ -62,15 +64,17 @@ * corresponding to and referred to as 'frames'. * * - * Each input frame is provided in turn to the subclass' @handle_frame callback. + * Each input frame is provided in turn to the subclass' @handle_frame + * callback. * The ownership of the frame is given to the @handle_frame callback. * * * If codec processing results in decoded data, the subclass should call * @gst_video_decoder_finish_frame to have decoded data pushed. - * downstream. Otherwise, the subclass must call @gst_video_decoder_drop_frame, to - * allow the base class to do timestamp and offset tracking, and possibly to - * requeue the frame for a later attempt in the case of reverse playback. + * downstream. Otherwise, the subclass must call + * @gst_video_decoder_drop_frame, to allow the base class to do timestamp + * and offset tracking, and possibly to requeue the frame for a later + * attempt in the case of reverse playback. * * * @@ -87,20 +91,21 @@ * * Seeking/Flushing * - * When the pipeline is seeked or otherwise flushed, the subclass is informed via a call - * to its @reset callback, with the hard parameter set to true. This indicates the - * subclass should drop any internal data queues and timestamps and prepare for a fresh - * set of buffers to arrive for parsing and decoding. + * When the pipeline is seeked or otherwise flushed, the subclass is + * informed via a call to its @reset callback, with the hard parameter + * set to true. This indicates the subclass should drop any internal data + * queues and timestamps and prepare for a fresh set of buffers to arrive + * for parsing and decoding. * * * * * End Of Stream * - * At end-of-stream, the subclass @parse function may be called some final times with the - * at_eos parameter set to true, indicating that the element should not expect any more data - * to be arriving, and it should parse and remaining frames and call - * gst_video_decoder_have_frame() if possible. + * At end-of-stream, the subclass @parse function may be called some final + * times with the at_eos parameter set to true, indicating that the element + * should not expect any more data to be arriving, and it should parse and + * remaining frames and call gst_video_decoder_have_frame() if possible. * * * @@ -125,26 +130,30 @@ * should rather be left to upstream demuxer, parser or alike. This simple * approach caters for seeking and duration reporting using estimated input * bitrates. To enable it, a subclass should call - * @gst_video_decoder_set_estimate_rate to enable handling of incoming byte-streams. + * @gst_video_decoder_set_estimate_rate to enable handling of incoming + * byte-streams. * * The base class provides some support for reverse playback, in particular * in case incoming data is not packetized or upstream does not provide - * fragments on keyframe boundaries. However, the subclass should then be prepared - * for the parsing and frame processing stage to occur separately (in normal - * forward processing, the latter immediately follows the former), - * The subclass also needs to ensure the parsing stage properly marks keyframes, - * unless it knows the upstream elements will do so properly for incoming data. + * fragments on keyframe boundaries. However, the subclass should then be + * prepared for the parsing and frame processing stage to occur separately + * (in normal forward processing, the latter immediately follows the former), + * The subclass also needs to ensure the parsing stage properly marks + * keyframes, unless it knows the upstream elements will do so properly for + * incoming data. * * The bare minimum that a functional subclass needs to implement is: * * Provide pad templates * - * Inform the base class of output caps via @gst_video_decoder_set_output_state + * Inform the base class of output caps via + * @gst_video_decoder_set_output_state * * * Parse input data, if it is not considered packetized from upstream - * Data will be provided to @parse which should invoke @gst_video_decoder_add_to_frame and - * @gst_video_decoder_have_frame to separate the data belonging to each video frame. + * Data will be provided to @parse which should invoke + * @gst_video_decoder_add_to_frame and @gst_video_decoder_have_frame to + * separate the data belonging to each video frame. * * * Accept data in @handle_frame and provide decoded results to @@ -177,16 +186,17 @@ * on whether forward or reverse playback is requested. * * Forward playback: - * * Incoming buffer -> @parse() -> add_to_frame()/have_frame() -> handle_frame() -> - * push downstream + * * Incoming buffer -> @parse() -> add_to_frame()/have_frame() -> + * handle_frame() -> push downstream * - * Reverse playback is more complicated, since it involves gathering incoming data regions - * as we loop backwards through the upstream data. The processing concept (using incoming - * buffers as containing one frame each to simplify things) is: + * Reverse playback is more complicated, since it involves gathering incoming + * data regions as we loop backwards through the upstream data. The processing + * concept (using incoming buffers as containing one frame each to simplify + * things) is: * * Upstream data we want to play: * Buffer encoded order: 1 2 3 4 5 6 7 8 9 EOS - * Keyframe flag: K K + * Keyframe flag: K K * Groupings: AAAAAAA BBBBBBB CCCCCCC * * Input: @@ -210,19 +220,20 @@ * this: * * while (gather) - * take head of queue and prepend to parse queue (this reverses the sequence, - * so parse queue is 7 -> 8 -> 9) + * take head of queue and prepend to parse queue (this reverses the + * sequence, so parse queue is 7 -> 8 -> 9) * - * Next, we process the parse queue, which now contains all un-parsed packets (including - * any leftover ones from the previous decode section) + * Next, we process the parse queue, which now contains all un-parsed packets + * (including any leftover ones from the previous decode section) * * for each buffer now in the parse queue: * Call the subclass parse function, prepending each resulting frame to * the parse_gather queue. Buffers which precede the first one that - * produces a parsed frame are retained in the parse queue for re-processing on - * the next cycle of parsing. + * produces a parsed frame are retained in the parse queue for + * re-processing on the next cycle of parsing. * - * The parse_gather queue now contains frame objects ready for decoding, in reverse order. + * The parse_gather queue now contains frame objects ready for decoding, + * in reverse order. * parse_gather: 9 -> 8 -> 7 * * while (parse_gather) @@ -233,8 +244,8 @@ * Processing the decode queue results in frames with attached output buffers * stored in the 'output_queue' ready for outputting in reverse order. * - * After we flushed the gather queue and parsed it, we add 4 to the (now empty) gather queue. - * We get the following situation: + * After we flushed the gather queue and parsed it, we add 4 to the (now empty) + * gather queue. We get the following situation: * * gather queue: 4 * decode queue: 7 8 9 @@ -262,7 +273,7 @@ * output queue: * * gather queue: 4 - * decode queue: + * decode queue: * output queue: 9 8 7 6 5 * * Now output all the frames in the output queue, picking a frame from the @@ -287,7 +298,7 @@ * Decoded output: * * gather queue: 1 - * decode queue: + * decode queue: * output queue: 4 3 2 * * Leftover buffer 1 cannot be decoded and must be discarded. @@ -295,6 +306,7 @@ #include "gstvideodecoder.h" #include "gstvideoutils.h" +#include "gstvideoutilsprivate.h" #include #include @@ -337,7 +349,8 @@ gboolean had_input_data; gboolean needs_format; - gboolean do_caps; + /* input_segment are output_segment identical */ + gboolean in_out_segment_sync; /* ... being tracked here; * only available during parsing */ @@ -406,8 +419,17 @@ gint64 min_latency; gint64 max_latency; + /* upstream stream tags (global tags are passed through as-is) */ + GstTagList *upstream_tags; + + /* subclass tags */ GstTagList *tags; + GstTagMergeMode tags_merge_mode; + gboolean tags_changed; + + /* flags */ + gboolean use_default_pad_acceptcaps; }; static GstElementClass *parent_class = NULL; @@ -437,6 +459,8 @@ static GstFlowReturn gst_video_decoder_decode_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame); +static void gst_video_decoder_push_event_list (GstVideoDecoder * decoder, + GList * events); static GstClockTime gst_video_decoder_get_frame_duration (GstVideoDecoder * decoder, GstVideoCodecFrame * frame); static GstVideoCodecFrame *gst_video_decoder_new_frame (GstVideoDecoder * @@ -466,6 +490,9 @@ static gboolean gst_video_decoder_src_query_default (GstVideoDecoder * decoder, GstQuery * query); +static gboolean gst_video_decoder_transform_meta_default (GstVideoDecoder * + decoder, GstVideoCodecFrame * frame, GstMeta * meta); + /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init * method to get to the padtemplates */ GType @@ -521,6 +548,7 @@ klass->negotiate = gst_video_decoder_negotiate_default; klass->sink_query = gst_video_decoder_sink_query_default; klass->src_query = gst_video_decoder_src_query_default; + klass->transform_meta = gst_video_decoder_transform_meta_default; } static void @@ -556,7 +584,6 @@ GST_DEBUG_FUNCPTR (gst_video_decoder_src_event)); gst_pad_set_query_function (pad, GST_DEBUG_FUNCPTR (gst_video_decoder_src_query)); - gst_pad_use_fixed_caps (pad); gst_element_add_pad (GST_ELEMENT (decoder), decoder->srcpad); gst_segment_init (&decoder->input_segment, GST_FORMAT_TIME); @@ -569,6 +596,9 @@ decoder->priv->packetized = TRUE; decoder->priv->needs_format = FALSE; + decoder->priv->min_latency = 0; + decoder->priv->max_latency = 0; + gst_video_decoder_reset (decoder, TRUE, TRUE); } @@ -750,6 +780,12 @@ tgt->par_d = ref->par_d; tgt->fps_n = ref->fps_n; tgt->fps_d = ref->fps_d; + tgt->views = ref->views; + if (GST_VIDEO_INFO_MULTIVIEW_MODE (ref) != GST_VIDEO_MULTIVIEW_MODE_NONE) { + GST_VIDEO_INFO_MULTIVIEW_MODE (tgt) = GST_VIDEO_INFO_MULTIVIEW_MODE (ref); + GST_VIDEO_INFO_MULTIVIEW_FLAGS (tgt) = + GST_VIDEO_INFO_MULTIVIEW_FLAGS (ref); + } } GST_DEBUG ("reference par %d/%d fps %d/%d", @@ -885,6 +921,32 @@ return ret; } +static GstEvent * +gst_video_decoder_create_merged_tags_event (GstVideoDecoder * dec) +{ + GstTagList *merged_tags; + + GST_LOG_OBJECT (dec, "upstream : %" GST_PTR_FORMAT, dec->priv->upstream_tags); + GST_LOG_OBJECT (dec, "decoder : %" GST_PTR_FORMAT, dec->priv->tags); + GST_LOG_OBJECT (dec, "mode : %d", dec->priv->tags_merge_mode); + + merged_tags = + gst_tag_list_merge (dec->priv->upstream_tags, dec->priv->tags, + dec->priv->tags_merge_mode); + + GST_DEBUG_OBJECT (dec, "merged : %" GST_PTR_FORMAT, merged_tags); + + if (merged_tags == NULL) + return NULL; + + if (gst_tag_list_is_empty (merged_tags)) { + gst_tag_list_unref (merged_tags); + return NULL; + } + + return gst_event_new_tag (merged_tags); +} + static gboolean gst_video_decoder_push_event (GstVideoDecoder * decoder, GstEvent * event) { @@ -904,6 +966,8 @@ GST_VIDEO_DECODER_STREAM_LOCK (decoder); decoder->output_segment = segment; + decoder->priv->in_out_segment_sync = + gst_segment_is_equal (&decoder->input_segment, &segment); decoder->priv->last_timestamp_out = GST_CLOCK_TIME_NONE; GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); break; @@ -986,6 +1050,12 @@ if (at_eos) { if (decoder_class->finish) ret = decoder_class->finish (dec); + } else { + if (decoder_class->drain) { + ret = decoder_class->drain (dec); + } else { + GST_FIXME_OBJECT (dec, "Sub-class should implement drain()"); + } } } else { /* Reverse playback mode */ @@ -1015,6 +1085,99 @@ return NULL; } +/* Must be called holding the GST_VIDEO_DECODER_STREAM_LOCK */ +static gboolean +gst_video_decoder_negotiate_default_caps (GstVideoDecoder * decoder) +{ + GstCaps *caps; + GstVideoCodecState *state; + GstVideoInfo info; + gint i; + gint caps_size; + GstStructure *structure; + + caps = gst_pad_get_allowed_caps (decoder->srcpad); + if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps)) + goto caps_error; + + /* before fixating, try to use whatever upstream provided */ + caps = gst_caps_make_writable (caps); + caps_size = gst_caps_get_size (caps); + if (decoder->priv->input_state && decoder->priv->input_state->caps) { + GstCaps *sinkcaps = decoder->priv->input_state->caps; + GstStructure *structure = gst_caps_get_structure (sinkcaps, 0); + gint width, height; + gint par_n, par_d; + gint fps_n, fps_d; + + if (gst_structure_get_int (structure, "width", &width)) { + for (i = 0; i < caps_size; i++) { + gst_structure_set (gst_caps_get_structure (caps, i), "width", + G_TYPE_INT, width, NULL); + } + } + + if (gst_structure_get_int (structure, "height", &height)) { + for (i = 0; i < caps_size; i++) { + gst_structure_set (gst_caps_get_structure (caps, i), "height", + G_TYPE_INT, height, NULL); + } + } + + if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) { + for (i = 0; i < caps_size; i++) { + gst_structure_set (gst_caps_get_structure (caps, i), "framerate", + GST_TYPE_FRACTION, fps_n, fps_d, NULL); + } + } + + if (gst_structure_get_fraction (structure, "pixel-aspect-ratio", &par_n, + &par_d)) { + for (i = 0; i < caps_size; i++) { + gst_structure_set (gst_caps_get_structure (caps, i), + "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); + } + } + } + + for (i = 0; i < caps_size; i++) { + structure = gst_caps_get_structure (caps, i); + /* Random 1280x720@30 for fixation */ + gst_structure_fixate_field_nearest_int (structure, "width", 1280); + gst_structure_fixate_field_nearest_int (structure, "height", 720); + gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1); + if (gst_structure_has_field (structure, "pixel-aspect-ratio")) { + gst_structure_fixate_field_nearest_fraction (structure, + "pixel-aspect-ratio", 1, 1); + } else { + gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION, + 1, 1, NULL); + } + } + caps = gst_caps_fixate (caps); + structure = gst_caps_get_structure (caps, 0); + + if (!caps || !gst_video_info_from_caps (&info, caps)) + goto caps_error; + + GST_INFO_OBJECT (decoder, + "Chose default caps %" GST_PTR_FORMAT " for initial gap", caps); + state = + gst_video_decoder_set_output_state (decoder, info.finfo->format, + info.width, info.height, decoder->priv->input_state); + gst_video_codec_state_unref (state); + gst_caps_unref (caps); + + return TRUE; + +caps_error: + { + if (caps) + gst_caps_unref (caps); + return FALSE; + } +} + static gboolean gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, GstEvent * event) @@ -1035,11 +1198,12 @@ GST_DEBUG_OBJECT (decoder, "received STREAM_START. Clearing taglist"); GST_VIDEO_DECODER_STREAM_LOCK (decoder); - /* Flush our merged taglist after a STREAM_START */ - if (priv->tags) - gst_tag_list_unref (priv->tags); - priv->tags = NULL; - priv->tags_changed = FALSE; + /* Flush upstream tags after a STREAM_START */ + if (priv->upstream_tags) { + gst_tag_list_unref (priv->upstream_tags); + priv->upstream_tags = NULL; + priv->tags_changed = TRUE; + } GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); /* Forward STREAM_START immediately. Everything is drained after @@ -1051,12 +1215,33 @@ } case GST_EVENT_CAPS: { - ret = TRUE; - decoder->priv->do_caps = TRUE; + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + ret = gst_video_decoder_setcaps (decoder, caps); gst_event_unref (event); event = NULL; break; } + case GST_EVENT_SEGMENT_DONE: + { + GstFlowReturn flow_ret = GST_FLOW_OK; + + flow_ret = gst_video_decoder_drain_out (decoder, TRUE); + ret = (flow_ret == GST_FLOW_OK); + + /* Forward SEGMENT_DONE immediately. This is required + * because no buffer or serialized event might come + * after SEGMENT_DONE and nothing could trigger another + * _finish_frame() call. + * + * The subclass can override this behaviour by overriding + * the ::sink_event() vfunc and not chaining up to the + * parent class' ::sink_event() until a later time. + */ + forward_immediate = TRUE; + break; + } case GST_EVENT_EOS: { GstFlowReturn flow_ret = GST_FLOW_OK; @@ -1085,10 +1270,47 @@ case GST_EVENT_GAP: { GstFlowReturn flow_ret = GST_FLOW_OK; + gboolean needs_reconfigure = FALSE; + GList *events; + GList *frame_events; flow_ret = gst_video_decoder_drain_out (decoder, FALSE); ret = (flow_ret == GST_FLOW_OK); + /* Ensure we have caps before forwarding the event */ + GST_VIDEO_DECODER_STREAM_LOCK (decoder); + if (!decoder->priv->output_state) { + if (!gst_video_decoder_negotiate_default_caps (decoder)) { + GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + GST_ELEMENT_ERROR (decoder, STREAM, FORMAT, (NULL), + ("Decoder output not negotiated before GAP event.")); + forward_immediate = TRUE; + break; + } + needs_reconfigure = TRUE; + } + + needs_reconfigure = gst_pad_check_reconfigure (decoder->srcpad) + || needs_reconfigure; + if (decoder->priv->output_state_changed || needs_reconfigure) { + if (!gst_video_decoder_negotiate_unlocked (decoder)) { + GST_WARNING_OBJECT (decoder, "Failed to negotiate with downstream"); + gst_pad_mark_reconfigure (decoder->srcpad); + } + } + + GST_DEBUG_OBJECT (decoder, "Pushing all pending serialized events" + " before the gap"); + events = decoder->priv->pending_events; + frame_events = decoder->priv->current_frame_events; + decoder->priv->pending_events = NULL; + decoder->priv->current_frame_events = NULL; + + GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + + gst_video_decoder_push_event_list (decoder, events); + gst_video_decoder_push_event_list (decoder, frame_events); + /* Forward GAP immediately. Everything is drained after * the GAP event and we can forward this event immediately * now without having buffers out of order. @@ -1158,6 +1380,7 @@ priv->base_picture_number = 0; decoder->input_segment = segment; + decoder->priv->in_out_segment_sync = FALSE; GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); break; @@ -1192,10 +1415,18 @@ gst_event_parse_tag (event, &tags); if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) { - gst_video_decoder_merge_tags (decoder, tags, GST_TAG_MERGE_REPLACE); + GST_VIDEO_DECODER_STREAM_LOCK (decoder); + if (priv->upstream_tags != tags) { + if (priv->upstream_tags) + gst_tag_list_unref (priv->upstream_tags); + priv->upstream_tags = gst_tag_list_ref (tags); + GST_INFO_OBJECT (decoder, "upstream tags: %" GST_PTR_FORMAT, tags); + } gst_event_unref (event); - event = NULL; - ret = TRUE; + event = gst_video_decoder_create_merged_tags_event (decoder); + GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + if (!event) + ret = TRUE; } break; } @@ -1285,7 +1516,7 @@ return FALSE; } - if (end_type != GST_SEEK_TYPE_NONE || + if ((end_type != GST_SEEK_TYPE_SET && end_type != GST_SEEK_TYPE_NONE) || (end_type == GST_SEEK_TYPE_SET && end_time != GST_CLOCK_TIME_NONE)) { GST_DEBUG_OBJECT (dec, "unsupported seek: end time"); return FALSE; @@ -1537,11 +1768,11 @@ GST_OBJECT_LOCK (dec); min_latency += dec->priv->min_latency; - if (dec->priv->max_latency == GST_CLOCK_TIME_NONE) { + if (max_latency == GST_CLOCK_TIME_NONE + || dec->priv->max_latency == GST_CLOCK_TIME_NONE) max_latency = GST_CLOCK_TIME_NONE; - } else if (max_latency != GST_CLOCK_TIME_NONE) { + else max_latency += dec->priv->max_latency; - } GST_OBJECT_UNLOCK (dec); gst_query_set_latency (query, live, min_latency, max_latency); @@ -1577,6 +1808,47 @@ return ret; } +/** + * gst_video_decoder_proxy_getcaps: + * @decoder: a #GstVideoDecoder + * @caps: (allow-none): initial caps + * @filter: (allow-none): filter caps + * + * Returns caps that express @caps (or sink template caps if @caps == NULL) + * restricted to resolution/format/... combinations supported by downstream + * elements. + * + * Returns: (transfer full): a #GstCaps owned by caller + * + * Since: 1.6 + */ +GstCaps * +gst_video_decoder_proxy_getcaps (GstVideoDecoder * decoder, GstCaps * caps, + GstCaps * filter) +{ + return __gst_video_element_proxy_getcaps (GST_ELEMENT_CAST (decoder), + GST_VIDEO_DECODER_SINK_PAD (decoder), + GST_VIDEO_DECODER_SRC_PAD (decoder), caps, filter); +} + +static GstCaps * +gst_video_decoder_sink_getcaps (GstVideoDecoder * decoder, GstCaps * filter) +{ + GstVideoDecoderClass *klass; + GstCaps *caps; + + klass = GST_VIDEO_DECODER_GET_CLASS (decoder); + + if (klass->getcaps) + caps = klass->getcaps (decoder, filter); + else + caps = gst_video_decoder_proxy_getcaps (decoder, NULL, filter); + + GST_LOG_OBJECT (decoder, "Returning caps %" GST_PTR_FORMAT, caps); + + return caps; +} + static gboolean gst_video_decoder_sink_query_default (GstVideoDecoder * decoder, GstQuery * query) @@ -1613,6 +1885,47 @@ res = klass->propose_allocation (decoder, query); break; } + case GST_QUERY_CAPS:{ + GstCaps *filter, *caps; + + gst_query_parse_caps (query, &filter); + caps = gst_video_decoder_sink_getcaps (decoder, filter); + gst_query_set_caps_result (query, caps); + gst_caps_unref (caps); + res = TRUE; + break; + } + case GST_QUERY_ACCEPT_CAPS:{ + if (decoder->priv->use_default_pad_acceptcaps) { + res = + gst_pad_query_default (GST_VIDEO_DECODER_SINK_PAD (decoder), + GST_OBJECT_CAST (decoder), query); + } else { + GstCaps *caps; + GstCaps *allowed_caps; + GstCaps *template_caps; + gboolean accept; + + gst_query_parse_accept_caps (query, &caps); + + template_caps = gst_pad_get_pad_template_caps (pad); + accept = gst_caps_is_subset (caps, template_caps); + gst_caps_unref (template_caps); + + if (accept) { + allowed_caps = + gst_pad_query_caps (GST_VIDEO_DECODER_SINK_PAD (decoder), caps); + + accept = gst_caps_can_intersect (caps, allowed_caps); + + gst_caps_unref (allowed_caps); + } + + gst_query_set_accept_caps_result (query, accept); + res = TRUE; + } + break; + } default: res = gst_pad_query_default (pad, GST_OBJECT (decoder), query); break; @@ -1758,6 +2071,7 @@ gst_segment_init (&decoder->input_segment, GST_FORMAT_UNDEFINED); gst_segment_init (&decoder->output_segment, GST_FORMAT_UNDEFINED); gst_video_decoder_clear_queues (decoder); + decoder->priv->in_out_segment_sync = TRUE; if (priv->current_frame) { gst_video_codec_frame_unref (priv->current_frame); @@ -1793,12 +2107,14 @@ priv->qos_frame_duration = 0; GST_OBJECT_UNLOCK (decoder); - priv->min_latency = 0; - priv->max_latency = 0; - if (priv->tags) gst_tag_list_unref (priv->tags); priv->tags = NULL; + priv->tags_merge_mode = GST_TAG_MERGE_APPEND; + if (priv->upstream_tags) { + gst_tag_list_unref (priv->upstream_tags); + priv->upstream_tags = NULL; + } priv->tags_changed = FALSE; priv->reordered_output = FALSE; @@ -2003,6 +2319,8 @@ gst_event_copy_segment (event, &segment); if (segment.format == GST_FORMAT_TIME) { dec->output_segment = segment; + dec->priv->in_out_segment_sync = + gst_segment_is_equal (&dec->input_segment, &segment); } } dec->priv->pending_events = @@ -2037,51 +2355,62 @@ res = gst_video_decoder_flush_decode (dec); if (res != GST_FLOW_OK) goto done; - } - walk = priv->parse_gather; - } + /* We need to tell the subclass to drain now. + * We prefer the drain vfunc, but for backward-compat + * we use a finish() vfunc if drain isn't implemented */ + if (decoder_class->drain) { + GST_DEBUG_OBJECT (dec, "Draining"); + res = decoder_class->drain (dec); + } else if (decoder_class->finish) { + GST_FIXME_OBJECT (dec, "Sub-class should implement drain(). " + "Calling finish() for backwards-compat"); + res = decoder_class->finish (dec); + } - /* We need to tell the subclass to drain now */ - GST_DEBUG_OBJECT (dec, "Finishing"); - if (decoder_class->finish) - res = decoder_class->finish (dec); + if (res != GST_FLOW_OK) + goto done; - if (res != GST_FLOW_OK) - goto done; + /* now send queued data downstream */ + walk = priv->output_queued; + while (walk) { + GstBuffer *buf = GST_BUFFER_CAST (walk->data); + + if (G_LIKELY (res == GST_FLOW_OK)) { + /* avoid stray DISCONT from forward processing, + * which have no meaning in reverse pushing */ + GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT); + + /* Last chance to calculate a timestamp as we loop backwards + * through the list */ + if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE) + priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf); + else if (priv->last_timestamp_out != GST_CLOCK_TIME_NONE && + GST_BUFFER_DURATION (buf) != GST_CLOCK_TIME_NONE) { + GST_BUFFER_TIMESTAMP (buf) = + priv->last_timestamp_out - GST_BUFFER_DURATION (buf); + priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf); + GST_LOG_OBJECT (dec, + "Calculated TS %" GST_TIME_FORMAT " working backwards", + GST_TIME_ARGS (priv->last_timestamp_out)); + } - /* now send queued data downstream */ - walk = priv->output_queued; - while (walk) { - GstBuffer *buf = GST_BUFFER_CAST (walk->data); + res = gst_video_decoder_clip_and_push_buf (dec, buf); + } else { + gst_buffer_unref (buf); + } - if (G_LIKELY (res == GST_FLOW_OK)) { - /* avoid stray DISCONT from forward processing, - * which have no meaning in reverse pushing */ - GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT); - - /* Last chance to calculate a timestamp as we loop backwards - * through the list */ - if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE) - priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf); - else if (priv->last_timestamp_out != GST_CLOCK_TIME_NONE && - GST_BUFFER_DURATION (buf) != GST_CLOCK_TIME_NONE) { - GST_BUFFER_TIMESTAMP (buf) = - priv->last_timestamp_out - GST_BUFFER_DURATION (buf); - priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf); - GST_LOG_OBJECT (dec, - "Calculated TS %" GST_TIME_FORMAT " working backwards", - GST_TIME_ARGS (priv->last_timestamp_out)); + priv->output_queued = + g_list_delete_link (priv->output_queued, priv->output_queued); + walk = priv->output_queued; } - res = gst_video_decoder_clip_and_push_buf (dec, buf); - } else { - gst_buffer_unref (buf); + /* clear buffer and decoder state again + * before moving to the previous keyframe */ + gst_video_decoder_flush (dec, FALSE); } - priv->output_queued = - g_list_delete_link (priv->output_queued, priv->output_queued); - walk = priv->output_queued; + walk = priv->parse_gather; } done: @@ -2125,18 +2454,6 @@ decoder = GST_VIDEO_DECODER (parent); - if (G_UNLIKELY (decoder->priv->do_caps)) { - GstCaps *caps = gst_pad_get_current_caps (decoder->sinkpad); - if (caps) { - if (!gst_video_decoder_setcaps (decoder, caps)) { - gst_caps_unref (caps); - goto not_negotiated; - } - gst_caps_unref (caps); - } - decoder->priv->do_caps = FALSE; - } - if (G_UNLIKELY (!decoder->priv->input_state && decoder->priv->needs_format)) goto not_negotiated; @@ -2206,12 +2523,13 @@ goto open_failed; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - /* Initialize device/library if needed */ - if (decoder_class->start && !decoder_class->start (decoder)) - goto start_failed; GST_VIDEO_DECODER_STREAM_LOCK (decoder); gst_video_decoder_reset (decoder, TRUE, TRUE); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); + + /* Initialize device/library if needed */ + if (decoder_class->start && !decoder_class->start (decoder)) + goto start_failed; break; default: break; @@ -2223,22 +2541,13 @@ case GST_STATE_CHANGE_PAUSED_TO_READY:{ gboolean stopped = TRUE; + if (decoder_class->stop) + stopped = decoder_class->stop (decoder); + GST_VIDEO_DECODER_STREAM_LOCK (decoder); gst_video_decoder_reset (decoder, TRUE, TRUE); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); - if (decoder_class->stop) { - stopped = decoder_class->stop (decoder); - - /* the subclass might have released frames and events from freed frames - * are stored in the pending_events list */ - GST_VIDEO_DECODER_STREAM_LOCK (decoder); - g_list_free_full (decoder->priv->pending_events, (GDestroyNotify) - gst_event_unref); - decoder->priv->pending_events = NULL; - GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); - } - if (!stopped) goto stop_failed; @@ -2316,6 +2625,19 @@ } static void +gst_video_decoder_push_event_list (GstVideoDecoder * decoder, GList * events) +{ + GList *l; + + /* events are stored in reverse order */ + for (l = g_list_last (events); l; l = g_list_previous (l)) { + GST_LOG_OBJECT (decoder, "pushing %s event", GST_EVENT_TYPE_NAME (l->data)); + gst_video_decoder_push_event (decoder, l->data); + } + g_list_free (events); +} + +static void gst_video_decoder_prepare_finish_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame, gboolean dropping) { @@ -2356,21 +2678,10 @@ decoder->priv->pending_events = g_list_concat (decoder->priv->pending_events, events); } else { - for (l = g_list_last (decoder->priv->pending_events); l; - l = g_list_previous (l)) { - GST_LOG_OBJECT (decoder, "pushing %s event", - GST_EVENT_TYPE_NAME (l->data)); - gst_video_decoder_push_event (decoder, l->data); - } - g_list_free (decoder->priv->pending_events); + gst_video_decoder_push_event_list (decoder, decoder->priv->pending_events); decoder->priv->pending_events = NULL; - for (l = g_list_last (events); l; l = g_list_previous (l)) { - GST_LOG_OBJECT (decoder, "pushing %s event", - GST_EVENT_TYPE_NAME (l->data)); - gst_video_decoder_push_event (decoder, l->data); - } - g_list_free (events); + gst_video_decoder_push_event_list (decoder, events); } /* Check if the data should not be displayed. For example altref/invisible @@ -2615,6 +2926,62 @@ return GST_FLOW_OK; } +static gboolean +gst_video_decoder_transform_meta_default (GstVideoDecoder * + decoder, GstVideoCodecFrame * frame, GstMeta * meta) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_VIDEO_STR)))) + return TRUE; + + return FALSE; +} + +typedef struct +{ + GstVideoDecoder *decoder; + GstVideoCodecFrame *frame; +} CopyMetaData; + +static gboolean +foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) +{ + CopyMetaData *data = user_data; + GstVideoDecoder *decoder = data->decoder; + GstVideoDecoderClass *klass = GST_VIDEO_DECODER_GET_CLASS (decoder); + GstVideoCodecFrame *frame = data->frame; + const GstMetaInfo *info = (*meta)->info; + gboolean do_copy = FALSE; + + if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) { + /* never call the transform_meta with memory specific metadata */ + GST_DEBUG_OBJECT (decoder, "not copying memory specific metadata %s", + g_type_name (info->api)); + do_copy = FALSE; + } else if (klass->transform_meta) { + do_copy = klass->transform_meta (decoder, frame, *meta); + GST_DEBUG_OBJECT (decoder, "transformed metadata %s: copy: %d", + g_type_name (info->api), do_copy); + } + + /* we only copy metadata when the subclass implemented a transform_meta + * function and when it returns %TRUE */ + if (do_copy) { + GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; + GST_DEBUG_OBJECT (decoder, "copy metadata %s", g_type_name (info->api)); + /* simply copy then */ + info->transform_func (frame->output_buffer, *meta, inbuf, + _gst_meta_transform_copy, ©_data); + } + return TRUE; +} + /** * gst_video_decoder_finish_frame: * @decoder: a #GstVideoDecoder @@ -2636,6 +3003,7 @@ GstVideoCodecFrame * frame) { GstFlowReturn ret = GST_FLOW_OK; + GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_GET_CLASS (decoder); GstVideoDecoderPrivate *priv = decoder->priv; GstBuffer *output_buffer; gboolean needs_reconfigure = FALSE; @@ -2660,9 +3028,14 @@ gst_video_decoder_prepare_finish_frame (decoder, frame, FALSE); priv->processed++; - if (priv->tags && priv->tags_changed) { - gst_video_decoder_push_event (decoder, - gst_event_new_tag (gst_tag_list_ref (priv->tags))); + if (priv->tags_changed) { + GstEvent *tags_event; + + tags_event = gst_video_decoder_create_merged_tags_event (decoder); + + if (tags_event != NULL) + gst_video_decoder_push_event (decoder, tags_event); + priv->tags_changed = FALSE; } @@ -2677,9 +3050,8 @@ GST_BUFFER_FLAG_UNSET (output_buffer, GST_BUFFER_FLAG_DELTA_UNIT); - /* set PTS and DTS to both the PTS for decoded frames */ GST_BUFFER_PTS (output_buffer) = frame->pts; - GST_BUFFER_DTS (output_buffer) = frame->pts; + GST_BUFFER_DTS (output_buffer) = GST_CLOCK_TIME_NONE; GST_BUFFER_DURATION (output_buffer) = frame->duration; GST_BUFFER_OFFSET (output_buffer) = GST_BUFFER_OFFSET_NONE; @@ -2690,6 +3062,19 @@ priv->discont = FALSE; } + if (decoder_class->transform_meta) { + if (G_LIKELY (frame->input_buffer)) { + CopyMetaData data; + + data.decoder = decoder; + data.frame = frame; + gst_buffer_foreach_meta (frame->input_buffer, foreach_metadata, &data); + } else { + GST_WARNING_OBJECT (decoder, + "Can't copy metadata because input frame disappeared"); + } + } + /* Get an additional ref to the buffer, which is going to be pushed * downstream, the original ref is owned by the frame * @@ -2718,7 +3103,6 @@ return ret; } - /* With stream lock, takes the frame reference */ static GstFlowReturn gst_video_decoder_clip_and_push_buf (GstVideoDecoder * decoder, GstBuffer * buf) @@ -2741,23 +3125,33 @@ if (GST_CLOCK_TIME_IS_VALID (start) && GST_CLOCK_TIME_IS_VALID (duration)) { stop = start + duration; + } else if (GST_CLOCK_TIME_IS_VALID (start) + && !GST_CLOCK_TIME_IS_VALID (duration)) { + /* 2 second frame duration is rather unlikely... but if we don't clip + * away buffers that far before the segment we can cause the pipeline to + * lockup. This can happen if audio is properly clipped, and thus the + * audio sink does not preroll yet but the video sink prerolls because + * we already outputted a buffer here... and then queues run full. + * + * In the worst case we will clip one buffer too many here now if no + * framerate is given, no buffer duration is given and the actual + * framerate is less than 0.5fps */ + stop = start + 2 * GST_SECOND; } segment = &decoder->output_segment; if (gst_segment_clip (segment, GST_FORMAT_TIME, start, stop, &cstart, &cstop)) { - GST_BUFFER_PTS (buf) = cstart; - if (stop != GST_CLOCK_TIME_NONE) + if (stop != GST_CLOCK_TIME_NONE && GST_CLOCK_TIME_IS_VALID (duration)) GST_BUFFER_DURATION (buf) = cstop - cstart; GST_LOG_OBJECT (decoder, "accepting buffer inside segment: %" GST_TIME_FORMAT " %" GST_TIME_FORMAT " seg %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT " time %" GST_TIME_FORMAT, - GST_TIME_ARGS (GST_BUFFER_PTS (buf)), - GST_TIME_ARGS (GST_BUFFER_PTS (buf) + - GST_BUFFER_DURATION (buf)), + GST_TIME_ARGS (cstart), + GST_TIME_ARGS (cstop), GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->time)); } else { @@ -2769,11 +3163,15 @@ GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->time)); - if (segment->rate >= 0) { - if (GST_BUFFER_PTS (buf) >= segment->stop) + /* only check and return EOS if upstream still + * in the same segment and interested as such */ + if (decoder->priv->in_out_segment_sync) { + if (segment->rate >= 0) { + if (GST_BUFFER_PTS (buf) >= segment->stop) + ret = GST_FLOW_EOS; + } else if (GST_BUFFER_PTS (buf) < segment->start) { ret = GST_FLOW_EOS; - } else if (GST_BUFFER_PTS (buf) < segment->start) { - ret = GST_FLOW_EOS; + } } gst_buffer_unref (buf); goto done; @@ -3870,11 +4268,13 @@ /** * gst_video_decoder_merge_tags: * @decoder: a #GstVideoDecoder - * @tags: a #GstTagList to merge - * @mode: the #GstTagMergeMode to use - * - * Adds tags to so-called pending tags, which will be processed - * before pushing out data downstream. + * @tags: (allow-none): a #GstTagList to merge, or NULL to unset + * previously-set tags + * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE + * + * Sets the audio decoder tags and how they should be merged with any + * upstream stream tags. This will override any tags previously-set + * with gst_audio_decoder_merge_tags(). * * Note that this is provided for convenience, and the subclass is * not required to use this and can still do tag handling on its own. @@ -3885,19 +4285,25 @@ gst_video_decoder_merge_tags (GstVideoDecoder * decoder, const GstTagList * tags, GstTagMergeMode mode) { - GstTagList *otags; - g_return_if_fail (GST_IS_VIDEO_DECODER (decoder)); g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags)); + g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED); GST_VIDEO_DECODER_STREAM_LOCK (decoder); - if (tags) - GST_DEBUG_OBJECT (decoder, "merging tags %" GST_PTR_FORMAT, tags); - otags = decoder->priv->tags; - decoder->priv->tags = gst_tag_list_merge (decoder->priv->tags, tags, mode); - if (otags) - gst_tag_list_unref (otags); - decoder->priv->tags_changed = TRUE; + if (decoder->priv->tags != tags) { + if (decoder->priv->tags) { + gst_tag_list_unref (decoder->priv->tags); + decoder->priv->tags = NULL; + decoder->priv->tags_merge_mode = GST_TAG_MERGE_APPEND; + } + if (tags) { + decoder->priv->tags = gst_tag_list_ref ((GstTagList *) tags); + decoder->priv->tags_merge_mode = mode; + } + + GST_DEBUG_OBJECT (decoder, "set decoder tags to %" GST_PTR_FORMAT, tags); + decoder->priv->tags_changed = TRUE; + } GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); } @@ -3945,3 +4351,24 @@ if (params) *params = decoder->priv->params; } + +/** + * gst_video_decoder_set_use_default_pad_acceptcaps: + * @decoder: a #GstVideoDecoder + * @use: if the default pad accept-caps query handling should be used + * + * Lets #GstVideoDecoder sub-classes decide if they want the sink pad + * to use the default pad query handler to reply to accept-caps queries. + * + * By setting this to true it is possible to further customize the default + * handler with %GST_PAD_SET_ACCEPT_INTERSECT and + * %GST_PAD_SET_ACCEPT_TEMPLATE + * + * Since: 1.6 + */ +void +gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder, + gboolean use) +{ + decoder->priv->use_default_pad_acceptcaps = use; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideodecoder.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideodecoder.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideodecoder.h 2014-09-23 16:44:37.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideodecoder.h 2015-10-22 08:01:34.000000000 +0000 @@ -42,6 +42,7 @@ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_DECODER)) #define GST_IS_VIDEO_DECODER_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_DECODER)) +#define GST_VIDEO_DECODER_CAST(obj) ((GstVideoDecoder *)(obj)) /** * GST_VIDEO_DECODER_SINK_NAME: @@ -214,8 +215,12 @@ * @handle_frame: Provides input data frame to subclass. * @finish: Optional. * Called to request subclass to dispatch any pending remaining - * data (e.g. at EOS or segment end). Sub-classes should be prepared - * to handle new data afterward, or seamless segment processing will break. + * data at EOS. Sub-classes can refuse to decode new data after. + * @drain: Optional. + * Called to request subclass to decode any data it can at this + * point, but that more data may arrive after. (e.g. at segment end). + * Sub-classes should be prepared to handle new data afterward, + * or seamless segment processing will break. Since: 1.6 * @sink_event: Optional. * Event handler on the sink pad. This function should return * TRUE if the event was handled and should be discarded @@ -255,6 +260,16 @@ * return TRUE if the query could be performed. Subclasses * should chain up to the parent implementation to invoke the * default handler. Since 1.4 + * @getcaps: Optional. + * Allows for a custom sink getcaps implementation. + * If not implemented, default returns + * gst_video_decoder_proxy_getcaps + * applied to sink template caps. + * @transform_meta: Optional. Transform the metadata on the input buffer to the + * output buffer. By default this method is copies all meta without + * tags and meta with only the "video" tag. subclasses can + * implement this method and return %TRUE if the metadata is to be + * copied. Since 1.6 * * Subclasses can override any of the available virtual methods or not, as * needed. At minimum @handle_frame needs to be overridden, and @set_format @@ -311,9 +326,17 @@ gboolean (*src_query) (GstVideoDecoder *decoder, GstQuery *query); + GstCaps* (*getcaps) (GstVideoDecoder *decoder, + GstCaps *filter); + + GstFlowReturn (*drain) (GstVideoDecoder *decoder); + + gboolean (*transform_meta) (GstVideoDecoder *decoder, + GstVideoCodecFrame *frame, + GstMeta * meta); /*< private >*/ - void *padding[GST_PADDING_LARGE-3]; + void *padding[GST_PADDING_LARGE-6]; }; GType gst_video_decoder_get_type (void); @@ -397,6 +420,13 @@ const GstTagList *tags, GstTagMergeMode mode); +GstCaps * gst_video_decoder_proxy_getcaps (GstVideoDecoder * decoder, + GstCaps * caps, + GstCaps * filter); + +void gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder, + gboolean use); + G_END_DECLS #endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoencoder.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoencoder.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoencoder.c 2014-09-19 06:38:14.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoencoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -117,6 +117,7 @@ #include #include "gstvideoencoder.h" #include "gstvideoutils.h" +#include "gstvideoutilsprivate.h" #include #include @@ -137,8 +138,6 @@ /* FIXME : (and introduce a context ?) */ gboolean drained; - gboolean at_eos; - gboolean do_caps; gint64 min_latency; gint64 max_latency; @@ -163,8 +162,19 @@ GstAllocator *allocator; GstAllocationParams params; + /* upstream stream tags (global tags are passed through as-is) */ + GstTagList *upstream_tags; + + /* subclass tags */ GstTagList *tags; + GstTagMergeMode tags_merge_mode; + gboolean tags_changed; + + GstClockTime min_pts; + /* adjustment needed on pts, dts, segment start and stop to accomodate + * min_pts */ + GstClockTime time_adjustment; }; typedef struct _ForcedKeyUnitEvent ForcedKeyUnitEvent; @@ -240,6 +250,9 @@ static gboolean gst_video_encoder_src_query_default (GstVideoEncoder * encoder, GstQuery * query); +static gboolean gst_video_encoder_transform_meta_default (GstVideoEncoder * + encoder, GstVideoCodecFrame * frame, GstMeta * meta); + /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init * method to get to the padtemplates */ GType @@ -303,6 +316,7 @@ klass->negotiate = gst_video_encoder_negotiate_default; klass->sink_query = gst_video_encoder_sink_query_default; klass->src_query = gst_video_encoder_src_query_default; + klass->transform_meta = gst_video_encoder_transform_meta_default; } static GList * @@ -341,13 +355,11 @@ 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; + priv->time_adjustment = GST_CLOCK_TIME_NONE; + if (hard) { gst_segment_init (&encoder->input_segment, GST_FORMAT_TIME); gst_segment_init (&encoder->output_segment, GST_FORMAT_TIME); @@ -359,14 +371,16 @@ gst_video_codec_state_unref (priv->output_state); priv->output_state = NULL; + if (priv->upstream_tags) { + gst_tag_list_unref (priv->upstream_tags); + priv->upstream_tags = NULL; + } if (priv->tags) gst_tag_list_unref (priv->tags); priv->tags = NULL; + priv->tags_merge_mode = GST_TAG_MERGE_APPEND; priv->tags_changed = FALSE; - priv->min_latency = 0; - priv->max_latency = 0; - g_list_foreach (priv->headers, (GFunc) gst_event_unref, NULL); g_list_free (priv->headers); priv->headers = NULL; @@ -393,6 +407,10 @@ 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; @@ -454,10 +472,14 @@ g_rec_mutex_init (&encoder->stream_lock); - priv->at_eos = FALSE; priv->headers = NULL; priv->new_headers = FALSE; + priv->min_latency = 0; + priv->max_latency = 0; + priv->min_pts = GST_CLOCK_TIME_NONE; + priv->time_adjustment = GST_CLOCK_TIME_NONE; + gst_video_encoder_reset (encoder, TRUE); } @@ -567,6 +589,9 @@ tgt->par_d = ref->par_d; tgt->fps_n = ref->fps_n; tgt->fps_d = ref->fps_d; + + GST_VIDEO_INFO_MULTIVIEW_MODE (tgt) = GST_VIDEO_INFO_MULTIVIEW_MODE (ref); + GST_VIDEO_INFO_MULTIVIEW_FLAGS (tgt) = GST_VIDEO_INFO_MULTIVIEW_FLAGS (ref); } return state; @@ -630,7 +655,7 @@ if (encoder_class->reset) { GST_FIXME_OBJECT (encoder, "GstVideoEncoder::reset() is deprecated"); - ret = encoder_class->reset (encoder, TRUE); + encoder_class->reset (encoder, TRUE); } /* and subclass should be ready to configure format at any time around */ @@ -669,82 +694,22 @@ /** * gst_video_encoder_proxy_getcaps: * @enc: a #GstVideoEncoder - * @caps: initial caps - * @filter: filter caps + * @caps: (allow-none): initial caps + * @filter: (allow-none): filter caps * * Returns caps that express @caps (or sink template caps if @caps == NULL) * restricted to resolution/format/... combinations supported by downstream * elements (e.g. muxers). * - * Returns: a #GstCaps owned by caller + * Returns: (transfer full): a #GstCaps owned by caller */ GstCaps * gst_video_encoder_proxy_getcaps (GstVideoEncoder * encoder, GstCaps * caps, GstCaps * filter) { - GstCaps *templ_caps; - GstCaps *allowed; - GstCaps *fcaps, *filter_caps; - gint i, j; - - /* Allow downstream to specify width/height/framerate/PAR constraints - * and forward them upstream for video converters to handle - */ - templ_caps = - caps ? gst_caps_ref (caps) : - gst_pad_get_pad_template_caps (encoder->sinkpad); - allowed = gst_pad_get_allowed_caps (encoder->srcpad); - - if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) { - fcaps = templ_caps; - goto done; - } - - GST_LOG_OBJECT (encoder, "template caps %" GST_PTR_FORMAT, templ_caps); - GST_LOG_OBJECT (encoder, "allowed caps %" GST_PTR_FORMAT, allowed); - - filter_caps = gst_caps_new_empty (); - - for (i = 0; i < gst_caps_get_size (templ_caps); i++) { - GQuark q_name = - gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); - - for (j = 0; j < gst_caps_get_size (allowed); j++) { - const GstStructure *allowed_s = gst_caps_get_structure (allowed, j); - const GValue *val; - GstStructure *s; - - s = gst_structure_new_id_empty (q_name); - if ((val = gst_structure_get_value (allowed_s, "width"))) - gst_structure_set_value (s, "width", val); - if ((val = gst_structure_get_value (allowed_s, "height"))) - gst_structure_set_value (s, "height", val); - if ((val = gst_structure_get_value (allowed_s, "framerate"))) - gst_structure_set_value (s, "framerate", val); - if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio"))) - gst_structure_set_value (s, "pixel-aspect-ratio", val); - - filter_caps = gst_caps_merge_structure (filter_caps, s); - } - } - - fcaps = gst_caps_intersect (filter_caps, templ_caps); - gst_caps_unref (filter_caps); - gst_caps_unref (templ_caps); - - if (filter) { - GST_LOG_OBJECT (encoder, "intersecting with %" GST_PTR_FORMAT, filter); - filter_caps = gst_caps_intersect (fcaps, filter); - gst_caps_unref (fcaps); - fcaps = filter_caps; - } - -done: - gst_caps_replace (&allowed, NULL); - - GST_LOG_OBJECT (encoder, "proxy caps %" GST_PTR_FORMAT, fcaps); - - return fcaps; + return __gst_video_element_proxy_getcaps (GST_ELEMENT_CAST (encoder), + GST_VIDEO_ENCODER_SINK_PAD (encoder), + GST_VIDEO_ENCODER_SRC_PAD (encoder), caps, filter); } static GstCaps * @@ -944,8 +909,19 @@ break; } + if (encoder->priv->time_adjustment != GST_CLOCK_TIME_NONE) { + segment.start += encoder->priv->time_adjustment; + if (GST_CLOCK_TIME_IS_VALID (segment.stop)) { + segment.stop += encoder->priv->time_adjustment; + } + } + encoder->output_segment = segment; GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + + gst_event_unref (event); + event = gst_event_new_segment (&encoder->output_segment); + break; } default: @@ -955,12 +931,43 @@ return gst_pad_push_event (encoder->srcpad, event); } +static GstEvent * +gst_video_encoder_create_merged_tags_event (GstVideoEncoder * enc) +{ + GstTagList *merged_tags; + + GST_LOG_OBJECT (enc, "upstream : %" GST_PTR_FORMAT, enc->priv->upstream_tags); + GST_LOG_OBJECT (enc, "encoder : %" GST_PTR_FORMAT, enc->priv->tags); + GST_LOG_OBJECT (enc, "mode : %d", enc->priv->tags_merge_mode); + + merged_tags = + gst_tag_list_merge (enc->priv->upstream_tags, enc->priv->tags, + enc->priv->tags_merge_mode); + + GST_DEBUG_OBJECT (enc, "merged : %" GST_PTR_FORMAT, merged_tags); + + if (merged_tags == NULL) + return NULL; + + if (gst_tag_list_is_empty (merged_tags)) { + gst_tag_list_unref (merged_tags); + return NULL; + } + + return gst_event_new_tag (merged_tags); +} + static inline void gst_video_encoder_check_and_push_tags (GstVideoEncoder * encoder) { - if (encoder->priv->tags && encoder->priv->tags_changed) { - gst_video_encoder_push_event (encoder, - gst_event_new_tag (gst_tag_list_ref (encoder->priv->tags))); + if (encoder->priv->tags_changed) { + GstEvent *tags_event; + + tags_event = gst_video_encoder_create_merged_tags_event (encoder); + + if (tags_event != NULL) + gst_video_encoder_push_event (encoder, tags_event); + encoder->priv->tags_changed = FALSE; } } @@ -980,8 +987,8 @@ GstCaps *caps; gst_event_parse_caps (event, &caps); - ret = TRUE; - encoder->priv->do_caps = TRUE; + ret = gst_video_encoder_setcaps (encoder, caps); + gst_event_unref (event); event = NULL; break; @@ -991,7 +998,6 @@ GstFlowReturn flow_ret; GST_VIDEO_ENCODER_STREAM_LOCK (encoder); - encoder->priv->at_eos = TRUE; if (encoder_class->finish) { flow_ret = encoder_class->finish (encoder); @@ -1034,8 +1040,6 @@ break; } - encoder->priv->at_eos = FALSE; - encoder->input_segment = segment; ret = TRUE; GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); @@ -1069,6 +1073,19 @@ } break; } + case GST_EVENT_STREAM_START: + { + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); + /* Flush upstream tags after a STREAM_START */ + GST_DEBUG_OBJECT (encoder, "STREAM_START, clearing upstream tags"); + if (encoder->priv->upstream_tags) { + gst_tag_list_unref (encoder->priv->upstream_tags); + encoder->priv->upstream_tags = NULL; + encoder->priv->tags_changed = TRUE; + } + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + break; + } case GST_EVENT_TAG: { GstTagList *tags; @@ -1076,26 +1093,33 @@ gst_event_parse_tag (event, &tags); if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) { - tags = gst_tag_list_copy (tags); - - /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */ - gst_tag_list_remove_tag (tags, GST_TAG_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC); - gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT); - gst_tag_list_remove_tag (tags, GST_TAG_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE); - gst_tag_list_remove_tag (tags, GST_TAG_ENCODER); - gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION); - - gst_video_encoder_merge_tags (encoder, tags, GST_TAG_MERGE_REPLACE); - gst_tag_list_unref (tags); + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); + if (encoder->priv->upstream_tags != tags) { + tags = gst_tag_list_copy (tags); + + /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */ + gst_tag_list_remove_tag (tags, GST_TAG_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT); + gst_tag_list_remove_tag (tags, GST_TAG_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE); + gst_tag_list_remove_tag (tags, GST_TAG_ENCODER); + gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION); + + if (encoder->priv->upstream_tags) + gst_tag_list_unref (encoder->priv->upstream_tags); + encoder->priv->upstream_tags = tags; + GST_INFO_OBJECT (encoder, "upstream tags: %" GST_PTR_FORMAT, tags); + } gst_event_unref (event); - event = NULL; - ret = TRUE; + event = gst_video_encoder_create_merged_tags_event (encoder); + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + if (!event) + ret = TRUE; } break; } @@ -1264,11 +1288,11 @@ GST_OBJECT_LOCK (enc); min_latency += priv->min_latency; - if (enc->priv->max_latency == GST_CLOCK_TIME_NONE) { + if (max_latency == GST_CLOCK_TIME_NONE + || enc->priv->max_latency == GST_CLOCK_TIME_NONE) max_latency = GST_CLOCK_TIME_NONE; - } else if (max_latency != GST_CLOCK_TIME_NONE) { + else max_latency += enc->priv->max_latency; - } GST_OBJECT_UNLOCK (enc); gst_query_set_latency (query, live, min_latency, max_latency); @@ -1352,18 +1376,6 @@ g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR); - if (G_UNLIKELY (encoder->priv->do_caps)) { - GstCaps *caps = gst_pad_get_current_caps (encoder->sinkpad); - if (!caps) - goto not_negotiated; - if (!gst_video_encoder_setcaps (encoder, caps)) { - gst_caps_unref (caps); - goto not_negotiated; - } - gst_caps_unref (caps); - encoder->priv->do_caps = FALSE; - } - if (!encoder->priv->input_state) goto not_negotiated; @@ -1378,11 +1390,6 @@ gst_buffer_get_size (buf), GST_TIME_ARGS (pts), GST_TIME_ARGS (GST_BUFFER_DTS (buf)), GST_TIME_ARGS (duration)); - if (priv->at_eos) { - ret = GST_FLOW_EOS; - goto done; - } - start = pts; if (GST_CLOCK_TIME_IS_VALID (duration)) stop = start + duration; @@ -1402,6 +1409,17 @@ else duration = GST_CLOCK_TIME_NONE; + if (priv->min_pts != GST_CLOCK_TIME_NONE + && priv->time_adjustment == GST_CLOCK_TIME_NONE) { + if (cstart < priv->min_pts) { + priv->time_adjustment = priv->min_pts - cstart; + } + } + + if (priv->time_adjustment != GST_CLOCK_TIME_NONE) { + cstart += priv->time_adjustment; + } + /* incoming DTS is not really relevant and does not make sense anyway, * so pass along _NONE and maybe come up with something better later on */ frame = gst_video_encoder_new_frame (encoder, buf, cstart, @@ -1493,12 +1511,13 @@ goto open_failed; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - /* Initialize device/library if needed */ - if (encoder_class->start && !encoder_class->start (encoder)) - goto start_failed; GST_VIDEO_ENCODER_STREAM_LOCK (encoder); gst_video_encoder_reset (encoder, TRUE); GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + + /* Initialize device/library if needed */ + if (encoder_class->start && !encoder_class->start (encoder)) + goto start_failed; break; default: break; @@ -1507,13 +1526,20 @@ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY: + case GST_STATE_CHANGE_PAUSED_TO_READY:{ + gboolean stopped = TRUE; + + if (encoder_class->stop) + stopped = encoder_class->stop (encoder); + GST_VIDEO_ENCODER_STREAM_LOCK (encoder); gst_video_encoder_reset (encoder, TRUE); GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); - if (encoder_class->stop && !encoder_class->stop (encoder)) + + if (!stopped) goto stop_failed; break; + } case GST_STATE_CHANGE_READY_TO_NULL: /* close device/library if needed */ if (encoder_class->close && !encoder_class->close (encoder)) @@ -1591,6 +1617,16 @@ if (state->codec_data) gst_caps_set_simple (state->caps, "codec_data", GST_TYPE_BUFFER, state->codec_data, NULL); + + if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != GST_VIDEO_MULTIVIEW_MODE_NONE) { + const gchar *caps_mview_mode = + gst_video_multiview_mode_to_caps_string (GST_VIDEO_INFO_MULTIVIEW_MODE + (info)); + + gst_caps_set_simple (state->caps, "multiview-mode", G_TYPE_STRING, + caps_mview_mode, "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, + GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), GST_FLAG_SET_MASK_EXACT, NULL); + } encoder->priv->output_state_changed = FALSE; } @@ -1830,6 +1866,62 @@ gst_video_codec_frame_unref (frame); } +static gboolean +gst_video_encoder_transform_meta_default (GstVideoEncoder * + encoder, GstVideoCodecFrame * frame, GstMeta * meta) +{ + const GstMetaInfo *info = meta->info; + const gchar *const *tags; + + tags = gst_meta_api_type_get_tags (info->api); + + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_VIDEO_STR)))) + return TRUE; + + return FALSE; +} + +typedef struct +{ + GstVideoEncoder *encoder; + GstVideoCodecFrame *frame; +} CopyMetaData; + +static gboolean +foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) +{ + CopyMetaData *data = user_data; + GstVideoEncoder *encoder = data->encoder; + GstVideoEncoderClass *klass = GST_VIDEO_ENCODER_GET_CLASS (encoder); + GstVideoCodecFrame *frame = data->frame; + const GstMetaInfo *info = (*meta)->info; + gboolean do_copy = FALSE; + + if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) { + /* never call the transform_meta with memory specific metadata */ + GST_DEBUG_OBJECT (encoder, "not copying memory specific metadata %s", + g_type_name (info->api)); + do_copy = FALSE; + } else if (klass->transform_meta) { + do_copy = klass->transform_meta (encoder, frame, *meta); + GST_DEBUG_OBJECT (encoder, "transformed metadata %s: copy: %d", + g_type_name (info->api), do_copy); + } + + /* we only copy metadata when the subclass implemented a transform_meta + * function and when it returns %TRUE */ + if (do_copy) { + GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; + GST_DEBUG_OBJECT (encoder, "copy metadata %s", g_type_name (info->api)); + /* simply copy then */ + info->transform_func (frame->output_buffer, *meta, inbuf, + _gst_meta_transform_copy, ©_data); + } + return TRUE; +} + /** * gst_video_encoder_finish_frame: * @encoder: a #GstVideoEncoder @@ -1980,11 +2072,9 @@ if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) { priv->distance_from_sync = 0; GST_BUFFER_FLAG_UNSET (frame->output_buffer, GST_BUFFER_FLAG_DELTA_UNIT); - /* For keyframes, DTS = PTS */ + /* For keyframes, DTS = PTS, if encoder doesn't decide otherwise */ if (!GST_CLOCK_TIME_IS_VALID (frame->dts)) { frame->dts = frame->pts; - } else if (GST_CLOCK_TIME_IS_VALID (frame->pts) && frame->pts != frame->dts) { - GST_WARNING_OBJECT (encoder, "keyframe PTS != DTS"); } } else { GST_BUFFER_FLAG_SET (frame->output_buffer, GST_BUFFER_FLAG_DELTA_UNIT); @@ -2078,6 +2168,19 @@ if (encoder_class->pre_push) ret = encoder_class->pre_push (encoder, frame); + if (encoder_class->transform_meta) { + if (G_LIKELY (frame->input_buffer)) { + CopyMetaData data; + + data.encoder = encoder; + data.frame = frame; + gst_buffer_foreach_meta (frame->input_buffer, foreach_metadata, &data); + } else { + GST_WARNING_OBJECT (encoder, + "Can't copy metadata because input frame disappeared"); + } + } + /* Get an additional ref to the buffer, which is going to be pushed * downstream, the original ref is owned by the frame */ buffer = gst_buffer_ref (frame->output_buffer); @@ -2104,6 +2207,7 @@ /* ERRORS */ no_output_state: { + gst_video_encoder_release_frame (encoder, frame); GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); GST_ERROR_OBJECT (encoder, "Output state was not configured"); return GST_FLOW_ERROR; @@ -2302,11 +2406,13 @@ /** * gst_video_encoder_merge_tags: * @encoder: a #GstVideoEncoder - * @tags: a #GstTagList to merge - * @mode: the #GstTagMergeMode to use - * - * Adds tags to so-called pending tags, which will be processed - * before pushing out data downstream. + * @tags: (allow-none): a #GstTagList to merge, or NULL to unset + * previously-set tags + * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE + * + * Sets the video encoder tags and how they should be merged with any + * upstream stream tags. This will override any tags previously-set + * with gst_video_encoder_merge_tags(). * * Note that this is provided for convenience, and the subclass is * not required to use this and can still do tag handling on its own. @@ -2317,19 +2423,26 @@ gst_video_encoder_merge_tags (GstVideoEncoder * encoder, const GstTagList * tags, GstTagMergeMode mode) { - GstTagList *otags; - g_return_if_fail (GST_IS_VIDEO_ENCODER (encoder)); g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags)); + g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED); GST_VIDEO_ENCODER_STREAM_LOCK (encoder); - if (tags) - GST_DEBUG_OBJECT (encoder, "merging tags %" GST_PTR_FORMAT, tags); - otags = encoder->priv->tags; - encoder->priv->tags = gst_tag_list_merge (encoder->priv->tags, tags, mode); - if (otags) - gst_tag_list_unref (otags); - encoder->priv->tags_changed = TRUE; + if (encoder->priv->tags != tags) { + if (encoder->priv->tags) { + gst_tag_list_unref (encoder->priv->tags); + encoder->priv->tags = NULL; + encoder->priv->tags_merge_mode = GST_TAG_MERGE_APPEND; + } + if (tags) { + encoder->priv->tags = gst_tag_list_ref ((GstTagList *) tags); + encoder->priv->tags_merge_mode = mode; + } + + GST_DEBUG_OBJECT (encoder, "setting encoder tags to %" GST_PTR_FORMAT, + tags); + encoder->priv->tags_changed = TRUE; + } GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); } @@ -2359,3 +2472,23 @@ if (params) *params = encoder->priv->params; } + +/** + * gst_video_encoder_set_min_pts: + * @encoder: a #GstVideoEncoder + * @min_pts: minimal PTS that will be passed to handle_frame + * + * Request minimal value for PTS passed to handle_frame. + * + * For streams with reordered frames this can be used to ensure that there + * is enough time to accomodate first DTS, which may be less than first PTS + * + * Since 1.6 + */ +void +gst_video_encoder_set_min_pts (GstVideoEncoder * encoder, GstClockTime min_pts) +{ + g_return_if_fail (GST_IS_VIDEO_ENCODER (encoder)); + encoder->priv->min_pts = min_pts; + encoder->priv->time_adjustment = GST_CLOCK_TIME_NONE; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoencoder.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoencoder.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoencoder.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoencoder.h 2015-10-22 08:01:34.000000000 +0000 @@ -224,6 +224,11 @@ * return TRUE if the query could be performed. Subclasses * should chain up to the parent implementation to invoke the * default handler. Since 1.4 + * @transform_meta: Optional. Transform the metadata on the input buffer to the + * output buffer. By default this method is copies all meta without + * tags and meta with only the "video" tag. subclasses can + * implement this method and return %TRUE if the metadata is to be + * copied. Since 1.6 * * Subclasses can override any of the available virtual methods or not, as * needed. At minimum @handle_frame needs to be overridden, and @set_format @@ -281,8 +286,12 @@ gboolean (*src_query) (GstVideoEncoder *encoder, GstQuery *query); + gboolean (*transform_meta) (GstVideoEncoder *encoder, + GstVideoCodecFrame *frame, + GstMeta * meta); + /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE-3]; + gpointer _gst_reserved[GST_PADDING_LARGE-4]; }; GType gst_video_encoder_get_type (void); @@ -333,6 +342,8 @@ GstAllocator **allocator, GstAllocationParams *params); +void gst_video_encoder_set_min_pts(GstVideoEncoder *encoder, GstClockTime min_pts); + G_END_DECLS #endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideofilter.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideofilter.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideofilter.c 2014-09-13 13:49:23.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideofilter.c 2015-10-22 08:01:34.000000000 +0000 @@ -260,23 +260,15 @@ 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 @@ 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 @@ 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 { @@ -366,9 +351,9 @@ tags = gst_meta_api_type_get_tags (info->api); - if (tags && g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, - g_quark_from_string (GST_META_TAG_VIDEO_STR))) + if (!tags || (g_strv_length ((gchar **) tags) == 1 + && gst_meta_api_type_has_tag (info->api, + g_quark_from_string (GST_META_TAG_VIDEO_STR)))) return TRUE; return GST_BASE_TRANSFORM_CLASS (parent_class)->transform_meta (trans, inbuf, diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideometa.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideometa.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideometa.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideometa.c 2015-10-22 08:01:34.000000000 +0000 @@ -21,6 +21,27 @@ #include +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("videometa", 0, "videometa"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + static gboolean gst_video_meta_transform (GstBuffer * dest, GstMeta * meta, GstBuffer * buffer, GQuark type, gpointer data) @@ -59,6 +80,9 @@ dmeta->map = smeta->map; dmeta->unmap = smeta->unmap; } + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; } return TRUE; } @@ -97,6 +121,38 @@ } /** + * gst_buffer_get_video_meta: + * @buffer: a #GstBuffer + * + * Find the #GstVideoMeta on @buffer with the lowest @id. + * + * Buffers can contain multiple #GstVideoMeta metadata items when dealing with + * multiview buffers. + * + * Returns: (transfer none): the #GstVideoMeta with lowest id (usually 0) or %NULL when there + * is no such metadata on @buffer. + */ +GstVideoMeta * +gst_buffer_get_video_meta (GstBuffer * buffer) +{ + gpointer state = NULL; + GstVideoMeta *out = NULL; + GstMeta *meta; + const GstMetaInfo *info = GST_VIDEO_META_INFO; + + while ((meta = gst_buffer_iterate_meta (buffer, &state))) { + if (meta->info->api == info->api) { + GstVideoMeta *vmeta = (GstVideoMeta *) meta; + if (vmeta->id == 0) + return vmeta; /* Early out for id 0 */ + if (out == NULL || vmeta->id < out->id) + out = vmeta; + } + } + return out; +} + +/** * gst_buffer_get_video_meta_id: * @buffer: a #GstBuffer * @id: a metadata id @@ -106,7 +162,7 @@ * Buffers can contain multiple #GstVideoMeta metadata items when dealing with * multiview buffers. * - * Returns: the #GstVideoMeta with @id or %NULL when there is no such metadata + * Returns: (transfer none): the #GstVideoMeta with @id or %NULL when there is no such metadata * on @buffer. */ GstVideoMeta * @@ -186,7 +242,7 @@ * This function calculates the default offsets and strides and then calls * gst_buffer_add_video_meta_full() with them. * - * Returns: the #GstVideoMeta on @buffer. + * Returns: (transfer none): the #GstVideoMeta on @buffer. */ GstVideoMeta * gst_buffer_add_video_meta (GstBuffer * buffer, @@ -217,7 +273,7 @@ * * Attaches GstVideoMeta metadata to @buffer with the given parameters. * - * Returns: the #GstVideoMeta on @buffer. + * Returns: (transfer none): the #GstVideoMeta on @buffer. */ GstVideoMeta * gst_buffer_add_video_meta_full (GstBuffer * buffer, @@ -315,6 +371,8 @@ if (GST_META_TRANSFORM_IS_COPY (type)) { smeta = (GstVideoCropMeta *) meta; dmeta = gst_buffer_add_video_crop_meta (dest); + if (!dmeta) + return FALSE; GST_DEBUG ("copy crop metadata"); dmeta->x = smeta->x; @@ -327,6 +385,8 @@ smeta = (GstVideoCropMeta *) meta; dmeta = gst_buffer_add_video_crop_meta (dest); + if (!dmeta) + return FALSE; ow = GST_VIDEO_INFO_WIDTH (trans->in_info); nw = GST_VIDEO_INFO_WIDTH (trans->out_info); @@ -342,6 +402,9 @@ dmeta->y); GST_DEBUG ("crop size %dx%d -> %dx%d", smeta->width, smeta->height, dmeta->width, dmeta->height); + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; } return TRUE; } @@ -452,6 +515,9 @@ if (dmeta->user_data_copy) dmeta->user_data = dmeta->user_data_copy (dmeta->user_data); } + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; } return TRUE; } @@ -477,15 +543,18 @@ /** * gst_buffer_add_video_gl_texture_upload_meta: * @buffer: a #GstBuffer - * @upload: the function to upload the buffer to a specific texture ID + * @texture_orientation: the #GstVideoGLTextureOrientation + * @n_textures: the number of textures + * @texture_type: array of #GstVideoGLTextureType + * @upload: (scope call): the function to upload the buffer to a specific texture ID * @user_data: user data for the implementor of @upload - * @user_data_copy: function to copy @user_data - * @user_data_free: function to free @user_data + * @user_data_copy: (scope call): function to copy @user_data + * @user_data_free: (scope call): function to free @user_data * * Attaches GstVideoGLTextureUploadMeta metadata to @buffer with the given * parameters. * - * Returns: the #GstVideoGLTextureUploadMeta on @buffer. + * Returns: (transfer none): the #GstVideoGLTextureUploadMeta on @buffer. */ GstVideoGLTextureUploadMeta * gst_buffer_add_video_gl_texture_upload_meta (GstBuffer * buffer, @@ -571,6 +640,9 @@ dmeta = gst_buffer_add_video_region_of_interest_meta_id (dest, smeta->roi_type, smeta->x, smeta->y, smeta->w, smeta->h); + if (!dmeta) + return FALSE; + dmeta->id = smeta->id; dmeta->parent_id = smeta->parent_id; } else if (GST_VIDEO_META_TRANSFORM_IS_SCALE (type)) { @@ -588,6 +660,9 @@ gst_buffer_add_video_region_of_interest_meta_id (dest, smeta->roi_type, (smeta->x * nw) / ow, (smeta->y * nh) / oh, (smeta->w * nw) / ow, (smeta->h * nh) / oh); + if (!dmeta) + return FALSE; + dmeta->id = smeta->id; dmeta->parent_id = smeta->parent_id; @@ -595,6 +670,9 @@ smeta->id, smeta->parent_id, smeta->x, smeta->y, dmeta->x, dmeta->y); GST_DEBUG ("region of interest size %dx%d -> %dx%d", smeta->w, smeta->h, dmeta->w, dmeta->h); + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; } return TRUE; } @@ -645,7 +723,7 @@ * Buffers can contain multiple #GstVideoRegionOfInterestMeta metadata items if * multiple regions of interests are marked on a frame. * - * Returns: the #GstVideoeRegionOfInterestMeta with @id or %NULL when there is + * Returns: (transfer none): the #GstVideoRegionOfInterestMeta with @id or %NULL when there is * no such metadata on @buffer. */ GstVideoRegionOfInterestMeta * @@ -678,7 +756,7 @@ * Attaches #GstVideoRegionOfInterestMeta metadata to @buffer with the given * parameters. * - * Returns: the #GstVideoRegionOfInterestMeta on @buffer. + * Returns: (transfer none): the #GstVideoRegionOfInterestMeta on @buffer. */ GstVideoRegionOfInterestMeta * gst_buffer_add_video_region_of_interest_meta (GstBuffer * buffer, @@ -700,7 +778,7 @@ * Attaches #GstVideoRegionOfInterestMeta metadata to @buffer with the given * parameters. * - * Returns: the #GstVideoRegionOfInterestMeta on @buffer. + * Returns: (transfer none): the #GstVideoRegionOfInterestMeta on @buffer. */ GstVideoRegionOfInterestMeta * gst_buffer_add_video_region_of_interest_meta_id (GstBuffer * buffer, diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideometa.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideometa.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideometa.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideometa.h 2015-10-22 08:01:34.000000000 +0000 @@ -78,7 +78,7 @@ GType gst_video_meta_api_get_type (void); const GstMetaInfo * gst_video_meta_get_info (void); -#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE)) +GstVideoMeta * gst_buffer_get_video_meta (GstBuffer *buffer); GstVideoMeta * gst_buffer_get_video_meta_id (GstBuffer *buffer, gint id); GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, GstVideoFrameFlags flags, @@ -255,8 +255,8 @@ * @parent_id: identifier of its parent ROI, used f.i. for ROI hierarchisation. * @x: x component of upper-left corner * @y: y component of upper-left corner - * @width: bounding box width - * @height: bounding box height + * @w: bounding box width + * @h: bounding box height * * Extra buffer metadata describing an image region of interest */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideopool.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideopool.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideopool.c 2014-09-24 08:02:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideopool.c 2015-10-22 08:01:34.000000000 +0000 @@ -20,6 +20,10 @@ #include "gst/video/gstvideometa.h" #include "gst/video/gstvideopool.h" + +GST_DEBUG_CATEGORY_STATIC (gst_video_pool_debug); +#define GST_CAT_DEFAULT gst_video_pool_debug + /** * SECTION:gstvideopool * @short_description: GstBufferPool for raw video buffers @@ -122,11 +126,13 @@ GstVideoBufferPoolPrivate *priv = vpool->priv; GstVideoInfo info; GstCaps *caps; + guint size, min_buffers, max_buffers; gint width, height; GstAllocator *allocator; GstAllocationParams params; - if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL)) + if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers, + &max_buffers)) goto wrong_config; if (caps == NULL) @@ -136,6 +142,9 @@ if (!gst_video_info_from_caps (&info, caps)) goto wrong_caps; + if (size < info.size) + goto wrong_size; + if (!gst_buffer_pool_config_get_allocator (config, &allocator, ¶ms)) goto wrong_config; @@ -164,11 +173,35 @@ GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); if (priv->need_alignment && priv->add_videometa) { - /* get an apply the alignment to the info */ + guint max_align, n; + gst_buffer_pool_config_get_video_alignment (config, &priv->video_align); + + /* ensure GstAllocationParams alignment is compatible with video alignment */ + max_align = priv->params.align; + for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n) + max_align |= priv->video_align.stride_align[n]; + + for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n) + priv->video_align.stride_align[n] = max_align; + + /* apply the alignment to the info */ gst_video_info_align (&info, &priv->video_align); + gst_buffer_pool_config_set_video_alignment (config, &priv->video_align); + + if (priv->params.align < max_align) { + GST_WARNING_OBJECT (pool, "allocation params alignment %u is smaller " + "than the max specified video stride alignment %u, fixing", + (guint) priv->params.align, max_align); + priv->params.align = max_align; + gst_buffer_pool_config_set_allocator (config, allocator, &priv->params); + } } priv->info = info; + info.size = MAX (size, info.size); + + gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers, + max_buffers); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); @@ -189,6 +222,13 @@ "failed getting geometry from caps %" GST_PTR_FORMAT, caps); return FALSE; } +wrong_size: + { + GST_WARNING_OBJECT (pool, + "Provided size is to small for the caps: %u", size); + return FALSE; + + } } static GstFlowReturn @@ -233,7 +273,7 @@ * Create a new bufferpool that can allocate video frames. This bufferpool * supports all the video bufferpool options. * - * Returns: a new #GstBufferPool to allocate video frames + * Returns: (transfer floating): a new #GstBufferPool to allocate video frames */ GstBufferPool * gst_video_buffer_pool_new () @@ -260,6 +300,9 @@ gstbufferpool_class->get_options = video_buffer_pool_get_options; gstbufferpool_class->set_config = video_buffer_pool_set_config; gstbufferpool_class->alloc_buffer = video_buffer_pool_alloc; + + GST_DEBUG_CATEGORY_INIT (gst_video_pool_debug, "videopool", 0, + "videopool object"); } static void diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideosink.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideosink.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideosink.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideosink.c 2015-10-22 08:01:34.000000000 +0000 @@ -87,8 +87,8 @@ if (!scaling) { result->w = MIN (src.w, dst.w); result->h = MIN (src.h, dst.h); - result->x = (dst.w - result->w) / 2; - result->y = (dst.h - result->h) / 2; + result->x = dst.x + (dst.w - result->w) / 2; + result->y = dst.y + (dst.h - result->h) / 2; } else { gdouble src_ratio, dst_ratio; @@ -98,16 +98,16 @@ if (src_ratio > dst_ratio) { result->w = dst.w; result->h = dst.w / src_ratio; - result->x = 0; - result->y = (dst.h - result->h) / 2; + result->x = dst.x; + result->y = dst.y + (dst.h - result->h) / 2; } else if (src_ratio < dst_ratio) { result->w = dst.h * src_ratio; result->h = dst.h; - result->x = (dst.w - result->w) / 2; - result->y = 0; + result->x = dst.x + (dst.w - result->w) / 2; + result->y = dst.y; } else { - result->x = 0; - result->y = 0; + result->x = dst.x; + result->y = dst.y; result->w = dst.w; result->h = dst.h; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutils.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutils.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutils.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutils.h 2015-10-22 08:01:34.000000000 +0000 @@ -206,6 +206,7 @@ * @distance_from_sync: Distance in frames from the last synchronization point. * @input_buffer: the input #GstBuffer that created this frame. The buffer is owned * by the frame and references to the frame instead of the buffer should + * be kept. * @output_buffer: the output #GstBuffer. Implementations should set this either * directly, or by using the * @gst_video_decoder_allocate_output_frame() or @@ -213,7 +214,6 @@ * owned by the frame and references to the frame instead of the * buffer should be kept. * @deadline: Running time when the frame will be used. - * @events: Events that will be pushed downstream before this frame is pushed. * * A #GstVideoCodecFrame represents a video frame both in raw and * encoded form. diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutilsprivate.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutilsprivate.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutilsprivate.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutilsprivate.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,146 @@ +/* GStreamer + * Copyright (C) 2008 David Schleef + * Copyright (C) 2012 Collabora Ltd. + * Author : Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "gstvideoutilsprivate.h" + +/* + * Takes caps and copies its video fields to tmpl_caps + */ +static GstCaps * +__gst_video_element_proxy_caps (GstElement * element, GstCaps * templ_caps, + GstCaps * caps) +{ + GstCaps *result = gst_caps_new_empty (); + gint i, j; + gint templ_caps_size = gst_caps_get_size (templ_caps); + gint caps_size = gst_caps_get_size (caps); + + for (i = 0; i < templ_caps_size; i++) { + GQuark q_name = + gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); + GstCapsFeatures *features = gst_caps_get_features (templ_caps, i); + + for (j = 0; j < caps_size; j++) { + const GstStructure *caps_s = gst_caps_get_structure (caps, j); + const GValue *val; + GstStructure *s; + GstCaps *tmp = gst_caps_new_empty (); + + s = gst_structure_new_id_empty (q_name); + if ((val = gst_structure_get_value (caps_s, "width"))) + gst_structure_set_value (s, "width", val); + if ((val = gst_structure_get_value (caps_s, "height"))) + gst_structure_set_value (s, "height", val); + if ((val = gst_structure_get_value (caps_s, "framerate"))) + gst_structure_set_value (s, "framerate", val); + if ((val = gst_structure_get_value (caps_s, "pixel-aspect-ratio"))) + gst_structure_set_value (s, "pixel-aspect-ratio", val); + + gst_caps_append_structure_full (tmp, s, + gst_caps_features_copy (features)); + result = gst_caps_merge (result, tmp); + } + } + + return result; +} + +/** + * __gst_video_element_proxy_getcaps: + * @element: a #GstElement + * @sinkpad: the element's sink #GstPad + * @srcpad: the element's source #GstPad + * @initial_caps: initial caps + * @filter: filter caps + * + * Returns caps that express @initial_caps (or sink template caps if + * @initial_caps == NULL) restricted to resolution/format/... + * combinations supported by downstream elements (e.g. muxers). + * + * Returns: a #GstCaps owned by caller + */ +GstCaps * +__gst_video_element_proxy_getcaps (GstElement * element, GstPad * sinkpad, + GstPad * srcpad, GstCaps * initial_caps, GstCaps * filter) +{ + GstCaps *templ_caps, *src_templ_caps; + GstCaps *peer_caps; + GstCaps *allowed; + GstCaps *fcaps, *filter_caps; + + /* Allow downstream to specify width/height/framerate/PAR constraints + * and forward them upstream for video converters to handle + */ + templ_caps = initial_caps ? gst_caps_ref (initial_caps) : + gst_pad_get_pad_template_caps (sinkpad); + src_templ_caps = gst_pad_get_pad_template_caps (srcpad); + if (filter && !gst_caps_is_any (filter)) { + GstCaps *proxy_filter = + __gst_video_element_proxy_caps (element, src_templ_caps, filter); + + peer_caps = gst_pad_peer_query_caps (srcpad, proxy_filter); + gst_caps_unref (proxy_filter); + } else { + peer_caps = gst_pad_peer_query_caps (srcpad, NULL); + } + + allowed = gst_caps_intersect_full (peer_caps, src_templ_caps, + GST_CAPS_INTERSECT_FIRST); + + gst_caps_unref (src_templ_caps); + gst_caps_unref (peer_caps); + + if (!allowed || gst_caps_is_any (allowed)) { + fcaps = templ_caps; + goto done; + } else if (gst_caps_is_empty (allowed)) { + fcaps = gst_caps_ref (allowed); + goto done; + } + + GST_LOG_OBJECT (element, "template caps %" GST_PTR_FORMAT, templ_caps); + GST_LOG_OBJECT (element, "allowed caps %" GST_PTR_FORMAT, allowed); + + filter_caps = __gst_video_element_proxy_caps (element, templ_caps, allowed); + + fcaps = gst_caps_intersect (filter_caps, templ_caps); + gst_caps_unref (filter_caps); + gst_caps_unref (templ_caps); + + if (filter) { + GST_LOG_OBJECT (element, "intersecting with %" GST_PTR_FORMAT, filter); + filter_caps = gst_caps_intersect (fcaps, filter); + gst_caps_unref (fcaps); + fcaps = filter_caps; + } + +done: + gst_caps_replace (&allowed, NULL); + + GST_LOG_OBJECT (element, "proxy caps %" GST_PTR_FORMAT, fcaps); + + return fcaps; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutilsprivate.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutilsprivate.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/gstvideoutilsprivate.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/gstvideoutilsprivate.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,40 @@ +/* GStreamer + * Copyright (C) 2008 David Schleef + * Copyright (C) 2012 Collabora Ltd. + * Author : Edward Hervey + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_H__ +#include +#endif + +#ifndef _GST_VIDEO_UTILS_PRIVATE_H_ +#define _GST_VIDEO_UTILS_PRIVATE_H_ + +#include + +G_BEGIN_DECLS + +/* Element utility functions */ +GstCaps *__gst_video_element_proxy_getcaps (GstElement * element, GstPad * sinkpad, + GstPad * srcpad, GstCaps * initial_caps, + GstCaps * filter); + +G_END_DECLS + +#endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/Makefile.am gst-plugins-base1.0-1.6.1/gst-libs/gst/video/Makefile.am --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -2,8 +2,9 @@ ORC_SOURCE=video-orc include $(top_srcdir)/common/orc.mak -glib_enum_headers = video.h video-format.h video-color.h video-info.h \ - colorbalance.h navigation.h video-chroma.h video-tile.h +glib_enum_headers = video.h video-format.h video-color.h video-info.h video-dither.h \ + colorbalance.h navigation.h video-chroma.h video-tile.h video-converter.h \ + video-resampler.h video-frame.h video-scaler.h glib_enum_define = GST_VIDEO glib_gen_prefix = gst_video glib_gen_basename = video @@ -25,8 +26,11 @@ video-format.c \ video-chroma.c \ video-color.c \ + video-converter.c \ + video-dither.c \ video-info.c \ video-frame.c \ + video-scaler.c \ video-tile.c \ gstvideosink.c \ gstvideofilter.c \ @@ -38,8 +42,11 @@ gstvideodecoder.c \ gstvideoencoder.c \ gstvideoutils.c \ + gstvideoutilsprivate.c \ + video-resampler.c \ video-blend.c \ - video-overlay-composition.c + video-overlay-composition.c \ + video-multiview.c nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES) @@ -53,8 +60,11 @@ video-format.h \ video-chroma.h \ video-color.h \ + video-converter.h \ + video-dither.h \ video-info.h \ video-frame.h \ + video-scaler.h \ video-tile.h \ gstvideosink.h \ gstvideofilter.h \ @@ -65,14 +75,17 @@ gstvideodecoder.h \ gstvideoencoder.h \ gstvideoutils.h \ + video-resampler.h \ video-blend.h \ - video-overlay-composition.h + video-overlay-composition.h \ + video-multiview.h nodist_libgstvideo_@GST_API_VERSION@include_HEADERS = $(built_headers) +noinst_HEADERS = gstvideoutilsprivate.h libgstvideo_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \ $(ORC_CFLAGS) -libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) +libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM) libgstvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) include $(top_srcdir)/common/gst-glib-gen.mak @@ -86,7 +99,7 @@ gir_sources+=$(patsubst %,$(builddir)/%, $(built_sources)) GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VERSION@.la - $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ $(INTROSPECTION_SCANNER) -v --namespace GstVideo \ --nsversion=@GST_API_VERSION@ \ @@ -104,7 +117,7 @@ --pkg gstreamer-@GST_API_VERSION@ \ --pkg gstreamer-base-@GST_API_VERSION@ \ --pkg-export gstreamer-video-@GST_API_VERSION@ \ - --add-init-section="gst_init(NULL,NULL);" \ + --add-init-section="$(INTROSPECTION_INIT)" \ --output $@ \ $(gir_headers) \ $(gir_sources) @@ -129,19 +142,3 @@ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) endif - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideo_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstvideo_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstvideo_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstvideo_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/gst/video/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/Makefile.in 2014-09-24 08:16:02.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -47,7 +47,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -111,10 +121,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/orc.mak \ - $(top_srcdir)/common/gst-glib-gen.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp \ - $(libgstvideo_@GST_API_VERSION@include_HEADERS) TODO @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst-libs/gst/video ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -137,7 +143,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -154,6 +159,9 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am \ + $(libgstvideo_@GST_API_VERSION@include_HEADERS) \ + $(noinst_HEADERS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -192,7 +200,8 @@ LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgstvideo_@GST_API_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am_libgstvideo_@GST_API_VERSION@_la_OBJECTS = \ libgstvideo_@GST_API_VERSION@_la-colorbalance.lo \ libgstvideo_@GST_API_VERSION@_la-colorbalancechannel.lo \ @@ -202,8 +211,11 @@ libgstvideo_@GST_API_VERSION@_la-video-format.lo \ libgstvideo_@GST_API_VERSION@_la-video-chroma.lo \ libgstvideo_@GST_API_VERSION@_la-video-color.lo \ + libgstvideo_@GST_API_VERSION@_la-video-converter.lo \ + libgstvideo_@GST_API_VERSION@_la-video-dither.lo \ libgstvideo_@GST_API_VERSION@_la-video-info.lo \ libgstvideo_@GST_API_VERSION@_la-video-frame.lo \ + libgstvideo_@GST_API_VERSION@_la-video-scaler.lo \ libgstvideo_@GST_API_VERSION@_la-video-tile.lo \ libgstvideo_@GST_API_VERSION@_la-gstvideosink.lo \ libgstvideo_@GST_API_VERSION@_la-gstvideofilter.lo \ @@ -215,8 +227,11 @@ libgstvideo_@GST_API_VERSION@_la-gstvideodecoder.lo \ libgstvideo_@GST_API_VERSION@_la-gstvideoencoder.lo \ libgstvideo_@GST_API_VERSION@_la-gstvideoutils.lo \ + libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo \ + libgstvideo_@GST_API_VERSION@_la-video-resampler.lo \ libgstvideo_@GST_API_VERSION@_la-video-blend.lo \ - libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo + libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo \ + libgstvideo_@GST_API_VERSION@_la-video-multiview.lo am__objects_1 = libgstvideo_@GST_API_VERSION@_la-video-enumtypes.lo am__objects_2 = am__objects_3 = libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo \ @@ -277,8 +292,30 @@ esac DATA = $(gir_DATA) $(typelibs_DATA) HEADERS = $(libgstvideo_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) + $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) \ + $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/gst-glib-gen.mak \ + $(top_srcdir)/common/orc.mak $(top_srcdir)/depcomp TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -339,6 +376,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -368,6 +407,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -395,7 +436,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -410,6 +450,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -499,13 +540,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -558,6 +598,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -583,8 +624,9 @@ cp_v_gen = $(cp_v_gen_$(V)) cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY)) cp_v_gen_0 = @echo " CP $@"; -glib_enum_headers = video.h video-format.h video-color.h video-info.h \ - colorbalance.h navigation.h video-chroma.h video-tile.h +glib_enum_headers = video.h video-format.h video-color.h video-info.h video-dither.h \ + colorbalance.h navigation.h video-chroma.h video-tile.h video-converter.h \ + video-resampler.h video-frame.h video-scaler.h glib_enum_define = GST_VIDEO glib_gen_prefix = gst_video @@ -602,8 +644,11 @@ video-format.c \ video-chroma.c \ video-color.c \ + video-converter.c \ + video-dither.c \ video-info.c \ video-frame.c \ + video-scaler.c \ video-tile.c \ gstvideosink.c \ gstvideofilter.c \ @@ -615,8 +660,11 @@ gstvideodecoder.c \ gstvideoencoder.c \ gstvideoutils.c \ + gstvideoutilsprivate.c \ + video-resampler.c \ video-blend.c \ - video-overlay-composition.c + video-overlay-composition.c \ + video-multiview.c nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES) libgstvideo_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/video @@ -629,8 +677,11 @@ video-format.h \ video-chroma.h \ video-color.h \ + video-converter.h \ + video-dither.h \ video-info.h \ video-frame.h \ + video-scaler.h \ video-tile.h \ gstvideosink.h \ gstvideofilter.h \ @@ -641,14 +692,17 @@ gstvideodecoder.h \ gstvideoencoder.h \ gstvideoutils.h \ + video-resampler.h \ video-blend.h \ - video-overlay-composition.h + video-overlay-composition.h \ + video-multiview.h nodist_libgstvideo_@GST_API_VERSION@include_HEADERS = $(built_headers) +noinst_HEADERS = gstvideoutilsprivate.h libgstvideo_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \ $(ORC_CFLAGS) -libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) +libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM) libgstvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstVideo-@GST_API_VERSION@.gir @@ -684,7 +738,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -693,7 +746,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/orc.mak $(top_srcdir)/common/gst-glib-gen.mak: +$(top_srcdir)/common/orc.mak $(top_srcdir)/common/gst-glib-gen.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -758,17 +811,23 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideopool.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideosink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-navigation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-chroma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-color.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-enumtypes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-format.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-frame.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-videoorientation.Plo@am__quote@ @@ -854,6 +913,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-color.lo `test -f 'video-color.c' || echo '$(srcdir)/'`video-color.c +libgstvideo_@GST_API_VERSION@_la-video-converter.lo: video-converter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-converter.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-converter.lo `test -f 'video-converter.c' || echo '$(srcdir)/'`video-converter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video-converter.c' object='libgstvideo_@GST_API_VERSION@_la-video-converter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-converter.lo `test -f 'video-converter.c' || echo '$(srcdir)/'`video-converter.c + +libgstvideo_@GST_API_VERSION@_la-video-dither.lo: video-dither.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-dither.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-dither.lo `test -f 'video-dither.c' || echo '$(srcdir)/'`video-dither.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video-dither.c' object='libgstvideo_@GST_API_VERSION@_la-video-dither.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-dither.lo `test -f 'video-dither.c' || echo '$(srcdir)/'`video-dither.c + libgstvideo_@GST_API_VERSION@_la-video-info.lo: video-info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-info.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-info.lo `test -f 'video-info.c' || echo '$(srcdir)/'`video-info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Plo @@ -868,6 +941,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-frame.lo `test -f 'video-frame.c' || echo '$(srcdir)/'`video-frame.c +libgstvideo_@GST_API_VERSION@_la-video-scaler.lo: video-scaler.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-scaler.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-scaler.lo `test -f 'video-scaler.c' || echo '$(srcdir)/'`video-scaler.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video-scaler.c' object='libgstvideo_@GST_API_VERSION@_la-video-scaler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-scaler.lo `test -f 'video-scaler.c' || echo '$(srcdir)/'`video-scaler.c + libgstvideo_@GST_API_VERSION@_la-video-tile.lo: video-tile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-tile.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-tile.lo `test -f 'video-tile.c' || echo '$(srcdir)/'`video-tile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Plo @@ -945,6 +1025,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutils.lo `test -f 'gstvideoutils.c' || echo '$(srcdir)/'`gstvideoutils.c +libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo: gstvideoutilsprivate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo `test -f 'gstvideoutilsprivate.c' || echo '$(srcdir)/'`gstvideoutilsprivate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstvideoutilsprivate.c' object='libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo `test -f 'gstvideoutilsprivate.c' || echo '$(srcdir)/'`gstvideoutilsprivate.c + +libgstvideo_@GST_API_VERSION@_la-video-resampler.lo: video-resampler.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-resampler.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-resampler.lo `test -f 'video-resampler.c' || echo '$(srcdir)/'`video-resampler.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video-resampler.c' object='libgstvideo_@GST_API_VERSION@_la-video-resampler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-resampler.lo `test -f 'video-resampler.c' || echo '$(srcdir)/'`video-resampler.c + libgstvideo_@GST_API_VERSION@_la-video-blend.lo: video-blend.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-blend.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-blend.lo `test -f 'video-blend.c' || echo '$(srcdir)/'`video-blend.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Plo @@ -959,6 +1053,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo `test -f 'video-overlay-composition.c' || echo '$(srcdir)/'`video-overlay-composition.c +libgstvideo_@GST_API_VERSION@_la-video-multiview.lo: video-multiview.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-multiview.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-multiview.lo `test -f 'video-multiview.c' || echo '$(srcdir)/'`video-multiview.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video-multiview.c' object='libgstvideo_@GST_API_VERSION@_la-video-multiview.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-multiview.lo `test -f 'video-multiview.c' || echo '$(srcdir)/'`video-multiview.c + libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo: tmp-orc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Plo @@ -1062,12 +1163,58 @@ @list='$(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstvideo_@GST_API_VERSION@includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libgstvideo_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir) -tags TAGS: -ctags CTAGS: +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am -cscope cscopelist: +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -1151,7 +1298,8 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags dvi: dvi-am @@ -1221,14 +1369,15 @@ .MAKE: all check install install-am install-strip -.PHONY: all all-am check check-am clean clean-generic \ +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \ - ctags-am dist-hook distclean distclean-compile \ - distclean-generic distclean-libtool distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-girDATA install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ + ctags ctags-am dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-girDATA install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES \ install-libgstvideo_@GST_API_VERSION@includeHEADERS \ install-man \ install-nodist_libgstvideo_@GST_API_VERSION@includeHEADERS \ @@ -1237,12 +1386,14 @@ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags-am uninstall uninstall-am uninstall-girDATA \ + tags tags-am uninstall uninstall-am uninstall-girDATA \ uninstall-libLTLIBRARIES \ uninstall-libgstvideo_@GST_API_VERSION@includeHEADERS \ uninstall-nodist_libgstvideo_@GST_API_VERSION@includeHEADERS \ uninstall-typelibsDATA +.PRECIOUS: Makefile + orc-update: tmp-orc.c $(ORC_SOURCE).h $(top_srcdir)/common/gst-indent tmp-orc.c @@ -1317,7 +1468,7 @@ @touch $@ @HAVE_INTROSPECTION_TRUE@GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VERSION@.la -@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ +@HAVE_INTROSPECTION_TRUE@ $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ @HAVE_INTROSPECTION_TRUE@ GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_SCANNER) -v --namespace GstVideo \ @HAVE_INTROSPECTION_TRUE@ --nsversion=@GST_API_VERSION@ \ @@ -1335,7 +1486,7 @@ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg gstreamer-base-@GST_API_VERSION@ \ @HAVE_INTROSPECTION_TRUE@ --pkg-export gstreamer-video-@GST_API_VERSION@ \ -@HAVE_INTROSPECTION_TRUE@ --add-init-section="gst_init(NULL,NULL);" \ +@HAVE_INTROSPECTION_TRUE@ --add-init-section="$(INTROSPECTION_INIT)" \ @HAVE_INTROSPECTION_TRUE@ --output $@ \ @HAVE_INTROSPECTION_TRUE@ $(gir_headers) \ @HAVE_INTROSPECTION_TRUE@ $(gir_sources) @@ -1349,22 +1500,6 @@ @HAVE_INTROSPECTION_TRUE@ --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ @HAVE_INTROSPECTION_TRUE@ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_API_VERSION@ \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstvideo_@GST_API_VERSION@_la_SOURCES) \ - $(nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) \ - -:LDFLAGS $(libgstvideo_@GST_API_VERSION@_la_LDFLAGS) \ - $(libgstvideo_@GST_API_VERSION@_la_LIBADD) \ - -ldl \ - -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \ - -:HEADERS $(libgstvideo_@GST_API_VERSION@include_HEADERS) \ - $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/navigation.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/navigation.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/navigation.c 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/navigation.c 2015-10-22 08:01:34.000000000 +0000 @@ -115,6 +115,8 @@ if (iface->send_event) { iface->send_event (navigation, structure); + } else { + gst_structure_free (structure); } } @@ -495,6 +497,8 @@ return GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED; else if (g_str_equal (m_type, "angles-changed")) return GST_NAVIGATION_MESSAGE_ANGLES_CHANGED; + else if (g_str_equal (m_type, "event")) + return GST_NAVIGATION_MESSAGE_EVENT; return GST_NAVIGATION_MESSAGE_INVALID; } @@ -546,7 +550,62 @@ if (active) { const GstStructure *s = gst_message_get_structure (message); - if (gst_structure_get_boolean (s, "active", active) == FALSE) + if (!gst_structure_get_boolean (s, "active", active)) + return FALSE; + } + + return TRUE; +} + +/** + * gst_navigation_message_new_event: + * @src: A #GstObject to set as source of the new message. + * @event: (transfer none): A navigation #GstEvent + * + * Creates a new #GstNavigation message with type + * #GST_NAVIGATION_MESSAGE_EVENT. + * + * Returns: The new #GstMessage. + * + * Since: 1.6 + */ +GstMessage * +gst_navigation_message_new_event (GstObject * src, GstEvent * event) +{ + GstStructure *s; + GstMessage *m; + + s = gst_structure_new (GST_NAVIGATION_MESSAGE_NAME, + "type", G_TYPE_STRING, "event", "event", GST_TYPE_EVENT, event, NULL); + + m = gst_message_new_custom (GST_MESSAGE_ELEMENT, src, s); + + return m; +} + +/** + * gst_navigation_message_parse_event: + * @message: A #GstMessage to inspect. + * @event: (out) (transfer full): a pointer to a #GstEvent to receive the + * contained navigation event. + * + * Parse a #GstNavigation message of type #GST_NAVIGATION_MESSAGE_EVENT + * and extract contained #GstEvent. The caller must unref the @event when done + * with it. + * + * Returns: %TRUE if the message could be successfully parsed. %FALSE if not. + * + * Since: 1.6 + */ +gboolean +gst_navigation_message_parse_event (GstMessage * message, GstEvent ** event) +{ + if (!GST_NAVIGATION_MESSAGE_HAS_TYPE (message, EVENT)) + return FALSE; + + if (event) { + const GstStructure *s = gst_message_get_structure (message); + if (!gst_structure_get (s, "event", GST_TYPE_EVENT, event, NULL)) return FALSE; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/navigation.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/navigation.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/navigation.h 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/navigation.h 2015-10-22 08:01:34.000000000 +0000 @@ -178,6 +178,8 @@ * @GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: Sent when display angles in a multi-angle * feature (such as a multiangle DVD) change - either angles have appeared or * disappeared. + * @GST_NAVIGATION_MESSAGE_EVENT: Sent when a navigation event was not handled + * by any element in the pipeline (Since 1.6) * * A set of notifications that may be received on the bus when navigation * related status changes. @@ -186,7 +188,8 @@ GST_NAVIGATION_MESSAGE_INVALID, GST_NAVIGATION_MESSAGE_MOUSE_OVER, GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED, - GST_NAVIGATION_MESSAGE_ANGLES_CHANGED + GST_NAVIGATION_MESSAGE_ANGLES_CHANGED, + GST_NAVIGATION_MESSAGE_EVENT } GstNavigationMessageType; GstNavigationMessageType gst_navigation_message_get_type (GstMessage *message); @@ -205,6 +208,10 @@ guint *cur_angle, guint *n_angles); +GstMessage * gst_navigation_message_new_event (GstObject *src, + GstEvent *event); +gboolean gst_navigation_message_parse_event (GstMessage *message, + GstEvent ** event); /* event parsing functions */ /** * GstNavigationEventType: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-blend.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-blend.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-blend.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-blend.c 2015-10-22 08:01:34.000000000 +0000 @@ -146,6 +146,22 @@ ret = v0 + (v1 * (255 - alpha)) / 255; \ } G_STMT_END +/** + * gst_video_blend_scale_linear_RGBA: + * @src: the #GstVideoInfo describing the video data in @src_buffer + * @src_buffer: the source buffer containing video pixels to scale + * @dest_height: the height in pixels to scale the video data in @src_buffer to + * @dest_width: the width in pixels to scale the video data in @src_buffer to + * @dest: (out): pointer to a #GstVideoInfo structure that will be filled in + * with the details for @dest_buffer + * @dest_buffer: (out): a pointer to a #GstBuffer variable, which will be + * set to a newly-allocated buffer containing the scaled pixels. + * + * Scales a buffer containing RGBA (or AYUV) video. This is an internal + * helper function which is used to scale subtitle overlays, and may be + * deprecated in the near future. Use #GstVideoScaler to scale video buffers + * instead. + */ /* returns newly-allocated buffer, which caller must unref */ void gst_video_blend_scale_linear_RGBA (GstVideoInfo * src, GstBuffer * src_buffer, @@ -232,7 +248,8 @@ g_free (tmpbuf); } -/* video_blend: +/** + * gst_video_blend: * @dest: The #GstVideoFrame where to blend @src in * @src: the #GstVideoFrame that we want to blend into * @x: The x offset in pixel where the @src image should be blended @@ -246,8 +263,8 @@ gst_video_blend (GstVideoFrame * dest, GstVideoFrame * src, gint x, gint y, gfloat global_alpha) { - guint i, j, global_alpha_val, src_width, src_height, dest_width, dest_height; - gint xoff; + gint i, j, global_alpha_val, src_width, src_height, dest_width, dest_height; + gint src_xoff = 0, src_yoff = 0; guint8 *tmpdestline = NULL, *tmpsrcline = NULL; gboolean src_premultiplied_alpha, dest_premultiplied_alpha; void (*matrix) (guint8 * tmpline, guint width); @@ -275,6 +292,15 @@ ensure_debug_category (); + GST_LOG ("blend src %dx%d onto dest %dx%d @ %d,%d", src_width, src_height, + dest_width, dest_height, x, y); + + /* In case overlay is completely outside the video, dont render */ + if (x + src_width <= 0 || y + src_height <= 0 + || x >= dest_width || y >= dest_height) { + goto nothing_to_do; + } + dinfo = gst_video_format_get_info (GST_VIDEO_FRAME_FORMAT (dest)); sinfo = gst_video_format_get_info (GST_VIDEO_FRAME_FORMAT (src)); @@ -293,7 +319,7 @@ goto unpack_format_not_supported; tmpdestline = g_malloc (sizeof (guint8) * (dest_width + 8) * 4); - tmpsrcline = g_malloc (sizeof (guint8) * (dest_width + 8) * 4); + tmpsrcline = g_malloc (sizeof (guint8) * (src_width + 8) * 4); matrix = matrix_identity; if (GST_VIDEO_INFO_IS_RGB (&src->info) != GST_VIDEO_INFO_IS_RGB (&dest->info)) { @@ -309,21 +335,24 @@ } } - xoff = 0; + /* If we're here we know that the overlay image fully or + * partially overlaps with the video frame */ - /* adjust src pointers for negative sizes */ + /* adjust src image for negative offsets */ if (x < 0) { - src_width -= -x; + src_xoff = -x; + src_width -= src_xoff; x = 0; - xoff = -x; } if (y < 0) { - src_height -= -y; + src_yoff = -y; + src_height -= src_yoff; y = 0; } - /* adjust width/height if the src is bigger than dest */ + /* adjust width/height to render (i.e. clip source image) if the source + * image extends beyond the right or bottom border of the video surface */ if (x + src_width > dest_width) src_width = dest_width - x; @@ -331,17 +360,18 @@ src_height = dest_height - y; /* Mainloop doing the needed conversions, and blending */ - for (i = y; i < y + src_height; i++) { + for (i = y; i < y + src_height; i++, src_yoff++) { dinfo->unpack_func (dinfo, 0, tmpdestline, dest->data, dest->info.stride, 0, i, dest_width); sinfo->unpack_func (sinfo, 0, tmpsrcline, src->data, src->info.stride, - xoff, i - y, src_width - xoff); - - matrix (tmpsrcline, src_width); + src_xoff, src_yoff, src_width); + /* FIXME: use the x parameter of the unpack func once implemented */ tmpdestline += 4 * x; + matrix (tmpsrcline, src_width); + /* Here dest and src are both either in AYUV or ARGB * TODO: Make the orc version working properly*/ #define BLENDLOOP(blender,alpha_val,alpha_scale) \ @@ -381,6 +411,7 @@ #undef BLENDLOOP + /* undo previous pointer adjustments to pass right pointer to g_free */ tmpdestline -= 4 * x; /* FIXME @@ -411,4 +442,10 @@ gst_video_format_to_string (dinfo->unpack_format)); return FALSE; } +nothing_to_do: + { + GST_LOG + ("Overlay completely outside the video surface, hence not rendering"); + return TRUE; + } } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video.c 2015-10-22 08:01:34.000000000 +0000 @@ -43,8 +43,8 @@ /** * gst_video_calculate_display_ratio: - * @dar_n: Numerator of the calculated display_ratio - * @dar_d: Denominator of the calculated display_ratio + * @dar_n: (out): Numerator of the calculated display_ratio + * @dar_d: (out): Denominator of the calculated display_ratio * @video_width: Width of the video frame in pixels * @video_height: Height of the video frame in pixels * @video_par_n: Numerator of the pixel aspect ratio of the input video. @@ -99,6 +99,95 @@ } /** + * gst_video_guess_framerate: + * @duration: Nominal duration of one frame + * @dest_n: (out) (allow-none): Numerator of the calculated framerate + * @dest_d: (out) (allow-none): Denominator of the calculated framerate + * + * Given the nominal duration of one video frame, + * this function will check some standard framerates for + * a close match (within 0.1%) and return one if possible, + * + * It will calculate an arbitrary framerate if no close + * match was found, and return %FALSE. + * + * It returns %FALSE if a duration of 0 is passed. + * + * Returns: %TRUE if a close "standard" framerate was + * recognised, and %FALSE otherwise. + * + * Since: 1.6 + */ +gboolean +gst_video_guess_framerate (GstClockTime duration, gint * dest_n, gint * dest_d) +{ + const int common_den[] = { 1, 2, 3, 4, 1001 }; + int best_n, best_d, gcd; + guint64 best_error = G_MAXUINT64; + guint64 a; + int i; + + if (G_UNLIKELY (duration == 0)) + return FALSE; + + /* Use a limited precision conversion by default for more sensible results, + * unless the frame duration is absurdly small (high speed cameras?) */ + if (duration > 100000) { + best_n = 10000; + best_d = duration / 100000; + } else { + best_n = GST_SECOND; + best_d = duration; + } + + for (i = 0; i < G_N_ELEMENTS (common_den); i++) { + gint d = common_den[i]; + gint n = gst_util_uint64_scale_round (d, GST_SECOND, duration); + + /* For NTSC framerates, round to the nearest 1000 fps */ + if (d == 1001) { + n += 500; + n -= (n % 1000); + } + + if (n > 0) { + /* See what duration the given framerate should be */ + a = gst_util_uint64_scale_int (GST_SECOND, d, n); + /* Compute absolute error */ + a = (a < duration) ? (duration - a) : (a - duration); + if (a < 2) { + /* Really precise - take this option */ + if (dest_n) + *dest_n = n; + if (dest_d) + *dest_d = d; + return TRUE; + } + /* If within 0.1%, remember this denominator */ + if (a * 1000 < duration && a < best_error) { + best_error = a; + best_n = n; + best_d = d; + } + } + } + + /* set results */ + gcd = gst_util_greatest_common_divisor (best_n, best_d); + if (gcd) { + best_n /= gcd; + best_d /= gcd; + } + if (dest_n) + *dest_n = best_n; + if (dest_d) + *dest_d = best_d; + + return (best_error != G_MAXUINT64); +} + + +/** * gst_video_alignment_reset: * @align: a #GstVideoAlignment * diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-chroma.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-chroma.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-chroma.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-chroma.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,8 +24,44 @@ #include #include +#include "video-orc.h" #include "video-format.h" + +/** + * SECTION:gstvideochroma + * @short_description: Functions and utility object for operating on chroma video planes + * + * The functions gst_video_chroma_from_string() and gst_video_chroma_to_string() convert + * between #GstVideoChromaSite and string descriptions. + * + * #GstVideoChromaResample is a utility object for resampling chroma planes + * and converting between different chroma sampling sitings. + * + */ + +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-chroma", 0, + "video-chroma object"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + typedef struct { const gchar *name; @@ -105,7 +141,7 @@ #define PB3(i) (l3[3 + 4 * (i)]) #define FILT_1_1(a,b) ((a) + (b) + 1) >> 1 -#define FILT_1_1_1_1(a,b,c,d) ((a) + (b) + (c) + (d) + 2) >> 2 +#define FILT_1_3_3_1(a,b,c,d) ((a) + 3*((b)+(c)) + (d) + 4) >> 3 #define FILT_3_1(a,b) (3*(a) + (b) + 2) >> 2 #define FILT_1_3(a,b) ((a) + 3*(b) + 2) >> 2 @@ -119,7 +155,7 @@ #define FILT_10_3_2_1(a,b,c,d) (10*(a) + 3*(b) + 2*(c) + (d) + 8) >> 16 #define FILT_1_2_3_10(a,b,c,d) ((a) + 2*(b) + 3*(c) + 10*(d) + 8) >> 16 -#define FILT_1_2_3_4_3_2_1(a,b,c,d,e,f,g) ((a) + 2*(b) + 3*(c) + 4*(d) + 3*(e) + 2*(f) + (g) + 8) >> 16 +#define FILT_1_2_3_4_3_2_1(a,b,c,d,e,f,g) ((a) + 2*((b)+(f)) + 3*((c)+(e)) + 4*(d) + (g) + 8) >> 16 /* 2x horizontal upsampling without cositing * @@ -131,9 +167,9 @@ * x x * a b */ -#define MAKE_UPSAMPLE_H2(type) \ +#define MAKE_UPSAMPLE_H2(name,type) \ static void \ -video_chroma_up_h2_##type (GstVideoChromaResample *resample, \ +video_chroma_up_h2_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -163,16 +199,13 @@ * b x x x * O--O--O- <---- b */ -#define MAKE_UPSAMPLE_V2(type) \ +#define MAKE_UPSAMPLE_V2(name,type) \ static void \ -video_chroma_up_v2_##type (GstVideoChromaResample *resample, \ +video_chroma_up_v2_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ - gint i; \ type *l0 = lines[0]; \ type *l1 = lines[1]; \ - type tr0, tr1; \ - type tb0, tb1; \ \ if (resample->h_resample) { \ resample->h_resample (resample, l0, width); \ @@ -180,15 +213,7 @@ resample->h_resample (resample, l1, width); \ } \ if (l0 != l1) { \ - for (i = 0; i < width; i++) { \ - tr0 = PR0(i), tr1 = PR1(i); \ - tb0 = PB0(i), tb1 = PB1(i); \ - \ - PR0(i) = FILT_3_1 (tr0, tr1); \ - PB0(i) = FILT_3_1 (tb0, tb1); \ - PR1(i) = FILT_1_3 (tr0, tr1); \ - PB1(i) = FILT_1_3 (tb0, tb1); \ - } \ + video_orc_chroma_up_v2_##name (l0, l1, l0, l1, width); \ } \ } /* 2x vertical upsampling interlaced without cositing @@ -208,9 +233,9 @@ * d x x x * --------------O--O--O- */ -#define MAKE_UPSAMPLE_VI2(type) \ +#define MAKE_UPSAMPLE_VI2(name,type) \ static void \ -video_chroma_up_vi2_##type (GstVideoChromaResample *resample, \ +video_chroma_up_vi2_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ gint i; \ @@ -259,10 +284,20 @@ * x x x x * a b c d */ -#define MAKE_DOWNSAMPLE_H2(type) \ +#define MAKE_DOWNSAMPLE_H2_ORC(name,type) \ static void \ -video_chroma_down_h2_##type (GstVideoChromaResample *resample, \ - gpointer pixels, gint width) \ +video_chroma_down_h2_##name (GstVideoChromaResample *resample, \ + gpointer pixels, gint width) \ +{ \ + type *p = pixels; \ + \ + video_orc_chroma_down_h2_##name (p, p, width / 2); \ +} + +#define MAKE_DOWNSAMPLE_H2(name,type) \ +static void \ +video_chroma_down_h2_##name (GstVideoChromaResample *resample, \ + gpointer pixels, gint width) \ { \ type *p = pixels; \ gint i; \ @@ -284,29 +319,19 @@ * O O O * d x--x--x- */ -#define MAKE_DOWNSAMPLE_V2(type) \ +#define MAKE_DOWNSAMPLE_V2(name,type) \ static void \ -video_chroma_down_v2_##type (GstVideoChromaResample *resample, \ +video_chroma_down_v2_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ - gint i; \ type *l0 = lines[0]; \ type *l1 = lines[1]; \ \ - if (resample->h_resample) { \ - resample->h_resample (resample, l0, width); \ - if (l0 != l1) \ - resample->h_resample (resample, l1, width); \ - } \ - if (l0 != l1) { \ - for (i = 0; i < width; i++) { \ - type tr0 = PR0(i), tr1 = PR1(i); \ - type tb0 = PB0(i), tb1 = PB1(i); \ + if (l0 != l1) \ + video_orc_chroma_down_v2_##name (l0, l0, l1, width); \ \ - PR0(i) = FILT_1_1 (tr0, tr1); \ - PB0(i) = FILT_1_1 (tb0, tb1); \ - } \ - } \ + if (resample->h_resample) \ + resample->h_resample (resample, l0, width); \ } /* 2x vertical downsampling interlaced without cositing * @@ -319,9 +344,9 @@ * O O O <--- * d --------------x--x--x- */ -#define MAKE_DOWNSAMPLE_VI2(type) \ +#define MAKE_DOWNSAMPLE_VI2(name,type) \ static void \ -video_chroma_down_vi2_##type (GstVideoChromaResample *resample, \ +video_chroma_down_vi2_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -329,18 +354,18 @@ resample->h_resample (resample, lines[0], width); \ } -MAKE_UPSAMPLE_H2 (guint16); -MAKE_UPSAMPLE_H2 (guint8); -MAKE_UPSAMPLE_V2 (guint16); -MAKE_UPSAMPLE_V2 (guint8); -MAKE_UPSAMPLE_VI2 (guint16); -MAKE_UPSAMPLE_VI2 (guint8); -MAKE_DOWNSAMPLE_H2 (guint16); -MAKE_DOWNSAMPLE_H2 (guint8); -MAKE_DOWNSAMPLE_V2 (guint16); -MAKE_DOWNSAMPLE_V2 (guint8); -MAKE_DOWNSAMPLE_VI2 (guint16); -MAKE_DOWNSAMPLE_VI2 (guint8); +MAKE_UPSAMPLE_H2 (u16, guint16); +MAKE_UPSAMPLE_H2 (u8, guint8); +MAKE_UPSAMPLE_V2 (u16, guint16); +MAKE_UPSAMPLE_V2 (u8, guint8); +MAKE_UPSAMPLE_VI2 (u16, guint16); +MAKE_UPSAMPLE_VI2 (u8, guint8); +MAKE_DOWNSAMPLE_H2 (u16, guint16); +MAKE_DOWNSAMPLE_H2_ORC (u8, guint8); +MAKE_DOWNSAMPLE_V2 (u16, guint16); +MAKE_DOWNSAMPLE_V2 (u8, guint8); +MAKE_DOWNSAMPLE_VI2 (u16, guint16); +MAKE_DOWNSAMPLE_VI2 (u8, guint8); /* 4x horizontal upsampling without cositing * @@ -353,9 +378,9 @@ * x x * a b */ -#define MAKE_UPSAMPLE_H4(type) \ +#define MAKE_UPSAMPLE_H4(name,type) \ static void \ -video_chroma_up_h4_##type (GstVideoChromaResample *resample, \ +video_chroma_up_h4_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -393,9 +418,9 @@ * O--O--O- * O--O--O- */ -#define MAKE_UPSAMPLE_V4(type) \ +#define MAKE_UPSAMPLE_V4(name,type) \ static void \ -video_chroma_up_v4_##type (GstVideoChromaResample *resample, \ +video_chroma_up_v4_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ gint i; \ @@ -435,9 +460,9 @@ /* 4x vertical upsampling interlaced without cositing * */ -#define MAKE_UPSAMPLE_VI4(type) \ +#define MAKE_UPSAMPLE_VI4(name,type) \ static void \ -video_chroma_up_vi4_##type (GstVideoChromaResample *resample, \ +video_chroma_up_vi4_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -448,16 +473,16 @@ /* 4x horizontal downsampling without cositing * - * +------ (a + b + c + d + 2) >> 2 + * +------ (a + 3*b + 3*c + d + 4) >> 3 * | * v * ---O-------O--- * x x x x x x x x * a b c d e f g h */ -#define MAKE_DOWNSAMPLE_H4(type) \ +#define MAKE_DOWNSAMPLE_H4(name,type) \ static void \ -video_chroma_down_h4_##type (GstVideoChromaResample *resample, \ +video_chroma_down_h4_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -467,8 +492,8 @@ type tr0 = PR(i), tr1 = PR(i+1), tr2 = PR(i+2), tr3 = PR(i+3); \ type tb0 = PB(i), tb1 = PB(i+1), tb2 = PB(i+2), tb3 = PB(i+3); \ \ - PR(i) = FILT_1_1_1_1 (tr0, tr1, tr2, tr3); \ - PB(i) = FILT_1_1_1_1 (tb0, tb1, tb2, tb3); \ + PR(i) = FILT_1_3_3_1 (tr0, tr1, tr2, tr3); \ + PB(i) = FILT_1_3_3_1 (tb0, tb1, tb2, tb3); \ } \ } @@ -476,7 +501,7 @@ * * a x--x--x- * b x--x--x- - * O O O <---- (a + b + c + d + 2) >> 2 + * O O O <---- (a + 3*b + 3*c + d + 4) >> 4 * c x--x--x- * d x--x--x- * e x--x--x- @@ -485,42 +510,27 @@ * g x--x--x- * h x--x--x- */ -#define MAKE_DOWNSAMPLE_V4(type) \ +#define MAKE_DOWNSAMPLE_V4(name,type) \ static void \ -video_chroma_down_v4_##type (GstVideoChromaResample *resample, \ +video_chroma_down_v4_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ - gint i; \ type *l0 = lines[0]; \ type *l1 = lines[1]; \ type *l2 = lines[2]; \ type *l3 = lines[3]; \ \ - if (resample->h_resample) { \ - resample->h_resample (resample, l0, width); \ - if (l0 != l1) \ - resample->h_resample (resample, l1, width); \ - if (l1 != l2) \ - resample->h_resample (resample, l2, width); \ - if (l2 != l3) \ - resample->h_resample (resample, l3, width); \ - } \ - for (i = 0; i < width; i++) { \ - type tr0 = PR0(i), tr1 = PR1(i); \ - type tr2 = PR2(i), tr3 = PR3(i); \ - type tb0 = PB0(i), tb1 = PB1(i); \ - type tb2 = PB2(i), tb3 = PB3(i); \ + video_orc_chroma_down_v4_##name(l0, l0, l1, l2, l3, width); \ \ - PR0(i) = FILT_1_1_1_1 (tr0, tr1, tr2, tr3); \ - PB0(i) = FILT_1_1_1_1 (tb0, tb1, tb2, tb3); \ - } \ + if (resample->h_resample) \ + resample->h_resample (resample, l0, width); \ } /* 4x vertical downsampling interlaced without cositing * */ -#define MAKE_DOWNSAMPLE_VI4(type) \ +#define MAKE_DOWNSAMPLE_VI4(name,type) \ static void \ -video_chroma_down_vi4_##type (GstVideoChromaResample *resample, \ +video_chroma_down_vi4_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -529,18 +539,18 @@ } \ } -MAKE_UPSAMPLE_H4 (guint16); -MAKE_UPSAMPLE_H4 (guint8); -MAKE_UPSAMPLE_V4 (guint16); -MAKE_UPSAMPLE_V4 (guint8); -MAKE_UPSAMPLE_VI4 (guint16); -MAKE_UPSAMPLE_VI4 (guint8); -MAKE_DOWNSAMPLE_H4 (guint16); -MAKE_DOWNSAMPLE_H4 (guint8); -MAKE_DOWNSAMPLE_V4 (guint16); -MAKE_DOWNSAMPLE_V4 (guint8); -MAKE_DOWNSAMPLE_VI4 (guint16); -MAKE_DOWNSAMPLE_VI4 (guint8); +MAKE_UPSAMPLE_H4 (u16, guint16); +MAKE_UPSAMPLE_H4 (u8, guint8); +MAKE_UPSAMPLE_V4 (u16, guint16); +MAKE_UPSAMPLE_V4 (u8, guint8); +MAKE_UPSAMPLE_VI4 (u16, guint16); +MAKE_UPSAMPLE_VI4 (u8, guint8); +MAKE_DOWNSAMPLE_H4 (u16, guint16); +MAKE_DOWNSAMPLE_H4 (u8, guint8); +MAKE_DOWNSAMPLE_V4 (u16, guint16); +MAKE_DOWNSAMPLE_V4 (u8, guint8); +MAKE_DOWNSAMPLE_VI4 (u16, guint16); +MAKE_DOWNSAMPLE_VI4 (u8, guint8); /* 2x horizontal upsampling with cositing * @@ -551,9 +561,19 @@ * x x * a b */ -#define MAKE_UPSAMPLE_H2_CS(type) \ +#define MAKE_UPSAMPLE_H2_CS_ORC(name,type) \ static void \ -video_chroma_up_h2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_h2_cs_##name (GstVideoChromaResample *resample, \ + gpointer pixels, gint width) \ +{ \ + type *p = pixels; \ + /* ORC version is slower */ \ + video_orc_chroma_up_h2_cs_##name (p, p, p, width-1); \ +} + +#define MAKE_UPSAMPLE_H2_CS(name,type) \ +static void \ +video_chroma_up_h2_cs_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -571,9 +591,9 @@ * b x O--O--O- * O--O--O- */ -#define MAKE_UPSAMPLE_V2_CS(type) \ +#define MAKE_UPSAMPLE_V2_CS(name,type) \ static void \ -video_chroma_up_v2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_v2_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -584,9 +604,9 @@ /* 2x vertical upsampling interlaced with cositing * */ -#define MAKE_UPSAMPLE_VI2_CS(type) \ +#define MAKE_UPSAMPLE_VI2_CS(name,type) \ static void \ -video_chroma_up_vi2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_vi2_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -604,9 +624,9 @@ * x x x x x x * a b c d e f */ -#define MAKE_DOWNSAMPLE_H2_CS(type) \ +#define MAKE_DOWNSAMPLE_H2_CS(name,type) \ static void \ -video_chroma_down_h2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_h2_cs_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -636,9 +656,9 @@ * e x O--O--O- * f x -------- */ -#define MAKE_DOWNSAMPLE_V2_CS(type) \ +#define MAKE_DOWNSAMPLE_V2_CS(name,type) \ static void \ -video_chroma_down_v2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_v2_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -649,9 +669,9 @@ /* 2x vertical downsampling interlaced with cositing * */ -#define MAKE_DOWNSAMPLE_VI2_CS(type) \ +#define MAKE_DOWNSAMPLE_VI2_CS(name,type) \ static void \ -video_chroma_down_vi2_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_vi2_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -660,18 +680,18 @@ } \ } -MAKE_UPSAMPLE_H2_CS (guint16); -MAKE_UPSAMPLE_H2_CS (guint8); -MAKE_UPSAMPLE_V2_CS (guint16); -MAKE_UPSAMPLE_V2_CS (guint8); -MAKE_UPSAMPLE_VI2_CS (guint16); -MAKE_UPSAMPLE_VI2_CS (guint8); -MAKE_DOWNSAMPLE_H2_CS (guint16); -MAKE_DOWNSAMPLE_H2_CS (guint8); -MAKE_DOWNSAMPLE_V2_CS (guint16); -MAKE_DOWNSAMPLE_V2_CS (guint8); -MAKE_DOWNSAMPLE_VI2_CS (guint16); -MAKE_DOWNSAMPLE_VI2_CS (guint8); +MAKE_UPSAMPLE_H2_CS (u16, guint16); +MAKE_UPSAMPLE_H2_CS (u8, guint8); +MAKE_UPSAMPLE_V2_CS (u16, guint16); +MAKE_UPSAMPLE_V2_CS (u8, guint8); +MAKE_UPSAMPLE_VI2_CS (u16, guint16); +MAKE_UPSAMPLE_VI2_CS (u8, guint8); +MAKE_DOWNSAMPLE_H2_CS (u16, guint16); +MAKE_DOWNSAMPLE_H2_CS (u8, guint8); +MAKE_DOWNSAMPLE_V2_CS (u16, guint16); +MAKE_DOWNSAMPLE_V2_CS (u8, guint8); +MAKE_DOWNSAMPLE_VI2_CS (u16, guint16); +MAKE_DOWNSAMPLE_VI2_CS (u8, guint8); /* 4x horizontal upsampling with cositing * @@ -683,9 +703,9 @@ * x x * a b */ -#define MAKE_UPSAMPLE_H4_CS(type) \ +#define MAKE_UPSAMPLE_H4_CS(name,type) \ static void \ -video_chroma_up_h4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_h4_cs_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -712,9 +732,9 @@ * b x O--O--O- * O--O--O- */ -#define MAKE_UPSAMPLE_V4_CS(type) \ +#define MAKE_UPSAMPLE_V4_CS(name,type) \ static void \ -video_chroma_up_v4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_v4_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -725,9 +745,9 @@ /* 4x vertical upsampling interlaced with cositing * */ -#define MAKE_UPSAMPLE_VI4_CS(type) \ +#define MAKE_UPSAMPLE_VI4_CS(name,type) \ static void \ -video_chroma_up_vi4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_up_vi4_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -744,9 +764,9 @@ * x x x x x x x x * a b c d e f g h */ -#define MAKE_DOWNSAMPLE_H4_CS(type) \ +#define MAKE_DOWNSAMPLE_H4_CS(name,type) \ static void \ -video_chroma_down_h4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_h4_cs_##name (GstVideoChromaResample *resample, \ gpointer pixels, gint width) \ { \ type *p = pixels; \ @@ -780,9 +800,9 @@ * i x O--O--O- * j x -------- */ -#define MAKE_DOWNSAMPLE_V4_CS(type) \ +#define MAKE_DOWNSAMPLE_V4_CS(name,type) \ static void \ -video_chroma_down_v4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_v4_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -793,9 +813,9 @@ /* 4x vertical downsampling interlaced with cositing * */ -#define MAKE_DOWNSAMPLE_VI4_CS(type) \ +#define MAKE_DOWNSAMPLE_VI4_CS(name,type) \ static void \ -video_chroma_down_vi4_cs_##type (GstVideoChromaResample *resample, \ +video_chroma_down_vi4_cs_##name (GstVideoChromaResample *resample, \ gpointer lines[], gint width) \ { \ /* FIXME */ \ @@ -804,18 +824,18 @@ } \ } -MAKE_UPSAMPLE_H4_CS (guint16); -MAKE_UPSAMPLE_H4_CS (guint8); -MAKE_UPSAMPLE_V4_CS (guint16); -MAKE_UPSAMPLE_V4_CS (guint8); -MAKE_UPSAMPLE_VI4_CS (guint16); -MAKE_UPSAMPLE_VI4_CS (guint8); -MAKE_DOWNSAMPLE_H4_CS (guint16); -MAKE_DOWNSAMPLE_H4_CS (guint8); -MAKE_DOWNSAMPLE_V4_CS (guint16); -MAKE_DOWNSAMPLE_V4_CS (guint8); -MAKE_DOWNSAMPLE_VI4_CS (guint16); -MAKE_DOWNSAMPLE_VI4_CS (guint8); +MAKE_UPSAMPLE_H4_CS (u16, guint16); +MAKE_UPSAMPLE_H4_CS (u8, guint8); +MAKE_UPSAMPLE_V4_CS (u16, guint16); +MAKE_UPSAMPLE_V4_CS (u8, guint8); +MAKE_UPSAMPLE_VI4_CS (u16, guint16); +MAKE_UPSAMPLE_VI4_CS (u8, guint8); +MAKE_DOWNSAMPLE_H4_CS (u16, guint16); +MAKE_DOWNSAMPLE_H4_CS (u8, guint8); +MAKE_DOWNSAMPLE_V4_CS (u16, guint16); +MAKE_DOWNSAMPLE_V4_CS (u8, guint8); +MAKE_DOWNSAMPLE_VI4_CS (u16, guint16); +MAKE_DOWNSAMPLE_VI4_CS (u8, guint8); typedef struct { @@ -825,22 +845,22 @@ static const HorizResampler h_resamplers[] = { {NULL}, - {video_chroma_up_h2_guint8}, - {video_chroma_down_h2_guint8}, - {video_chroma_up_h2_guint16}, - {video_chroma_down_h2_guint16}, - {video_chroma_up_h2_cs_guint8}, - {video_chroma_down_h2_cs_guint8}, - {video_chroma_up_h2_cs_guint16}, - {video_chroma_down_h2_cs_guint16}, - {video_chroma_up_h4_guint8}, - {video_chroma_down_h4_guint8}, - {video_chroma_up_h4_guint16}, - {video_chroma_down_h4_guint16}, - {video_chroma_up_h4_cs_guint8}, - {video_chroma_down_h4_cs_guint8}, - {video_chroma_up_h4_cs_guint16}, - {video_chroma_down_h4_cs_guint16} + {video_chroma_up_h2_u8}, + {video_chroma_down_h2_u8}, + {video_chroma_up_h2_u16}, + {video_chroma_down_h2_u16}, + {video_chroma_up_h2_cs_u8}, + {video_chroma_down_h2_cs_u8}, + {video_chroma_up_h2_cs_u16}, + {video_chroma_down_h2_cs_u16}, + {video_chroma_up_h4_u8}, + {video_chroma_down_h4_u8}, + {video_chroma_up_h4_u16}, + {video_chroma_down_h4_u16}, + {video_chroma_up_h4_cs_u8}, + {video_chroma_down_h4_cs_u8}, + {video_chroma_up_h4_cs_u16}, + {video_chroma_down_h4_cs_u16} }; typedef struct @@ -861,46 +881,46 @@ static const VertResampler v_resamplers[] = { {video_chroma_none, 1, 0}, - {video_chroma_up_v2_guint8, 2, -1}, - {video_chroma_down_v2_guint8, 2, 0}, + {video_chroma_up_v2_u8, 2, -1}, + {video_chroma_down_v2_u8, 2, 0}, /* 16 bits */ - {video_chroma_up_v2_guint16, 2, -1}, - {video_chroma_down_v2_guint16, 2, 0}, + {video_chroma_up_v2_u16, 2, -1}, + {video_chroma_down_v2_u16, 2, 0}, /* cosited */ - {video_chroma_up_v2_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_v2_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_v2_cs_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_v2_cs_guint16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_v2_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_v2_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_v2_cs_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_v2_cs_u16, 1, 0}, /* IMPLEMENT ME */ /* 4x */ - {video_chroma_up_v4_guint8, 4, -2}, - {video_chroma_down_v4_guint8, 4, 0}, - {video_chroma_up_v4_guint16, 4, -2}, - {video_chroma_down_v4_guint16, 4, 0}, - {video_chroma_up_v4_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_v4_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_v4_cs_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_v4_cs_guint16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_v4_u8, 4, -2}, + {video_chroma_down_v4_u8, 4, 0}, + {video_chroma_up_v4_u16, 4, -2}, + {video_chroma_down_v4_u16, 4, 0}, + {video_chroma_up_v4_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_v4_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_v4_cs_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_v4_cs_u16, 1, 0}, /* IMPLEMENT ME */ /* interlaced */ - {video_chroma_up_vi2_guint8, 4, -2}, - {video_chroma_down_vi2_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi2_guint16, 4, -2}, - {video_chroma_down_vi2_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi2_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi2_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi2_cs_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi2_cs_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi4_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi4_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi4_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi4_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi4_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi4_cs_guint8, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_up_vi4_cs_guint16, 1, 0}, /* IMPLEMENT ME */ - {video_chroma_down_vi4_cs_guint16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi2_u8, 4, -2}, + {video_chroma_down_vi2_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi2_u16, 4, -2}, + {video_chroma_down_vi2_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi2_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi2_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi2_cs_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi2_cs_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi4_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi4_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi4_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi4_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi4_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi4_cs_u8, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_up_vi4_cs_u16, 1, 0}, /* IMPLEMENT ME */ + {video_chroma_down_vi4_cs_u16, 1, 0}, /* IMPLEMENT ME */ }; /** - * gst_video_chroma_resample_new: + * gst_video_chroma_resample_new: (skip) * @method: a #GstVideoChromaMethod * @site: a #GstVideoChromaSite * @flags: #GstVideoChromaFlags @@ -909,7 +929,7 @@ * @v_factor: vertical resampling factor * * Create a new resampler object for the given parameters. When @h_factor or - * @v_factoris > 0, upsampling will be used, otherwise subsampling is + * @v_factor is > 0, upsampling will be used, otherwise subsampling is * performed. * * Returns: a new #GstVideoChromaResample that should be freed with @@ -941,6 +961,9 @@ h_index = ((ABS (h_factor) - 1) * 8) + (cosite ? 4 : 0) + (bits == 16 ? 2 : 0) + (h_factor < 0 ? 1 : 0) + 1; + + GST_DEBUG ("h_resample %d, factor %d, cosite %d", h_index, h_factor, cosite); + cosite = (site & GST_VIDEO_CHROMA_SITE_V_COSITED ? 1 : 0); if (v_factor == 0) v_index = 0; @@ -949,6 +972,11 @@ ((ABS (v_factor) - 1) * 8) + (cosite ? 4 : 0) + (bits == 16 ? 2 : 0) + (v_factor < 0 ? 1 : 0) + 1; + if (flags & GST_VIDEO_CHROMA_FLAG_INTERLACED) + v_index += 16; + + GST_DEBUG ("v_resample %d, factor %d, cosite %d", v_index, v_factor, cosite); + result = g_slice_new (GstVideoChromaResample); result->method = method; result->site = site; @@ -961,8 +989,8 @@ result->n_lines = v_resamplers[v_index].n_lines; result->offset = v_resamplers[v_index].offset; - GST_DEBUG ("select resample %p %d, factor %d, " - "cosite %d, bits %d", result, h_index, h_factor, cosite, bits); + GST_DEBUG ("resample %p, bits %d, n_lines %u, offset %d", result, bits, + result->n_lines, result->offset); return result; } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-color.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-color.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-color.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-color.c 2015-10-22 08:01:34.000000000 +0000 @@ -25,9 +25,32 @@ #include #include +#include #include "video-color.h" +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-color", 0, + "video-color object"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + typedef struct { const gchar *name; @@ -45,12 +68,14 @@ #define DEFAULT_RGB 3 #define DEFAULT_GRAY 4 #define DEFAULT_UNKNOWN 5 +#define DEFAULT_YUV_UHD 6 static const ColorimetryInfo colorimetry[] = { - MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, BT470M), + MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, SMPTE170M), MAKE_COLORIMETRY (BT709, _16_235, BT709, BT709, BT709), MAKE_COLORIMETRY (SMPTE240M, _16_235, SMPTE240M, SMPTE240M, SMPTE240M), - MAKE_COLORIMETRY (NONAME, _0_255, RGB, UNKNOWN, UNKNOWN), + MAKE_COLORIMETRY (SRGB, _0_255, RGB, SRGB, BT709), + MAKE_COLORIMETRY (BT2020, _16_235, BT2020, BT2020_12, BT2020), MAKE_COLORIMETRY (NONAME, _0_255, BT601, UNKNOWN, UNKNOWN), MAKE_COLORIMETRY (NONAME, _UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN), }; @@ -67,10 +92,12 @@ return NULL; } -#define IS_EQUAL(ci,i) (((ci)->color.range == (i)->range) && \ - ((ci)->color.matrix == (i)->matrix) && \ - ((ci)->color.transfer == (i)->transfer) && \ - ((ci)->color.primaries == (i)->primaries)) +#define CI_IS_EQUAL(ci,i) (((ci)->range == (i)->range) && \ + ((ci)->matrix == (i)->matrix) && \ + ((ci)->transfer == (i)->transfer) && \ + ((ci)->primaries == (i)->primaries)) + +#define IS_EQUAL(ci,i) CI_IS_EQUAL(&(ci)->color, (i)) #define IS_UNKNOWN(ci) (IS_EQUAL (&colorimetry[DEFAULT_UNKNOWN], ci)) @@ -89,9 +116,11 @@ const gchar * color) { const ColorimetryInfo *ci; + gboolean res = FALSE; if ((ci = gst_video_get_colorimetry (color))) { *cinfo = ci->color; + res = TRUE; } else { gint r, m, t, p; @@ -100,9 +129,10 @@ cinfo->matrix = m; cinfo->transfer = t; cinfo->primaries = p; + res = TRUE; } } - return TRUE; + return res; } /** @@ -215,21 +245,31 @@ GST_DEBUG ("offset: %d %d %d %d", offset[0], offset[1], offset[2], offset[3]); } - -#if 0 -typedef struct +/** + * gst_video_colorimetry_is_equal: + * @cinfo: a #GstVideoColorimetry + * @other: another #GstVideoColorimetry + * + * Compare the 2 colorimetry sets for equality + * + * Returns: #TRUE if @cinfo and @other are equal. + * + * Since: 1.6 + */ +gboolean +gst_video_colorimetry_is_equal (const GstVideoColorimetry * cinfo, + const GstVideoColorimetry * other) { - GstVideoColorPrimaries primaries; - gdouble xW, yW; - gdouble xR, yR; - gdouble xG, yG; - gdouble xB, yB; -} PrimariesInfo; + g_return_val_if_fail (cinfo != NULL, FALSE); + g_return_val_if_fail (other != NULL, FALSE); + + return CI_IS_EQUAL (cinfo, other); +} #define WP_C 0.31006, 0.31616 #define WP_D65 0.31271, 0.32902 -static const PrimariesInfo primaries[] = { +static const GstVideoColorPrimariesInfo color_primaries[] = { {GST_VIDEO_COLOR_PRIMARIES_UNKNOWN, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {GST_VIDEO_COLOR_PRIMARIES_BT709, WP_D65, 0.64, 0.33, 0.30, 0.60, 0.15, 0.06}, {GST_VIDEO_COLOR_PRIMARIES_BT470M, WP_C, 0.67, 0.33, 0.21, 0.71, 0.14, 0.08}, @@ -240,6 +280,270 @@ {GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, WP_D65, 0.63, 0.34, 0.31, 0.595, 0.155, 0.07}, {GST_VIDEO_COLOR_PRIMARIES_FILM, WP_C, 0.681, 0.319, 0.243, 0.692, 0.145, - 0.049} + 0.049}, + {GST_VIDEO_COLOR_PRIMARIES_BT2020, WP_D65, 0.708, 0.292, 0.170, 0.797, 0.131, + 0.046} }; -#endif + +/** + * gst_video_color_primaries_get_info: + * @primaries: a #GstVideoColorPrimaries + * + * Get information about the chromaticity coordinates of @primaries. + * + * Returns: a #GstVideoColorPrimariesInfo for @primaries. + * + * Since: 1.6 + */ +const GstVideoColorPrimariesInfo * +gst_video_color_primaries_get_info (GstVideoColorPrimaries primaries) +{ + g_return_val_if_fail (primaries < + (GstVideoColorPrimaries) G_N_ELEMENTS (color_primaries), NULL); + + return &color_primaries[primaries]; +} + +/** + * gst_video_color_matrix_get_Kr_Kb: + * @matrix: a #GstVideoColorMatrix + * @Kr: result red channel coefficient + * @Kb: result blue channel coefficient + * + * Get the coefficients used to convert between Y'PbPr and R'G'B' using @matrix. + * + * When: + * + * |[ + * 0.0 <= [Y',R',G',B'] <= 1.0) + * (-0.5 <= [Pb,Pr] <= 0.5) + * ]| + * + * the general conversion is given by: + * + * |[ + * Y' = Kr*R' + (1-Kr-Kb)*G' + Kb*B' + * Pb = (B'-Y')/(2*(1-Kb)) + * Pr = (R'-Y')/(2*(1-Kr)) + * ]| + * + * and the other way around: + * + * |[ + * R' = Y' + Cr*2*(1-Kr) + * G' = Y' - Cb*2*(1-Kb)*Kb/(1-Kr-Kb) - Cr*2*(1-Kr)*Kr/(1-Kr-Kb) + * B' = Y' + Cb*2*(1-Kb) + * ]| + * + * Returns: TRUE if @matrix was a YUV color format and @Kr and @Kb contain valid + * values. + * + * Since: 1.6 + */ +gboolean +gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, + gdouble * Kb) +{ + gboolean res = TRUE; + + switch (matrix) { + /* RGB */ + default: + case GST_VIDEO_COLOR_MATRIX_RGB: + res = FALSE; + break; + /* YUV */ + case GST_VIDEO_COLOR_MATRIX_FCC: + *Kr = 0.30; + *Kb = 0.11; + break; + case GST_VIDEO_COLOR_MATRIX_BT709: + *Kr = 0.2126; + *Kb = 0.0722; + break; + case GST_VIDEO_COLOR_MATRIX_BT601: + *Kr = 0.2990; + *Kb = 0.1140; + break; + case GST_VIDEO_COLOR_MATRIX_SMPTE240M: + *Kr = 0.212; + *Kb = 0.087; + break; + case GST_VIDEO_COLOR_MATRIX_BT2020: + *Kr = 0.2627; + *Kb = 0.0593; + break; + } + GST_DEBUG ("matrix: %d, Kr %f, Kb %f", matrix, *Kr, *Kb); + + return res; +} + +/** + * gst_video_color_transfer_encode: + * @func: a #GstVideoTransferFunction + * @val: a value + * + * Convert @val to its gamma encoded value. + * + * For a linear value L in the range [0..1], conversion to the non-linear + * (gamma encoded) L' is in general performed with a power function like: + * + * |[ + * L' = L ^ (1 / gamma) + * ]| + * + * Depending on @func, different formulas might be applied. Some formulas + * encode a linear segment in the lower range. + * + * Returns: the gamme encoded value of @val + * + * Since: 1.6 + */ +gdouble +gst_video_color_transfer_encode (GstVideoTransferFunction func, gdouble val) +{ + gdouble res; + + switch (func) { + case GST_VIDEO_TRANSFER_UNKNOWN: + case GST_VIDEO_TRANSFER_GAMMA10: + default: + res = val; + break; + case GST_VIDEO_TRANSFER_GAMMA18: + res = pow (val, 1.0 / 1.8); + break; + case GST_VIDEO_TRANSFER_GAMMA20: + res = pow (val, 1.0 / 2.0); + break; + case GST_VIDEO_TRANSFER_GAMMA22: + res = pow (val, 1.0 / 2.2); + break; + case GST_VIDEO_TRANSFER_BT709: + if (val < 0.018) + res = 4.5 * val; + else + res = 1.099 * pow (val, 0.45) - 0.099; + break; + case GST_VIDEO_TRANSFER_SMPTE240M: + if (val < 0.0228) + res = val * 4.0; + else + res = 1.1115 * pow (val, 0.45) - 0.1115; + break; + case GST_VIDEO_TRANSFER_SRGB: + if (val <= 0.0031308) + res = 12.92 * val; + else + res = 1.055 * pow (val, 1.0 / 2.4) - 0.055; + break; + case GST_VIDEO_TRANSFER_GAMMA28: + res = pow (val, 1 / 2.8); + break; + case GST_VIDEO_TRANSFER_LOG100: + if (val < 0.01) + res = 0.0; + else + res = 1.0 + log10 (val) / 2.0; + break; + case GST_VIDEO_TRANSFER_LOG316: + if (val < 0.0031622777) + res = 0.0; + else + res = 1.0 + log10 (val) / 2.5; + break; + case GST_VIDEO_TRANSFER_BT2020_12: + if (val < 0.0181) + res = 4.5 * val; + else + res = 1.0993 * pow (val, 0.45) - 0.0993; + break; + } + return res; +} + +/** + * gst_video_color_transfer_decode: + * @func: a #GstVideoTransferFunction + * @val: a value + * + * Convert @val to its gamma decoded value. This is the inverse operation of + * @gst_video_color_transfer_encode(). + * + * For a non-linear value L' in the range [0..1], conversion to the linear + * L is in general performed with a power function like: + * + * |[ + * L = L' ^ gamma + * ]| + * + * Depending on @func, different formulas might be applied. Some formulas + * encode a linear segment in the lower range. + * + * Returns: the gamme decoded value of @val + * + * Since: 1.6 + */ +gdouble +gst_video_color_transfer_decode (GstVideoTransferFunction func, gdouble val) +{ + gdouble res; + + switch (func) { + case GST_VIDEO_TRANSFER_UNKNOWN: + case GST_VIDEO_TRANSFER_GAMMA10: + default: + res = val; + break; + case GST_VIDEO_TRANSFER_GAMMA18: + res = pow (val, 1.8); + break; + case GST_VIDEO_TRANSFER_GAMMA20: + res = pow (val, 2.0); + break; + case GST_VIDEO_TRANSFER_GAMMA22: + res = pow (val, 2.2); + break; + case GST_VIDEO_TRANSFER_BT709: + if (val < 0.081) + res = val / 4.5; + else + res = pow ((val + 0.099) / 1.099, 1.0 / 0.45); + break; + case GST_VIDEO_TRANSFER_SMPTE240M: + if (val < 0.0913) + res = val / 4.0; + else + res = pow ((val + 0.1115) / 1.1115, 1.0 / 0.45); + break; + case GST_VIDEO_TRANSFER_SRGB: + if (val <= 0.04045) + res = val / 12.92; + else + res = pow ((val + 0.055) / 1.055, 2.4); + break; + case GST_VIDEO_TRANSFER_GAMMA28: + res = pow (val, 2.8); + break; + case GST_VIDEO_TRANSFER_LOG100: + if (val == 0.0) + res = 0.0; + else + res = pow (10.0, 2.0 * (val - 1.0)); + break; + case GST_VIDEO_TRANSFER_LOG316: + if (val == 0.0) + res = 0.0; + else + res = pow (10.0, 2.5 * (val - 1.0)); + break; + case GST_VIDEO_TRANSFER_BT2020_12: + if (val < 0.08145) + res = val / 4.5; + else + res = pow ((val + 0.0993) / 1.0993, 1.0 / 0.45); + break; + } + return res; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-color.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-color.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-color.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-color.h 2015-10-22 08:01:34.000000000 +0000 @@ -50,6 +50,7 @@ * @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 color matrix * @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 color matrix * @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M color matrix + * @GST_VIDEO_COLOR_MATRIX_BT2020: ITU-R BT.2020 color matrix. Since: 1.6. * * The color matrix is used to convert between Y'PbPr and * non-linear RGB (R'G'B') @@ -60,9 +61,12 @@ GST_VIDEO_COLOR_MATRIX_FCC, GST_VIDEO_COLOR_MATRIX_BT709, GST_VIDEO_COLOR_MATRIX_BT601, - GST_VIDEO_COLOR_MATRIX_SMPTE240M + GST_VIDEO_COLOR_MATRIX_SMPTE240M, + GST_VIDEO_COLOR_MATRIX_BT2020 } GstVideoColorMatrix; +gboolean gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, gdouble * Kb); + /** * GstVideoTransferFunction: * @GST_VIDEO_TRANSFER_UNKNOWN: unknown transfer function @@ -81,6 +85,9 @@ * 100:1 range * @GST_VIDEO_TRANSFER_LOG316: Logarithmic transfer characteristic * 316.22777:1 range + * @GST_VIDEO_TRANSFER_BT2020_12: Gamma 2.2 curve with a linear segment in the lower + * range. Used for BT.2020 with 12 bits per + * component. Since: 1.6. * * The video transfer function defines the formula for converting between * non-linear RGB (R'G'B') and linear RGB @@ -96,9 +103,13 @@ GST_VIDEO_TRANSFER_SRGB, GST_VIDEO_TRANSFER_GAMMA28, GST_VIDEO_TRANSFER_LOG100, - GST_VIDEO_TRANSFER_LOG316 + GST_VIDEO_TRANSFER_LOG316, + GST_VIDEO_TRANSFER_BT2020_12 } GstVideoTransferFunction; +gdouble gst_video_color_transfer_encode (GstVideoTransferFunction func, gdouble val); +gdouble gst_video_color_transfer_decode (GstVideoTransferFunction func, gdouble val); + /** * GstVideoColorPrimaries: * @GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: unknown color primaries @@ -108,6 +119,7 @@ * @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries * @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries * @GST_VIDEO_COLOR_PRIMARIES_FILM: Generic film + * @GST_VIDEO_COLOR_PRIMARIES_BT2020: BT2020 primaries. Since: 1.6. * * The color primaries define the how to transform linear RGB values to and from * the CIE XYZ colorspace. @@ -119,10 +131,40 @@ GST_VIDEO_COLOR_PRIMARIES_BT470BG, GST_VIDEO_COLOR_PRIMARIES_SMPTE170M, GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, - GST_VIDEO_COLOR_PRIMARIES_FILM + GST_VIDEO_COLOR_PRIMARIES_FILM, + GST_VIDEO_COLOR_PRIMARIES_BT2020 } GstVideoColorPrimaries; /** + * GstVideoColorPrimariesInfo: + * @primaries: a #GstVideoColorPrimaries + * @Wx: reference white x coordinate + * @Wy: reference white y coordinate + * @Rx: red x coordinate + * @Ry: red y coordinate + * @Gx: green x coordinate + * @Gy: green y coordinate + * @Bx: blue x coordinate + * @By: blue y coordinate + * + * Structure describing the chromaticity coordinates of an RGB system. These + * values can be used to construct a matrix to transform RGB to and from the + * XYZ colorspace. + * + * Since: 1.6 + */ +typedef struct { + GstVideoColorPrimaries primaries; + gdouble Wx, Wy; + gdouble Rx, Ry; + gdouble Gx, Gy; + gdouble Bx, By; +} GstVideoColorPrimariesInfo; + +const GstVideoColorPrimariesInfo * + gst_video_color_primaries_get_info (GstVideoColorPrimaries primaries); + +/** * GstVideoColorimetry: * @range: the color range. This is the valid range for the samples. * It is used to convert the samples to Y'PbPr values. @@ -144,10 +186,13 @@ #define GST_VIDEO_COLORIMETRY_BT601 "bt601" #define GST_VIDEO_COLORIMETRY_BT709 "bt709" #define GST_VIDEO_COLORIMETRY_SMPTE240M "smpte240m" +#define GST_VIDEO_COLORIMETRY_SRGB "sRGB" +#define GST_VIDEO_COLORIMETRY_BT2020 "bt2020" gboolean gst_video_colorimetry_matches (GstVideoColorimetry *cinfo, const gchar *color); gboolean gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color); gchar * gst_video_colorimetry_to_string (GstVideoColorimetry *cinfo); +gboolean gst_video_colorimetry_is_equal (const GstVideoColorimetry *cinfo, const GstVideoColorimetry *other); /* compute offset and scale */ void gst_video_color_range_offsets (GstVideoColorRange range, diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-converter.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-converter.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-converter.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-converter.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,4732 @@ +/* GStreamer + * Copyright (C) 2010 David Schleef + * Copyright (C) 2010 Sebastian Dröge + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "video-converter.h" + +#include +#include +#include + +#include "video-orc.h" + +/** + * SECTION:videoconverter + * @short_description: Generic video conversion + * + * + * + * This object is used to convert video frames from one format to another. + * The object can perform conversion of: + * + * + * video format + * + * + * video colorspace + * + * + * chroma-siting + * + * + * video size + * + * + * + */ + +/* + * (a) unpack + * (b) chroma upsample + * (c) (convert Y'CbCr to R'G'B') + * (d) gamma decode + * (e) downscale + * (f) colorspace convert through XYZ + * (g) upscale + * (h) gamma encode + * (i) (convert R'G'B' to Y'CbCr) + * (j) chroma downsample + * (k) pack + * + * quality options + * + * (a) range truncate, range expand + * (b) full upsample, 1-1 non-cosited upsample, no upsample + * (c) 8 bits, 16 bits + * (d) + * (e) 8 bits, 16 bits + * (f) 8 bits, 16 bits + * (g) 8 bits, 16 bits + * (h) + * (i) 8 bits, 16 bits + * (j) 1-1 cosited downsample, no downsample + * (k) + * + * + * 1 : a -> -> -> -> e -> f -> g -> -> -> -> k + * 2 : a -> -> -> -> e -> f* -> g -> -> -> -> k + * 3 : a -> -> -> -> e* -> f* -> g* -> -> -> -> k + * 4 : a -> b -> -> -> e -> f -> g -> -> -> j -> k + * 5 : a -> b -> -> -> e* -> f* -> g* -> -> -> j -> k + * 6 : a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k + * 7 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k + * + * 8 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k + * 9 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k + * 10 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k + */ + +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-converter", 0, + "video-converter object"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + +typedef struct _GstLineCache GstLineCache; + +#define SCALE (8) +#define SCALE_F ((float) (1 << SCALE)) + +typedef struct _MatrixData MatrixData; + +struct _MatrixData +{ + gdouble dm[4][4]; + gint im[4][4]; + gint width; + guint64 orc_p1; + guint64 orc_p2; + guint64 orc_p3; + guint64 orc_p4; + gint64 *t_r; + gint64 *t_g; + gint64 *t_b; + gint64 t_c; + void (*matrix_func) (MatrixData * data, gpointer pixels); +}; + +typedef struct _GammaData GammaData; + +struct _GammaData +{ + gpointer gamma_table; + gint width; + void (*gamma_func) (GammaData * data, gpointer dest, gpointer src); +}; + +typedef enum +{ + ALPHA_MODE_NONE = 0, + ALPHA_MODE_COPY = (1 << 0), + ALPHA_MODE_SET = (1 << 1), + ALPHA_MODE_MULT = (1 << 2) +} AlphaMode; + +typedef struct +{ + guint8 *data; + guint stride; + guint n_lines; + guint idx; + gpointer user_data; + GDestroyNotify notify; +} ConverterAlloc; + +typedef void (*FastConvertFunc) (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane); + +struct _GstVideoConverter +{ + gint flags; + + GstVideoInfo in_info; + GstVideoInfo out_info; + + gint in_x; + gint in_y; + gint in_width; + gint in_height; + gint in_maxwidth; + gint in_maxheight; + gint out_x; + gint out_y; + gint out_width; + gint out_height; + gint out_maxwidth; + gint out_maxheight; + + gint current_pstride; + gint current_width; + gint current_height; + GstVideoFormat current_format; + gint current_bits; + + GstStructure *config; + + guint16 *tmpline; + + gboolean fill_border; + gpointer borderline; + guint64 borders[4]; + guint32 border_argb; + guint32 alpha_value; + AlphaMode alpha_mode; + + void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest); + + /* data for unpack */ + GstLineCache *unpack_lines; + GstVideoFormat unpack_format; + guint unpack_bits; + gboolean unpack_rgb; + gboolean identity_unpack; + gint unpack_pstride; + + /* chroma upsample */ + GstLineCache *upsample_lines; + GstVideoChromaResample *upsample; + GstVideoChromaResample *upsample_p; + GstVideoChromaResample *upsample_i; + guint up_n_lines; + gint up_offset; + + /* to R'G'B */ + GstLineCache *to_RGB_lines; + MatrixData to_RGB_matrix; + /* gamma decode */ + GammaData gamma_dec; + + /* scaling */ + GstLineCache *hscale_lines; + GstVideoScaler *h_scaler; + gint h_scale_format; + GstLineCache *vscale_lines; + GstVideoScaler *v_scaler; + GstVideoScaler *v_scaler_p; + GstVideoScaler *v_scaler_i; + gint v_scale_width; + gint v_scale_format; + + /* color space conversion */ + GstLineCache *convert_lines; + MatrixData convert_matrix; + gint in_bits; + gint out_bits; + + /* alpha correction */ + GstLineCache *alpha_lines; + void (*alpha_func) (GstVideoConverter * convert, gpointer pixels, gint width); + + /* gamma encode */ + GammaData gamma_enc; + /* to Y'CbCr */ + GstLineCache *to_YUV_lines; + MatrixData to_YUV_matrix; + + /* chroma downsample */ + GstLineCache *downsample_lines; + GstVideoChromaResample *downsample; + GstVideoChromaResample *downsample_p; + GstVideoChromaResample *downsample_i; + guint down_n_lines; + gint down_offset; + + /* dither */ + GstLineCache *dither_lines; + GstVideoDither *dither; + + /* pack */ + GstLineCache *pack_lines; + guint pack_nlines; + GstVideoFormat pack_format; + guint pack_bits; + gboolean pack_rgb; + gboolean identity_pack; + gint pack_pstride; + gconstpointer pack_pal; + gsize pack_palsize; + + const GstVideoFrame *src; + GstVideoFrame *dest; + + /* fastpath */ + GstVideoFormat fformat[4]; + gint fin_x[4]; + gint fin_y[4]; + gint fout_x[4]; + gint fout_y[4]; + gint fout_width[4]; + gint fout_height[4]; + gint fsplane[4]; + gint ffill[4]; + GstVideoScaler *fh_scaler[4]; + GstVideoScaler *fv_scaler[4]; + FastConvertFunc fconvert[4]; +}; + +typedef gpointer (*GstLineCacheAllocLineFunc) (GstLineCache * cache, gint idx, + gpointer user_data); +typedef gboolean (*GstLineCacheNeedLineFunc) (GstLineCache * cache, + gint out_line, gint in_line, gpointer user_data); + +struct _GstLineCache +{ + gint first; + gint backlog; + GPtrArray *lines; + + GstLineCache *prev; + gboolean write_input; + gboolean pass_alloc; + gboolean alloc_writable; + + GstLineCacheNeedLineFunc need_line; + gpointer need_line_data; + GDestroyNotify need_line_notify; + + guint n_lines; + guint stride; + GstLineCacheAllocLineFunc alloc_line; + gpointer alloc_line_data; + GDestroyNotify alloc_line_notify; +}; + +static GstLineCache * +gst_line_cache_new (GstLineCache * prev) +{ + GstLineCache *result; + + result = g_slice_new0 (GstLineCache); + result->lines = g_ptr_array_new (); + result->prev = prev; + + return result; +} + +static void +gst_line_cache_clear (GstLineCache * cache) +{ + g_return_if_fail (cache != NULL); + + g_ptr_array_set_size (cache->lines, 0); + cache->first = 0; +} + +static void +gst_line_cache_free (GstLineCache * cache) +{ + if (cache->need_line_notify) + cache->need_line_notify (cache->need_line_data); + if (cache->alloc_line_notify) + cache->alloc_line_notify (cache->alloc_line_data); + gst_line_cache_clear (cache); + g_ptr_array_unref (cache->lines); + g_slice_free (GstLineCache, cache); +} + +static void +gst_line_cache_set_need_line_func (GstLineCache * cache, + GstLineCacheNeedLineFunc need_line, gpointer user_data, + GDestroyNotify notify) +{ + cache->need_line = need_line; + cache->need_line_data = user_data; + cache->need_line_notify = notify; +} + +static void +gst_line_cache_set_alloc_line_func (GstLineCache * cache, + GstLineCacheAllocLineFunc alloc_line, gpointer user_data, + GDestroyNotify notify) +{ + cache->alloc_line = alloc_line; + cache->alloc_line_data = user_data; + cache->alloc_line_notify = notify; +} + +/* keep this much backlog for interlaced video */ +#define BACKLOG 2 + +static gpointer * +gst_line_cache_get_lines (GstLineCache * cache, gint out_line, gint in_line, + gint n_lines) +{ + if (cache->first + cache->backlog < in_line) { + gint to_remove = + MIN (in_line - (cache->first + cache->backlog), cache->lines->len); + if (to_remove > 0) { + g_ptr_array_remove_range (cache->lines, 0, to_remove); + } + cache->first += to_remove; + if (cache->first < in_line) + cache->first = in_line; + } else if (in_line < cache->first) { + gst_line_cache_clear (cache); + cache->first = in_line; + } + + while (TRUE) { + gint oline; + + if (cache->first <= in_line + && in_line + n_lines <= cache->first + (gint) cache->lines->len) { + return cache->lines->pdata + (in_line - cache->first); + } + + if (cache->need_line == NULL) + break; + + oline = out_line + cache->first + cache->lines->len - in_line; + + if (!cache->need_line (cache, oline, cache->first + cache->lines->len, + cache->need_line_data)) + break; + } + GST_DEBUG ("no lines"); + return NULL; +} + +static void +gst_line_cache_add_line (GstLineCache * cache, gint idx, gpointer line) +{ + if (cache->first + cache->lines->len != idx) { + gst_line_cache_clear (cache); + cache->first = idx; + } + g_ptr_array_add (cache->lines, line); +} + +static gpointer +gst_line_cache_alloc_line (GstLineCache * cache, gint idx) +{ + gpointer res; + + if (cache->alloc_line) + res = cache->alloc_line (cache, idx, cache->alloc_line_data); + else + res = NULL; + + return res; +} + +static void video_converter_generic (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest); +static gboolean video_converter_lookup_fastpath (GstVideoConverter * convert); +static void video_converter_compute_matrix (GstVideoConverter * convert); +static void video_converter_compute_resample (GstVideoConverter * convert); + +static gpointer get_dest_line (GstLineCache * cache, gint idx, + gpointer user_data); + +static gboolean do_unpack_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_downsample_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_convert_to_RGB_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_convert_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_alpha_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_convert_to_YUV_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_upsample_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_vscale_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_hscale_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); +static gboolean do_dither_lines (GstLineCache * cache, gint out_line, + gint in_line, gpointer user_data); + +static ConverterAlloc * +converter_alloc_new (guint stride, guint n_lines, gpointer user_data, + GDestroyNotify notify) +{ + ConverterAlloc *alloc; + + GST_DEBUG ("stride %d, n_lines %d", stride, n_lines); + alloc = g_slice_new0 (ConverterAlloc); + alloc->data = g_malloc (stride * n_lines); + alloc->stride = stride; + alloc->n_lines = n_lines; + alloc->idx = 0; + alloc->user_data = user_data; + alloc->notify = notify; + + return alloc; +} + +static void +converter_alloc_free (ConverterAlloc * alloc) +{ + if (alloc->notify) + alloc->notify (alloc->user_data); + g_free (alloc->data); + g_slice_free (ConverterAlloc, alloc); +} + +static void +setup_border_alloc (GstVideoConverter * convert, ConverterAlloc * alloc) +{ + gint i; + + if (convert->borderline) { + for (i = 0; i < alloc->n_lines; i++) + memcpy (&alloc->data[i * alloc->stride], convert->borderline, + alloc->stride); + } +} + +static gpointer +get_temp_line (GstLineCache * cache, gint idx, gpointer user_data) +{ + ConverterAlloc *alloc = user_data; + gpointer tmpline; + + GST_DEBUG ("get temp line %d (%p %d)", idx, alloc, alloc->idx); + tmpline = &alloc->data[alloc->stride * alloc->idx]; + alloc->idx = (alloc->idx + 1) % alloc->n_lines; + + return tmpline; +} + +static gpointer +get_border_temp_line (GstLineCache * cache, gint idx, gpointer user_data) +{ + ConverterAlloc *alloc = user_data; + GstVideoConverter *convert = alloc->user_data; + gpointer tmpline; + + GST_DEBUG ("get temp line %d (%p %d)", idx, alloc, alloc->idx); + tmpline = &alloc->data[alloc->stride * alloc->idx] + + (convert->out_x * convert->pack_pstride); + alloc->idx = (alloc->idx + 1) % alloc->n_lines; + + return tmpline; +} + +static gint +get_opt_int (GstVideoConverter * convert, const gchar * opt, gint def) +{ + gint res; + if (!gst_structure_get_int (convert->config, opt, &res)) + res = def; + return res; +} + +static guint +get_opt_uint (GstVideoConverter * convert, const gchar * opt, guint def) +{ + guint res; + if (!gst_structure_get_uint (convert->config, opt, &res)) + res = def; + return res; +} + +static gdouble +get_opt_double (GstVideoConverter * convert, const gchar * opt, gdouble def) +{ + gdouble res; + if (!gst_structure_get_double (convert->config, opt, &res)) + res = def; + return res; +} + +static gboolean +get_opt_bool (GstVideoConverter * convert, const gchar * opt, gboolean def) +{ + gboolean res; + if (!gst_structure_get_boolean (convert->config, opt, &res)) + res = def; + return res; +} + +static gint +get_opt_enum (GstVideoConverter * convert, const gchar * opt, GType type, + gint def) +{ + gint res; + if (!gst_structure_get_enum (convert->config, opt, type, &res)) + res = def; + return res; +} + +#define DEFAULT_OPT_FILL_BORDER TRUE +#define DEFAULT_OPT_ALPHA_VALUE 1.0 +/* options copy, set, mult */ +#define DEFAULT_OPT_ALPHA_MODE GST_VIDEO_ALPHA_MODE_COPY +#define DEFAULT_OPT_BORDER_ARGB 0xff000000 +/* options full, input-only, output-only, none */ +#define DEFAULT_OPT_MATRIX_MODE GST_VIDEO_MATRIX_MODE_FULL +/* none, remap */ +#define DEFAULT_OPT_GAMMA_MODE GST_VIDEO_GAMMA_MODE_NONE +/* none, merge-only, fast */ +#define DEFAULT_OPT_PRIMARIES_MODE GST_VIDEO_PRIMARIES_MODE_NONE +/* options full, upsample-only, downsample-only, none */ +#define DEFAULT_OPT_CHROMA_MODE GST_VIDEO_CHROMA_MODE_FULL +#define DEFAULT_OPT_RESAMPLER_METHOD GST_VIDEO_RESAMPLER_METHOD_CUBIC +#define DEFAULT_OPT_CHROMA_RESAMPLER_METHOD GST_VIDEO_RESAMPLER_METHOD_LINEAR +#define DEFAULT_OPT_RESAMPLER_TAPS 0 +#define DEFAULT_OPT_DITHER_METHOD GST_VIDEO_DITHER_BAYER +#define DEFAULT_OPT_DITHER_QUANTIZATION 1 + +#define GET_OPT_FILL_BORDER(c) get_opt_bool(c, \ + GST_VIDEO_CONVERTER_OPT_FILL_BORDER, DEFAULT_OPT_FILL_BORDER) +#define GET_OPT_ALPHA_VALUE(c) get_opt_double(c, \ + GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE, DEFAULT_OPT_ALPHA_VALUE) +#define GET_OPT_ALPHA_MODE(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, GST_TYPE_VIDEO_ALPHA_MODE, DEFAULT_OPT_ALPHA_MODE) +#define GET_OPT_BORDER_ARGB(c) get_opt_uint(c, \ + GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB) +#define GET_OPT_MATRIX_MODE(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_TYPE_VIDEO_MATRIX_MODE, DEFAULT_OPT_MATRIX_MODE) +#define GET_OPT_GAMMA_MODE(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, GST_TYPE_VIDEO_GAMMA_MODE, DEFAULT_OPT_GAMMA_MODE) +#define GET_OPT_PRIMARIES_MODE(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE, GST_TYPE_VIDEO_PRIMARIES_MODE, DEFAULT_OPT_PRIMARIES_MODE) +#define GET_OPT_CHROMA_MODE(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, GST_TYPE_VIDEO_CHROMA_MODE, DEFAULT_OPT_CHROMA_MODE) +#define GET_OPT_RESAMPLER_METHOD(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, GST_TYPE_VIDEO_RESAMPLER_METHOD, \ + DEFAULT_OPT_RESAMPLER_METHOD) +#define GET_OPT_CHROMA_RESAMPLER_METHOD(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD, GST_TYPE_VIDEO_RESAMPLER_METHOD, \ + DEFAULT_OPT_CHROMA_RESAMPLER_METHOD) +#define GET_OPT_RESAMPLER_TAPS(c) get_opt_uint(c, \ + GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS, DEFAULT_OPT_RESAMPLER_TAPS) +#define GET_OPT_DITHER_METHOD(c) get_opt_enum(c, \ + GST_VIDEO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_VIDEO_DITHER_METHOD, \ + DEFAULT_OPT_DITHER_METHOD) +#define GET_OPT_DITHER_QUANTIZATION(c) get_opt_uint(c, \ + GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION, DEFAULT_OPT_DITHER_QUANTIZATION) + +#define CHECK_ALPHA_COPY(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_COPY) +#define CHECK_ALPHA_SET(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_SET) +#define CHECK_ALPHA_MULT(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_MULT) + +#define CHECK_MATRIX_FULL(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_FULL) +#define CHECK_MATRIX_INPUT(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_INPUT_ONLY) +#define CHECK_MATRIX_OUTPUT(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY) +#define CHECK_MATRIX_NONE(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_NONE) + +#define CHECK_GAMMA_NONE(c) (GET_OPT_GAMMA_MODE(c) == GST_VIDEO_GAMMA_MODE_NONE) +#define CHECK_GAMMA_REMAP(c) (GET_OPT_GAMMA_MODE(c) == GST_VIDEO_GAMMA_MODE_REMAP) + +#define CHECK_PRIMARIES_NONE(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_NONE) +#define CHECK_PRIMARIES_MERGE(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY) +#define CHECK_PRIMARIES_FAST(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_FAST) + +#define CHECK_CHROMA_FULL(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_FULL) +#define CHECK_CHROMA_UPSAMPLE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY) +#define CHECK_CHROMA_DOWNSAMPLE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY) +#define CHECK_CHROMA_NONE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_NONE) + +static GstLineCache * +chain_unpack_line (GstVideoConverter * convert) +{ + GstLineCache *prev; + GstVideoInfo *info; + + info = &convert->in_info; + + convert->current_format = convert->unpack_format; + convert->current_bits = convert->unpack_bits; + convert->current_pstride = convert->current_bits >> 1; + + convert->unpack_pstride = convert->current_pstride; + convert->identity_unpack = (convert->current_format == info->finfo->format); + + GST_DEBUG ("chain unpack line format %s, pstride %d, identity_unpack %d", + gst_video_format_to_string (convert->current_format), + convert->current_pstride, convert->identity_unpack); + + prev = convert->unpack_lines = gst_line_cache_new (NULL); + prev->write_input = FALSE; + prev->pass_alloc = FALSE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->unpack_lines, + do_unpack_lines, convert, NULL); + + return convert->unpack_lines; +} + +static GstLineCache * +chain_upsample (GstVideoConverter * convert, GstLineCache * prev) +{ + video_converter_compute_resample (convert); + + if (convert->upsample_p || convert->upsample_i) { + GST_DEBUG ("chain upsample"); + prev = convert->upsample_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = TRUE; + prev->n_lines = 4; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->upsample_lines, + do_upsample_lines, convert, NULL); + } + return prev; +} + +static void +color_matrix_set_identity (MatrixData * m) +{ + int i, j; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + m->dm[i][j] = (i == j); + } + } +} + +static void +color_matrix_copy (MatrixData * d, const MatrixData * s) +{ + gint i, j; + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + d->dm[i][j] = s->dm[i][j]; +} + +/* Perform 4x4 matrix multiplication: + * - @dst@ = @a@ * @b@ + * - @dst@ may be a pointer to @a@ andor @b@ + */ +static void +color_matrix_multiply (MatrixData * dst, MatrixData * a, MatrixData * b) +{ + MatrixData tmp; + int i, j, k; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + double x = 0; + for (k = 0; k < 4; k++) { + x += a->dm[i][k] * b->dm[k][j]; + } + tmp.dm[i][j] = x; + } + } + color_matrix_copy (dst, &tmp); +} + +static void +color_matrix_invert (MatrixData * d, MatrixData * s) +{ + MatrixData tmp; + int i, j; + double det; + + color_matrix_set_identity (&tmp); + for (j = 0; j < 3; j++) { + for (i = 0; i < 3; i++) { + tmp.dm[j][i] = + s->dm[(i + 1) % 3][(j + 1) % 3] * s->dm[(i + 2) % 3][(j + 2) % 3] - + s->dm[(i + 1) % 3][(j + 2) % 3] * s->dm[(i + 2) % 3][(j + 1) % 3]; + } + } + det = + tmp.dm[0][0] * s->dm[0][0] + tmp.dm[0][1] * s->dm[1][0] + + tmp.dm[0][2] * s->dm[2][0]; + for (j = 0; j < 3; j++) { + for (i = 0; i < 3; i++) { + tmp.dm[i][j] /= det; + } + } + color_matrix_copy (d, &tmp); +} + +static void +color_matrix_offset_components (MatrixData * m, double a1, double a2, double a3) +{ + MatrixData a; + + color_matrix_set_identity (&a); + a.dm[0][3] = a1; + a.dm[1][3] = a2; + a.dm[2][3] = a3; + color_matrix_multiply (m, &a, m); +} + +static void +color_matrix_scale_components (MatrixData * m, double a1, double a2, double a3) +{ + MatrixData a; + + color_matrix_set_identity (&a); + a.dm[0][0] = a1; + a.dm[1][1] = a2; + a.dm[2][2] = a3; + color_matrix_multiply (m, &a, m); +} + +static void +color_matrix_debug (const MatrixData * s) +{ + GST_DEBUG ("[%f %f %f %f]", s->dm[0][0], s->dm[0][1], s->dm[0][2], + s->dm[0][3]); + GST_DEBUG ("[%f %f %f %f]", s->dm[1][0], s->dm[1][1], s->dm[1][2], + s->dm[1][3]); + GST_DEBUG ("[%f %f %f %f]", s->dm[2][0], s->dm[2][1], s->dm[2][2], + s->dm[2][3]); + GST_DEBUG ("[%f %f %f %f]", s->dm[3][0], s->dm[3][1], s->dm[3][2], + s->dm[3][3]); +} + +static void +color_matrix_convert (MatrixData * s) +{ + gint i, j; + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + s->im[i][j] = rint (s->dm[i][j]); + + GST_DEBUG ("[%6d %6d %6d %6d]", s->im[0][0], s->im[0][1], s->im[0][2], + s->im[0][3]); + GST_DEBUG ("[%6d %6d %6d %6d]", s->im[1][0], s->im[1][1], s->im[1][2], + s->im[1][3]); + GST_DEBUG ("[%6d %6d %6d %6d]", s->im[2][0], s->im[2][1], s->im[2][2], + s->im[2][3]); + GST_DEBUG ("[%6d %6d %6d %6d]", s->im[3][0], s->im[3][1], s->im[3][2], + s->im[3][3]); +} + +static void +color_matrix_YCbCr_to_RGB (MatrixData * m, double Kr, double Kb) +{ + double Kg = 1.0 - Kr - Kb; + MatrixData k = { + { + {1., 0., 2 * (1 - Kr), 0.}, + {1., -2 * Kb * (1 - Kb) / Kg, -2 * Kr * (1 - Kr) / Kg, 0.}, + {1., 2 * (1 - Kb), 0., 0.}, + {0., 0., 0., 1.}, + } + }; + + color_matrix_multiply (m, &k, m); +} + +static void +color_matrix_RGB_to_YCbCr (MatrixData * m, double Kr, double Kb) +{ + double Kg = 1.0 - Kr - Kb; + MatrixData k; + double x; + + k.dm[0][0] = Kr; + k.dm[0][1] = Kg; + k.dm[0][2] = Kb; + k.dm[0][3] = 0; + + x = 1 / (2 * (1 - Kb)); + k.dm[1][0] = -x * Kr; + k.dm[1][1] = -x * Kg; + k.dm[1][2] = x * (1 - Kb); + k.dm[1][3] = 0; + + x = 1 / (2 * (1 - Kr)); + k.dm[2][0] = x * (1 - Kr); + k.dm[2][1] = -x * Kg; + k.dm[2][2] = -x * Kb; + k.dm[2][3] = 0; + + k.dm[3][0] = 0; + k.dm[3][1] = 0; + k.dm[3][2] = 0; + k.dm[3][3] = 1; + + color_matrix_multiply (m, &k, m); +} + +static void +color_matrix_RGB_to_XYZ (MatrixData * dst, double Rx, double Ry, double Gx, + double Gy, double Bx, double By, double Wx, double Wy) +{ + MatrixData m, im; + double sx, sy, sz; + double wx, wy, wz; + + color_matrix_set_identity (&m); + + m.dm[0][0] = Rx; + m.dm[1][0] = Ry; + m.dm[2][0] = (1.0 - Rx - Ry); + m.dm[0][1] = Gx; + m.dm[1][1] = Gy; + m.dm[2][1] = (1.0 - Gx - Gy); + m.dm[0][2] = Bx; + m.dm[1][2] = By; + m.dm[2][2] = (1.0 - Bx - By); + + color_matrix_invert (&im, &m); + + wx = Wx / Wy; + wy = 1.0; + wz = (1.0 - Wx - Wy) / Wy; + + sx = im.dm[0][0] * wx + im.dm[0][1] * wy + im.dm[0][2] * wz; + sy = im.dm[1][0] * wx + im.dm[1][1] * wy + im.dm[1][2] * wz; + sz = im.dm[2][0] * wx + im.dm[2][1] * wy + im.dm[2][2] * wz; + + m.dm[0][0] *= sx; + m.dm[1][0] *= sx; + m.dm[2][0] *= sx; + m.dm[0][1] *= sy; + m.dm[1][1] *= sy; + m.dm[2][1] *= sy; + m.dm[0][2] *= sz; + m.dm[1][2] *= sz; + m.dm[2][2] *= sz; + + color_matrix_copy (dst, &m); +} + +static void +videoconvert_convert_init_tables (MatrixData * data) +{ + gint i, j; + + data->t_r = g_new (gint64, 256); + data->t_g = g_new (gint64, 256); + data->t_b = g_new (gint64, 256); + + for (i = 0; i < 256; i++) { + gint64 r = 0, g = 0, b = 0; + + for (j = 0; j < 3; j++) { + r = (r << 16) + data->im[j][0] * i; + g = (g << 16) + data->im[j][1] * i; + b = (b << 16) + data->im[j][2] * i; + } + data->t_r[i] = r; + data->t_g[i] = g; + data->t_b[i] = b; + } + data->t_c = ((gint64) data->im[0][3] << 32) + + ((gint64) data->im[1][3] << 16) + + ((gint64) data->im[2][3] << 0); +} + +void +_custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, + orc_int64 p4, int n) +{ + gint i; + gint r, g, b; + gint y, u, v; + gint a00, a01, a02, a03; + gint a10, a11, a12, a13; + gint a20, a21, a22, a23; + + a00 = (gint16) (p1 >> 16); + a01 = (gint16) (p2 >> 16); + a02 = (gint16) (p3 >> 16); + a03 = (gint16) (p4 >> 16); + a10 = (gint16) (p1 >> 32); + a11 = (gint16) (p2 >> 32); + a12 = (gint16) (p3 >> 32); + a13 = (gint16) (p4 >> 32); + a20 = (gint16) (p1 >> 48); + a21 = (gint16) (p2 >> 48); + a22 = (gint16) (p3 >> 48); + a23 = (gint16) (p4 >> 48); + + for (i = 0; i < n; i++) { + r = s1[i * 4 + 1]; + g = s1[i * 4 + 2]; + b = s1[i * 4 + 3]; + + y = ((a00 * r + a01 * g + a02 * b) >> SCALE) + a03; + u = ((a10 * r + a11 * g + a12 * b) >> SCALE) + a13; + v = ((a20 * r + a21 * g + a22 * b) >> SCALE) + a23; + + d1[i * 4 + 1] = CLAMP (y, 0, 255); + d1[i * 4 + 2] = CLAMP (u, 0, 255); + d1[i * 4 + 3] = CLAMP (v, 0, 255); + } +} + +static void +video_converter_matrix8 (MatrixData * data, gpointer pixels) +{ + video_orc_matrix8 (pixels, pixels, data->orc_p1, data->orc_p2, + data->orc_p3, data->orc_p4, data->width); +} + +static void +video_converter_matrix8_table (MatrixData * data, gpointer pixels) +{ + gint i, width = data->width * 4; + guint8 r, g, b; + gint64 c = data->t_c; + guint8 *p = pixels; + gint64 x; + + for (i = 0; i < width; i += 4) { + r = p[i + 1]; + g = p[i + 2]; + b = p[i + 3]; + + x = data->t_r[r] + data->t_g[g] + data->t_b[b] + c; + + p[i + 1] = x >> (32 + SCALE); + p[i + 2] = x >> (16 + SCALE); + p[i + 3] = x >> (0 + SCALE); + } +} + +static void +video_converter_matrix8_AYUV_ARGB (MatrixData * data, gpointer pixels) +{ + video_orc_convert_AYUV_ARGB (pixels, 0, pixels, 0, + data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], data->width, 1); +} + +static gboolean +is_ayuv_to_rgb_matrix (MatrixData * data) +{ + if (data->im[0][0] != data->im[1][0] || data->im[1][0] != data->im[2][0]) + return FALSE; + + if (data->im[0][1] != 0 || data->im[2][2] != 0) + return FALSE; + + return TRUE; +} + +static gboolean +is_identity_matrix (MatrixData * data) +{ + gint i, j; + gint c = data->im[0][0]; + + /* not really checking identity because of rounding errors but given + * the conversions we do we just check for anything that looks like: + * + * c 0 0 0 + * 0 c 0 0 + * 0 0 c 0 + * 0 0 0 1 + */ + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + if (i == j) { + if (i == 3 && data->im[i][j] != 1) + return FALSE; + else if (data->im[i][j] != c) + return FALSE; + } else if (data->im[i][j] != 0) + return FALSE; + } + } + return TRUE; +} + +static gboolean +is_no_clip_matrix (MatrixData * data) +{ + gint i; + static const guint8 test[8][3] = { + {0, 0, 0}, + {0, 0, 255}, + {0, 255, 0}, + {0, 255, 255}, + {255, 0, 0}, + {255, 0, 255}, + {255, 255, 0}, + {255, 255, 255} + }; + + for (i = 0; i < 8; i++) { + gint r, g, b; + gint y, u, v; + + r = test[i][0]; + g = test[i][1]; + b = test[i][2]; + + y = (data->im[0][0] * r + data->im[0][1] * g + + data->im[0][2] * b + data->im[0][3]) >> SCALE; + u = (data->im[1][0] * r + data->im[1][1] * g + + data->im[1][2] * b + data->im[1][3]) >> SCALE; + v = (data->im[2][0] * r + data->im[2][1] * g + + data->im[2][2] * b + data->im[2][3]) >> SCALE; + + if (y != CLAMP (y, 0, 255) || u != CLAMP (u, 0, 255) + || v != CLAMP (v, 0, 255)) + return FALSE; + } + return TRUE; +} + +static void +video_converter_matrix16 (MatrixData * data, gpointer pixels) +{ + int i; + int r, g, b; + int y, u, v; + guint16 *p = pixels; + gint width = data->width; + + for (i = 0; i < width; i++) { + r = p[i * 4 + 1]; + g = p[i * 4 + 2]; + b = p[i * 4 + 3]; + + y = (data->im[0][0] * r + data->im[0][1] * g + + data->im[0][2] * b + data->im[0][3]) >> SCALE; + u = (data->im[1][0] * r + data->im[1][1] * g + + data->im[1][2] * b + data->im[1][3]) >> SCALE; + v = (data->im[2][0] * r + data->im[2][1] * g + + data->im[2][2] * b + data->im[2][3]) >> SCALE; + + p[i * 4 + 1] = CLAMP (y, 0, 65535); + p[i * 4 + 2] = CLAMP (u, 0, 65535); + p[i * 4 + 3] = CLAMP (v, 0, 65535); + } +} + + +static void +prepare_matrix (GstVideoConverter * convert, MatrixData * data) +{ + if (is_identity_matrix (data)) + return; + + color_matrix_scale_components (data, SCALE_F, SCALE_F, SCALE_F); + color_matrix_convert (data); + + data->width = convert->current_width; + + if (convert->current_bits == 8) { + if (!convert->unpack_rgb && convert->pack_rgb + && is_ayuv_to_rgb_matrix (data)) { + GST_DEBUG ("use fast AYUV -> RGB matrix"); + data->matrix_func = video_converter_matrix8_AYUV_ARGB; + } else if (is_no_clip_matrix (data)) { + GST_DEBUG ("use 8bit table"); + data->matrix_func = video_converter_matrix8_table; + videoconvert_convert_init_tables (data); + } else { + gint a03, a13, a23; + + GST_DEBUG ("use 8bit matrix"); + data->matrix_func = video_converter_matrix8; + + data->orc_p1 = (((guint64) (guint16) data->im[2][0]) << 48) | + (((guint64) (guint16) data->im[1][0]) << 32) | + (((guint64) (guint16) data->im[0][0]) << 16); + data->orc_p2 = (((guint64) (guint16) data->im[2][1]) << 48) | + (((guint64) (guint16) data->im[1][1]) << 32) | + (((guint64) (guint16) data->im[0][1]) << 16); + data->orc_p3 = (((guint64) (guint16) data->im[2][2]) << 48) | + (((guint64) (guint16) data->im[1][2]) << 32) | + (((guint64) (guint16) data->im[0][2]) << 16); + + a03 = data->im[0][3] >> SCALE; + a13 = data->im[1][3] >> SCALE; + a23 = data->im[2][3] >> SCALE; + + data->orc_p4 = (((guint64) (guint16) a23) << 48) | + (((guint64) (guint16) a13) << 32) | (((guint64) (guint16) a03) << 16); + } + } else { + GST_DEBUG ("use 16bit matrix"); + data->matrix_func = video_converter_matrix16; + } +} + +static void +compute_matrix_to_RGB (GstVideoConverter * convert, MatrixData * data) +{ + GstVideoInfo *info; + gdouble Kr = 0, Kb = 0; + + info = &convert->in_info; + + { + const GstVideoFormatInfo *uinfo; + gint offset[4], scale[4]; + + uinfo = gst_video_format_get_info (convert->unpack_format); + + /* bring color components to [0..1.0] range */ + gst_video_color_range_offsets (info->colorimetry.range, uinfo, offset, + scale); + + color_matrix_offset_components (data, -offset[0], -offset[1], -offset[2]); + color_matrix_scale_components (data, 1 / ((float) scale[0]), + 1 / ((float) scale[1]), 1 / ((float) scale[2])); + } + + if (!convert->unpack_rgb && !CHECK_MATRIX_NONE (convert)) { + if (CHECK_MATRIX_OUTPUT (convert)) + info = &convert->out_info; + + /* bring components to R'G'B' space */ + if (gst_video_color_matrix_get_Kr_Kb (info->colorimetry.matrix, &Kr, &Kb)) + color_matrix_YCbCr_to_RGB (data, Kr, Kb); + } + color_matrix_debug (data); +} + +static void +compute_matrix_to_YUV (GstVideoConverter * convert, MatrixData * data, + gboolean force) +{ + GstVideoInfo *info; + gdouble Kr = 0, Kb = 0; + + if (force || (!convert->pack_rgb && !CHECK_MATRIX_NONE (convert))) { + if (CHECK_MATRIX_INPUT (convert)) + info = &convert->in_info; + else + info = &convert->out_info; + + /* bring components to YCbCr space */ + if (gst_video_color_matrix_get_Kr_Kb (info->colorimetry.matrix, &Kr, &Kb)) + color_matrix_RGB_to_YCbCr (data, Kr, Kb); + } + + info = &convert->out_info; + + { + const GstVideoFormatInfo *uinfo; + gint offset[4], scale[4]; + + uinfo = gst_video_format_get_info (convert->pack_format); + + /* bring color components to nominal range */ + gst_video_color_range_offsets (info->colorimetry.range, uinfo, offset, + scale); + + color_matrix_scale_components (data, (float) scale[0], (float) scale[1], + (float) scale[2]); + color_matrix_offset_components (data, offset[0], offset[1], offset[2]); + } + + color_matrix_debug (data); +} + + +static void +gamma_convert_u8_u16 (GammaData * data, gpointer dest, gpointer src) +{ + gint i; + guint8 *s = src; + guint16 *d = dest; + guint16 *table = data->gamma_table; + gint width = data->width * 4; + + for (i = 0; i < width; i += 4) { + d[i + 0] = (s[i] << 8) | s[i]; + d[i + 1] = table[s[i + 1]]; + d[i + 2] = table[s[i + 2]]; + d[i + 3] = table[s[i + 3]]; + } +} + +static void +gamma_convert_u16_u8 (GammaData * data, gpointer dest, gpointer src) +{ + gint i; + guint16 *s = src; + guint8 *d = dest; + guint8 *table = data->gamma_table; + gint width = data->width * 4; + + for (i = 0; i < width; i += 4) { + d[i + 0] = s[i] >> 8; + d[i + 1] = table[s[i + 1]]; + d[i + 2] = table[s[i + 2]]; + d[i + 3] = table[s[i + 3]]; + } +} + +static void +gamma_convert_u16_u16 (GammaData * data, gpointer dest, gpointer src) +{ + gint i; + guint16 *s = src; + guint16 *d = dest; + guint16 *table = data->gamma_table; + gint width = data->width * 4; + + for (i = 0; i < width; i += 4) { + d[i + 0] = s[i]; + d[i + 1] = table[s[i + 1]]; + d[i + 2] = table[s[i + 2]]; + d[i + 3] = table[s[i + 3]]; + } +} + +static void +setup_gamma_decode (GstVideoConverter * convert) +{ + GstVideoTransferFunction func; + guint16 *t; + gint i; + + func = convert->in_info.colorimetry.transfer; + + convert->gamma_dec.width = convert->current_width; + if (convert->current_bits == 8) { + GST_DEBUG ("gamma decode 8->16: %d", func); + convert->gamma_dec.gamma_func = gamma_convert_u8_u16; + t = convert->gamma_dec.gamma_table = g_malloc (sizeof (guint16) * 256); + + for (i = 0; i < 256; i++) + t[i] = rint (gst_video_color_transfer_decode (func, i / 255.0) * 65535.0); + } else { + GST_DEBUG ("gamma decode 16->16: %d", func); + convert->gamma_dec.gamma_func = gamma_convert_u16_u16; + t = convert->gamma_dec.gamma_table = g_malloc (sizeof (guint16) * 65536); + + for (i = 0; i < 65536; i++) + t[i] = + rint (gst_video_color_transfer_decode (func, i / 65535.0) * 65535.0); + } + convert->current_bits = 16; + convert->current_pstride = 8; + convert->current_format = GST_VIDEO_FORMAT_ARGB64; +} + +static void +setup_gamma_encode (GstVideoConverter * convert, gint target_bits) +{ + GstVideoTransferFunction func; + gint i; + + func = convert->out_info.colorimetry.transfer; + + convert->gamma_enc.width = convert->current_width; + if (target_bits == 8) { + guint8 *t; + + GST_DEBUG ("gamma encode 16->8: %d", func); + convert->gamma_enc.gamma_func = gamma_convert_u16_u8; + t = convert->gamma_enc.gamma_table = g_malloc (sizeof (guint8) * 65536); + + for (i = 0; i < 65536; i++) + t[i] = rint (gst_video_color_transfer_encode (func, i / 65535.0) * 255.0); + } else { + guint16 *t; + + GST_DEBUG ("gamma encode 16->16: %d", func); + convert->gamma_enc.gamma_func = gamma_convert_u16_u16; + t = convert->gamma_enc.gamma_table = g_malloc (sizeof (guint16) * 65536); + + for (i = 0; i < 65536; i++) + t[i] = + rint (gst_video_color_transfer_encode (func, i / 65535.0) * 65535.0); + } +} + +static GstLineCache * +chain_convert_to_RGB (GstVideoConverter * convert, GstLineCache * prev) +{ + gboolean do_gamma; + + do_gamma = CHECK_GAMMA_REMAP (convert); + + if (do_gamma) { + gint scale; + + if (!convert->unpack_rgb) { + color_matrix_set_identity (&convert->to_RGB_matrix); + compute_matrix_to_RGB (convert, &convert->to_RGB_matrix); + + /* matrix is in 0..1 range, scale to current bits */ + GST_DEBUG ("chain RGB convert"); + scale = 1 << convert->current_bits; + color_matrix_scale_components (&convert->to_RGB_matrix, + (float) scale, (float) scale, (float) scale); + + prepare_matrix (convert, &convert->to_RGB_matrix); + + if (convert->current_bits == 8) + convert->current_format = GST_VIDEO_FORMAT_ARGB; + else + convert->current_format = GST_VIDEO_FORMAT_ARGB64; + } + + prev = convert->to_RGB_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = FALSE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->to_RGB_lines, + do_convert_to_RGB_lines, convert, NULL); + + GST_DEBUG ("chain gamma decode"); + setup_gamma_decode (convert); + } + return prev; +} + +static GstLineCache * +chain_hscale (GstVideoConverter * convert, GstLineCache * prev) +{ + gint method; + guint taps; + + method = GET_OPT_RESAMPLER_METHOD (convert); + taps = GET_OPT_RESAMPLER_TAPS (convert); + + convert->h_scaler = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps, + convert->in_width, convert->out_width, convert->config); + + gst_video_scaler_get_coeff (convert->h_scaler, 0, NULL, &taps); + + GST_DEBUG ("chain hscale %d->%d, taps %d, method %d", + convert->in_width, convert->out_width, taps, method); + + convert->current_width = convert->out_width; + convert->h_scale_format = convert->current_format; + + prev = convert->hscale_lines = gst_line_cache_new (prev); + prev->write_input = FALSE; + prev->pass_alloc = FALSE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->hscale_lines, + do_hscale_lines, convert, NULL); + + return prev; +} + +static GstLineCache * +chain_vscale (GstVideoConverter * convert, GstLineCache * prev) +{ + gint method; + guint taps, taps_i = 0; + gint backlog = 0; + + method = GET_OPT_RESAMPLER_METHOD (convert); + taps = GET_OPT_RESAMPLER_TAPS (convert); + + if (GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info)) { + convert->v_scaler_i = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_INTERLACED, + taps, convert->in_height, convert->out_height, convert->config); + + gst_video_scaler_get_coeff (convert->v_scaler_i, 0, NULL, &taps_i); + backlog = BACKLOG; + } + convert->v_scaler_p = + gst_video_scaler_new (method, 0, taps, convert->in_height, + convert->out_height, convert->config); + convert->v_scale_width = convert->current_width; + convert->v_scale_format = convert->current_format; + convert->current_height = convert->out_height; + + gst_video_scaler_get_coeff (convert->v_scaler_p, 0, NULL, &taps); + + GST_DEBUG ("chain vscale %d->%d, taps %d, method %d, backlog %d", + convert->in_height, convert->out_height, taps, method, backlog); + + prev->backlog = backlog; + prev = convert->vscale_lines = gst_line_cache_new (prev); + prev->pass_alloc = (taps == 1); + prev->write_input = FALSE; + prev->n_lines = MAX (taps_i, taps); + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->vscale_lines, + do_vscale_lines, convert, NULL); + + return prev; +} + +static GstLineCache * +chain_scale (GstVideoConverter * convert, GstLineCache * prev, gboolean force) +{ + gint s0, s1, s2, s3; + + s0 = convert->current_width * convert->current_height; + s3 = convert->out_width * convert->out_height; + + GST_DEBUG ("in pixels %d <> out pixels %d", s0, s3); + + if (s3 <= s0 || force) { + /* we are making the image smaller or are forced to resample */ + s1 = convert->out_width * convert->current_height; + s2 = convert->current_width * convert->out_height; + + GST_DEBUG ("%d <> %d", s1, s2); + + if (s1 <= s2) { + /* h scaling first produces less pixels */ + if (convert->current_width != convert->out_width) + prev = chain_hscale (convert, prev); + if (convert->current_height != convert->out_height) + prev = chain_vscale (convert, prev); + } else { + /* v scaling first produces less pixels */ + if (convert->current_height != convert->out_height) + prev = chain_vscale (convert, prev); + if (convert->current_width != convert->out_width) + prev = chain_hscale (convert, prev); + } + } + return prev; +} + +static GstLineCache * +chain_convert (GstVideoConverter * convert, GstLineCache * prev) +{ + gboolean do_gamma, do_conversion, pass_alloc = FALSE; + gboolean same_matrix, same_primaries, same_bits; + MatrixData p1, p2; + + same_bits = convert->unpack_bits == convert->pack_bits; + if (CHECK_MATRIX_NONE (convert)) { + same_matrix = TRUE; + } else { + same_matrix = + convert->in_info.colorimetry.matrix == + convert->out_info.colorimetry.matrix; + } + + if (CHECK_PRIMARIES_NONE (convert)) { + same_primaries = TRUE; + } else { + same_primaries = + convert->in_info.colorimetry.primaries == + convert->out_info.colorimetry.primaries; + } + + GST_DEBUG ("matrix %d -> %d (%d)", convert->in_info.colorimetry.matrix, + convert->out_info.colorimetry.matrix, same_matrix); + GST_DEBUG ("bits %d -> %d (%d)", convert->unpack_bits, convert->pack_bits, + same_bits); + GST_DEBUG ("primaries %d -> %d (%d)", convert->in_info.colorimetry.primaries, + convert->out_info.colorimetry.primaries, same_primaries); + + color_matrix_set_identity (&convert->convert_matrix); + + if (!same_primaries) { + const GstVideoColorPrimariesInfo *pi; + + pi = gst_video_color_primaries_get_info (convert->in_info.colorimetry. + primaries); + color_matrix_RGB_to_XYZ (&p1, pi->Rx, pi->Ry, pi->Gx, pi->Gy, pi->Bx, + pi->By, pi->Wx, pi->Wy); + GST_DEBUG ("to XYZ matrix"); + color_matrix_debug (&p1); + GST_DEBUG ("current matrix"); + color_matrix_multiply (&convert->convert_matrix, &convert->convert_matrix, + &p1); + color_matrix_debug (&convert->convert_matrix); + + pi = gst_video_color_primaries_get_info (convert->out_info.colorimetry. + primaries); + color_matrix_RGB_to_XYZ (&p2, pi->Rx, pi->Ry, pi->Gx, pi->Gy, pi->Bx, + pi->By, pi->Wx, pi->Wy); + color_matrix_invert (&p2, &p2); + GST_DEBUG ("to RGB matrix"); + color_matrix_debug (&p2); + color_matrix_multiply (&convert->convert_matrix, &convert->convert_matrix, + &p2); + GST_DEBUG ("current matrix"); + color_matrix_debug (&convert->convert_matrix); + } + + do_gamma = CHECK_GAMMA_REMAP (convert); + if (!do_gamma) { + + convert->in_bits = convert->unpack_bits; + convert->out_bits = convert->pack_bits; + + if (!same_bits || !same_matrix || !same_primaries) { + /* no gamma, combine all conversions into 1 */ + if (convert->in_bits < convert->out_bits) { + gint scale = 1 << (convert->out_bits - convert->in_bits); + color_matrix_scale_components (&convert->convert_matrix, + 1 / (float) scale, 1 / (float) scale, 1 / (float) scale); + } + GST_DEBUG ("to RGB matrix"); + compute_matrix_to_RGB (convert, &convert->convert_matrix); + GST_DEBUG ("current matrix"); + color_matrix_debug (&convert->convert_matrix); + + GST_DEBUG ("to YUV matrix"); + compute_matrix_to_YUV (convert, &convert->convert_matrix, FALSE); + GST_DEBUG ("current matrix"); + color_matrix_debug (&convert->convert_matrix); + if (convert->in_bits > convert->out_bits) { + gint scale = 1 << (convert->in_bits - convert->out_bits); + color_matrix_scale_components (&convert->convert_matrix, + (float) scale, (float) scale, (float) scale); + } + convert->current_bits = MAX (convert->in_bits, convert->out_bits); + + do_conversion = TRUE; + if (!same_matrix || !same_primaries) + prepare_matrix (convert, &convert->convert_matrix); + if (convert->in_bits == convert->out_bits) + pass_alloc = TRUE; + } else + do_conversion = FALSE; + + convert->current_bits = convert->pack_bits; + convert->current_format = convert->pack_format; + convert->current_pstride = convert->current_bits >> 1; + } else { + /* we did gamma, just do colorspace conversion if needed */ + if (same_primaries) { + do_conversion = FALSE; + } else { + prepare_matrix (convert, &convert->convert_matrix); + convert->in_bits = convert->out_bits = 16; + pass_alloc = TRUE; + do_conversion = TRUE; + } + } + + if (do_conversion) { + GST_DEBUG ("chain conversion"); + prev = convert->convert_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = pass_alloc; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->convert_lines, + do_convert_lines, convert, NULL); + } + return prev; +} + +static void +convert_set_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width) +{ + guint8 *p = pixels; + guint8 alpha = MIN (convert->alpha_value, 255); + int i; + + for (i = 0; i < width; i++) + p[i * 4] = alpha; +} + +static void +convert_set_alpha_u16 (GstVideoConverter * convert, gpointer pixels, gint width) +{ + guint16 *p = pixels; + guint16 alpha; + int i; + + alpha = MIN (convert->alpha_value, 255); + alpha |= alpha << 8; + + for (i = 0; i < width; i++) + p[i * 4] = alpha; +} + +static void +convert_mult_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width) +{ + guint8 *p = pixels; + guint alpha = convert->alpha_value; + int i; + + for (i = 0; i < width; i++) { + gint a = (p[i * 4] * alpha) / 255; + p[i * 4] = CLAMP (a, 0, 255); + } +} + +static void +convert_mult_alpha_u16 (GstVideoConverter * convert, gpointer pixels, + gint width) +{ + guint16 *p = pixels; + guint alpha = convert->alpha_value; + int i; + + for (i = 0; i < width; i++) { + gint a = (p[i * 4] * alpha) / 255; + p[i * 4] = CLAMP (a, 0, 65535); + } +} + +static GstLineCache * +chain_alpha (GstVideoConverter * convert, GstLineCache * prev) +{ + switch (convert->alpha_mode) { + case ALPHA_MODE_NONE: + case ALPHA_MODE_COPY: + return prev; + + case ALPHA_MODE_SET: + if (convert->current_bits == 8) + convert->alpha_func = convert_set_alpha_u8; + else + convert->alpha_func = convert_set_alpha_u16; + break; + case ALPHA_MODE_MULT: + if (convert->current_bits == 8) + convert->alpha_func = convert_mult_alpha_u8; + else + convert->alpha_func = convert_mult_alpha_u16; + break; + } + + GST_DEBUG ("chain alpha mode %d", convert->alpha_mode); + prev = convert->alpha_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = TRUE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->alpha_lines, + do_alpha_lines, convert, NULL); + + return prev; +} + +static GstLineCache * +chain_convert_to_YUV (GstVideoConverter * convert, GstLineCache * prev) +{ + gboolean do_gamma; + + do_gamma = CHECK_GAMMA_REMAP (convert); + + if (do_gamma) { + gint scale; + + GST_DEBUG ("chain gamma encode"); + setup_gamma_encode (convert, convert->pack_bits); + + convert->current_bits = convert->pack_bits; + convert->current_pstride = convert->current_bits >> 1; + + if (!convert->pack_rgb) { + color_matrix_set_identity (&convert->to_YUV_matrix); + compute_matrix_to_YUV (convert, &convert->to_YUV_matrix, FALSE); + + /* matrix is in 0..255 range, scale to pack bits */ + GST_DEBUG ("chain YUV convert"); + scale = 1 << convert->pack_bits; + color_matrix_scale_components (&convert->to_YUV_matrix, + 1 / (float) scale, 1 / (float) scale, 1 / (float) scale); + prepare_matrix (convert, &convert->to_YUV_matrix); + } + convert->current_format = convert->pack_format; + + prev = convert->to_YUV_lines = gst_line_cache_new (prev); + prev->write_input = FALSE; + prev->pass_alloc = FALSE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->to_YUV_lines, + do_convert_to_YUV_lines, convert, NULL); + } + + return prev; +} + +static GstLineCache * +chain_downsample (GstVideoConverter * convert, GstLineCache * prev) +{ + if (convert->downsample_p || convert->downsample_i) { + GST_DEBUG ("chain downsample"); + prev = convert->downsample_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = TRUE; + prev->n_lines = 4; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (convert->downsample_lines, + do_downsample_lines, convert, NULL); + } + return prev; +} + +static GstLineCache * +chain_dither (GstVideoConverter * convert, GstLineCache * prev) +{ + gint i; + gboolean do_dither = FALSE; + GstVideoDitherFlags flags = 0; + GstVideoDitherMethod method; + guint quant[4], target_quant; + + method = GET_OPT_DITHER_METHOD (convert); + if (method == GST_VIDEO_DITHER_NONE) + return prev; + + target_quant = GET_OPT_DITHER_QUANTIZATION (convert); + GST_DEBUG ("method %d, target-quantization %d", method, target_quant); + + if (convert->pack_pal) { + quant[0] = 47; + quant[1] = 47; + quant[2] = 47; + quant[3] = 1; + do_dither = TRUE; + } else { + for (i = 0; i < GST_VIDEO_MAX_COMPONENTS; i++) { + gint depth; + + depth = convert->out_info.finfo->depth[i]; + + if (depth == 0) { + quant[i] = 0; + continue; + } + + if (convert->current_bits >= depth) { + quant[i] = 1 << (convert->current_bits - depth); + if (target_quant > quant[i]) { + flags |= GST_VIDEO_DITHER_FLAG_QUANTIZE; + quant[i] = target_quant; + } + } else { + quant[i] = 0; + } + if (quant[i] > 1) + do_dither = TRUE; + } + } + + if (do_dither) { + GST_DEBUG ("chain dither"); + + convert->dither = gst_video_dither_new (method, + flags, convert->pack_format, quant, convert->current_width); + + prev = convert->dither_lines = gst_line_cache_new (prev); + prev->write_input = TRUE; + prev->pass_alloc = TRUE; + prev->n_lines = 1; + prev->stride = convert->current_pstride * convert->current_width; + gst_line_cache_set_need_line_func (prev, do_dither_lines, convert, NULL); + } + return prev; +} + +static GstLineCache * +chain_pack (GstVideoConverter * convert, GstLineCache * prev) +{ + convert->pack_nlines = convert->out_info.finfo->pack_lines; + convert->pack_pstride = convert->current_pstride; + convert->identity_pack = + (convert->out_info.finfo->format == + convert->out_info.finfo->unpack_format); + GST_DEBUG ("chain pack line format %s, pstride %d, identity_pack %d (%d %d)", + gst_video_format_to_string (convert->current_format), + convert->current_pstride, convert->identity_pack, + convert->out_info.finfo->format, convert->out_info.finfo->unpack_format); + + return prev; +} + +static void +setup_allocators (GstVideoConverter * convert) +{ + GstLineCache *cache; + GstLineCacheAllocLineFunc alloc_line; + gboolean alloc_writable; + gpointer user_data; + GDestroyNotify notify; + gint width, n_lines; + + width = MAX (convert->in_maxwidth, convert->out_maxwidth); + width += convert->out_x; + + n_lines = 1; + + /* start with using dest lines if we can directly write into it */ + if (convert->identity_pack) { + alloc_line = get_dest_line; + alloc_writable = TRUE; + user_data = convert; + notify = NULL; + } else { + user_data = + converter_alloc_new (sizeof (guint16) * width * 4, 4 + BACKLOG, convert, + NULL); + setup_border_alloc (convert, user_data); + notify = (GDestroyNotify) converter_alloc_free; + alloc_line = get_border_temp_line; + /* when we add a border, we need to write */ + alloc_writable = convert->borderline != NULL; + } + + /* now walk backwards, we try to write into the dest lines directly + * and keep track if the source needs to be writable */ + for (cache = convert->pack_lines; cache; cache = cache->prev) { + gst_line_cache_set_alloc_line_func (cache, alloc_line, user_data, notify); + cache->alloc_writable = alloc_writable; + n_lines = MAX (n_lines, cache->n_lines); + + /* make sure only one cache frees the allocator */ + notify = NULL; + + if (!cache->pass_alloc) { + /* can't pass allocator, make new temp line allocator */ + user_data = + converter_alloc_new (sizeof (guint16) * width * 4, n_lines + BACKLOG, + convert, NULL); + notify = (GDestroyNotify) converter_alloc_free; + alloc_line = get_temp_line; + alloc_writable = FALSE; + n_lines = cache->n_lines; + } + /* if someone writes to the input, we need a writable line from the + * previous cache */ + if (cache->write_input) + alloc_writable = TRUE; + } + /* free leftover allocator */ + if (notify) + notify (user_data); +} + +static void +setup_borderline (GstVideoConverter * convert) +{ + gint width; + + width = MAX (convert->in_maxwidth, convert->out_maxwidth); + width += convert->out_x; + + if (convert->fill_border && (convert->out_height < convert->out_maxheight || + convert->out_width < convert->out_maxwidth)) { + guint32 border_val; + gint i, w_sub; + const GstVideoFormatInfo *out_finfo; + gpointer planes[GST_VIDEO_MAX_PLANES]; + gint strides[GST_VIDEO_MAX_PLANES]; + + convert->borderline = g_malloc0 (sizeof (guint16) * width * 4); + + out_finfo = convert->out_info.finfo; + + if (GST_VIDEO_INFO_IS_YUV (&convert->out_info)) { + MatrixData cm; + gint a, r, g, b; + gint y, u, v; + + /* Get Color matrix. */ + color_matrix_set_identity (&cm); + compute_matrix_to_YUV (convert, &cm, TRUE); + color_matrix_convert (&cm); + + border_val = GINT32_FROM_BE (convert->border_argb); + + b = (0xFF000000 & border_val) >> 24; + g = (0x00FF0000 & border_val) >> 16; + r = (0x0000FF00 & border_val) >> 8; + a = (0x000000FF & border_val); + + y = 16 + ((r * cm.im[0][0] + g * cm.im[0][1] + b * cm.im[0][2]) >> 8); + u = 128 + ((r * cm.im[1][0] + g * cm.im[1][1] + b * cm.im[1][2]) >> 8); + v = 128 + ((r * cm.im[2][0] + g * cm.im[2][1] + b * cm.im[2][2]) >> 8); + + a = CLAMP (a, 0, 255); + y = CLAMP (y, 0, 255); + u = CLAMP (u, 0, 255); + v = CLAMP (v, 0, 255); + + border_val = a | (y << 8) | (u << 16) | (v << 24); + } else { + border_val = GINT32_FROM_BE (convert->border_argb); + } + if (convert->pack_bits == 8) + video_orc_splat_u32 (convert->borderline, border_val, width); + else + video_orc_splat2_u64 (convert->borderline, border_val, width); + + /* convert pixels */ + for (i = 0; i < out_finfo->n_planes; i++) { + planes[i] = &convert->borders[i]; + strides[i] = sizeof (guint64); + } + w_sub = 0; + if (out_finfo->n_planes == 1) { + /* for packed formats, convert based on subsampling so that we + * get a complete group of pixels */ + for (i = 0; i < out_finfo->n_components; i++) { + w_sub = MAX (w_sub, out_finfo->w_sub[i]); + } + } + out_finfo->pack_func (out_finfo, GST_VIDEO_PACK_FLAG_NONE, + convert->borderline, 0, planes, strides, + GST_VIDEO_CHROMA_SITE_UNKNOWN, 0, 1 << w_sub); + } else { + convert->borderline = NULL; + } +} + +static AlphaMode +convert_get_alpha_mode (GstVideoConverter * convert) +{ + gboolean in_alpha, out_alpha; + + in_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->in_info); + out_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->out_info); + + /* no output alpha, do nothing */ + if (!out_alpha) + return ALPHA_MODE_NONE; + + if (in_alpha) { + /* in and out */ + if (CHECK_ALPHA_COPY (convert)) + return ALPHA_MODE_COPY; + + if (CHECK_ALPHA_MULT (convert)) { + if (GET_OPT_ALPHA_VALUE (convert) == 1.0) + return ALPHA_MODE_COPY; + else + return ALPHA_MODE_MULT; + } + } + /* nothing special, this is what unpack etc does automatically */ + if (GET_OPT_ALPHA_VALUE (convert) == 1.0) + return ALPHA_MODE_NONE; + + /* everything else becomes SET */ + return ALPHA_MODE_SET; +} + +/** + * gst_video_converter_new: (skip) + * @in_info: a #GstVideoInfo + * @out_info: a #GstVideoInfo + * @config: (transfer full): a #GstStructure with configuration options + * + * Create a new converter object to convert between @in_info and @out_info + * with @config. + * + * Returns: a #GstVideoConverter or %NULL if conversion is not possible. + * + * Since: 1.6 + */ +GstVideoConverter * +gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info, + GstStructure * config) +{ + GstVideoConverter *convert; + GstLineCache *prev; + const GstVideoFormatInfo *fin, *fout, *finfo; + gdouble alpha_value; + + g_return_val_if_fail (in_info != NULL, NULL); + g_return_val_if_fail (out_info != NULL, NULL); + /* we won't ever do framerate conversion */ + g_return_val_if_fail (in_info->fps_n == out_info->fps_n, NULL); + g_return_val_if_fail (in_info->fps_d == out_info->fps_d, NULL); + /* we won't ever do deinterlace */ + g_return_val_if_fail (in_info->interlace_mode == out_info->interlace_mode, + NULL); + + convert = g_slice_new0 (GstVideoConverter); + + fin = in_info->finfo; + fout = out_info->finfo; + + convert->in_info = *in_info; + convert->out_info = *out_info; + + /* default config */ + convert->config = gst_structure_new_empty ("GstVideoConverter"); + if (config) + gst_video_converter_set_config (convert, config); + + convert->in_maxwidth = GST_VIDEO_INFO_WIDTH (in_info); + convert->in_maxheight = GST_VIDEO_INFO_HEIGHT (in_info); + convert->out_maxwidth = GST_VIDEO_INFO_WIDTH (out_info); + convert->out_maxheight = GST_VIDEO_INFO_HEIGHT (out_info); + + convert->in_x = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_SRC_X, 0); + convert->in_y = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_SRC_Y, 0); + convert->in_x &= ~((1 << fin->w_sub[1]) - 1); + convert->in_y &= ~((1 << fin->h_sub[1]) - 1); + + convert->in_width = get_opt_int (convert, + GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, convert->in_maxwidth - convert->in_x); + convert->in_height = get_opt_int (convert, + GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT, + convert->in_maxheight - convert->in_y); + + convert->in_width = + MIN (convert->in_width, convert->in_maxwidth - convert->in_x); + convert->in_height = + MIN (convert->in_height, convert->in_maxheight - convert->in_y); + + convert->out_x = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_X, 0); + convert->out_y = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_Y, 0); + convert->out_x &= ~((1 << fout->w_sub[1]) - 1); + convert->out_y &= ~((1 << fout->h_sub[1]) - 1); + + convert->out_width = get_opt_int (convert, + GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, + convert->out_maxwidth - convert->out_x); + convert->out_height = + get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, + convert->out_maxheight - convert->out_y); + + convert->out_width = + MIN (convert->out_width, convert->out_maxwidth - convert->out_x); + convert->out_height = + MIN (convert->out_height, convert->out_maxheight - convert->out_y); + + convert->fill_border = GET_OPT_FILL_BORDER (convert); + convert->border_argb = get_opt_uint (convert, + GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB); + + alpha_value = GET_OPT_ALPHA_VALUE (convert); + convert->alpha_value = 255 * alpha_value; + convert->alpha_mode = convert_get_alpha_mode (convert); + + convert->unpack_format = in_info->finfo->unpack_format; + finfo = gst_video_format_get_info (convert->unpack_format); + convert->unpack_bits = GST_VIDEO_FORMAT_INFO_DEPTH (finfo, 0); + convert->unpack_rgb = GST_VIDEO_FORMAT_INFO_IS_RGB (finfo); + + convert->pack_format = out_info->finfo->unpack_format; + finfo = gst_video_format_get_info (convert->pack_format); + convert->pack_bits = GST_VIDEO_FORMAT_INFO_DEPTH (finfo, 0); + convert->pack_rgb = GST_VIDEO_FORMAT_INFO_IS_RGB (finfo); + convert->pack_pal = + gst_video_format_get_palette (GST_VIDEO_INFO_FORMAT (out_info), + &convert->pack_palsize); + + if (video_converter_lookup_fastpath (convert)) + goto done; + + if (in_info->finfo->unpack_func == NULL) + goto no_unpack_func; + + if (out_info->finfo->pack_func == NULL) + goto no_pack_func; + + convert->convert = video_converter_generic; + + convert->current_format = GST_VIDEO_INFO_FORMAT (in_info); + convert->current_width = convert->in_width; + convert->current_height = convert->in_height; + + /* unpack */ + prev = chain_unpack_line (convert); + /* upsample chroma */ + prev = chain_upsample (convert, prev); + /* convert to gamma decoded RGB */ + prev = chain_convert_to_RGB (convert, prev); + /* do all downscaling */ + prev = chain_scale (convert, prev, FALSE); + /* do conversion between color spaces */ + prev = chain_convert (convert, prev); + /* do alpha channels */ + prev = chain_alpha (convert, prev); + /* do all remaining (up)scaling */ + prev = chain_scale (convert, prev, TRUE); + /* convert to gamma encoded Y'Cb'Cr' */ + prev = chain_convert_to_YUV (convert, prev); + /* downsample chroma */ + prev = chain_downsample (convert, prev); + /* dither */ + prev = chain_dither (convert, prev); + /* pack into final format */ + convert->pack_lines = chain_pack (convert, prev); + + setup_borderline (convert); + /* now figure out allocators */ + setup_allocators (convert); + +done: + return convert; + + /* ERRORS */ +no_unpack_func: + { + GST_ERROR ("no unpack_func for format %s", + gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (in_info))); + gst_video_converter_free (convert); + return NULL; + } +no_pack_func: + { + GST_ERROR ("no pack_func for format %s", + gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (out_info))); + gst_video_converter_free (convert); + return NULL; + } +} + +static void +clear_matrix_data (MatrixData * data) +{ + g_free (data->t_r); + g_free (data->t_g); + g_free (data->t_b); +} + +/** + * gst_video_converter_free: + * @convert: a #GstVideoConverter + * + * Free @convert + * + * Since: 1.6 + */ +void +gst_video_converter_free (GstVideoConverter * convert) +{ + gint i; + + g_return_if_fail (convert != NULL); + + if (convert->upsample_p) + gst_video_chroma_resample_free (convert->upsample_p); + if (convert->upsample_i) + gst_video_chroma_resample_free (convert->upsample_i); + if (convert->downsample_p) + gst_video_chroma_resample_free (convert->downsample_p); + if (convert->downsample_i) + gst_video_chroma_resample_free (convert->downsample_i); + if (convert->v_scaler_p) + gst_video_scaler_free (convert->v_scaler_p); + if (convert->v_scaler_i) + gst_video_scaler_free (convert->v_scaler_i); + if (convert->h_scaler) + gst_video_scaler_free (convert->h_scaler); + + if (convert->unpack_lines) + gst_line_cache_free (convert->unpack_lines); + if (convert->upsample_lines) + gst_line_cache_free (convert->upsample_lines); + if (convert->to_RGB_lines) + gst_line_cache_free (convert->to_RGB_lines); + if (convert->hscale_lines) + gst_line_cache_free (convert->hscale_lines); + if (convert->vscale_lines) + gst_line_cache_free (convert->vscale_lines); + if (convert->convert_lines) + gst_line_cache_free (convert->convert_lines); + if (convert->alpha_lines) + gst_line_cache_free (convert->alpha_lines); + if (convert->to_YUV_lines) + gst_line_cache_free (convert->to_YUV_lines); + if (convert->downsample_lines) + gst_line_cache_free (convert->downsample_lines); + if (convert->dither_lines) + gst_line_cache_free (convert->dither_lines); + + if (convert->dither) + gst_video_dither_free (convert->dither); + + g_free (convert->gamma_dec.gamma_table); + g_free (convert->gamma_enc.gamma_table); + + g_free (convert->tmpline); + g_free (convert->borderline); + + if (convert->config) + gst_structure_free (convert->config); + + for (i = 0; i < 4; i++) { + if (convert->fv_scaler[i]) + gst_video_scaler_free (convert->fv_scaler[i]); + if (convert->fh_scaler[i]) + gst_video_scaler_free (convert->fh_scaler[i]); + } + clear_matrix_data (&convert->to_RGB_matrix); + clear_matrix_data (&convert->convert_matrix); + clear_matrix_data (&convert->to_YUV_matrix); + + g_slice_free (GstVideoConverter, convert); +} + +static gboolean +copy_config (GQuark field_id, const GValue * value, gpointer user_data) +{ + GstVideoConverter *convert = user_data; + + gst_structure_id_set_value (convert->config, field_id, value); + + return TRUE; +} + +/** + * gst_video_converter_set_config: + * @convert: a #GstVideoConverter + * @config: (transfer full): a #GstStructure + * + * Set @config as extra configuraion for @convert. + * + * If the parameters in @config can not be set exactly, this function returns + * %FALSE and will try to update as much state as possible. The new state can + * then be retrieved and refined with gst_video_converter_get_config(). + * + * Look at the #GST_VIDEO_CONVERTER_OPT_* fields to check valid configuration + * option and values. + * + * Returns: %TRUE when @config could be set. + * + * Since: 1.6 + */ +gboolean +gst_video_converter_set_config (GstVideoConverter * convert, + GstStructure * config) +{ + g_return_val_if_fail (convert != NULL, FALSE); + g_return_val_if_fail (config != NULL, FALSE); + + gst_structure_foreach (config, copy_config, convert); + gst_structure_free (config); + + return TRUE; +} + +/** + * gst_video_converter_get_config: + * @convert: a #GstVideoConverter + * + * Get the current configuration of @convert. + * + * Returns: a #GstStructure that remains valid for as long as @convert is valid + * or until gst_video_converter_set_config() is called. + */ +const GstStructure * +gst_video_converter_get_config (GstVideoConverter * convert) +{ + g_return_val_if_fail (convert != NULL, NULL); + + return convert->config; +} + +/** + * gst_video_converter_frame: + * @convert: a #GstVideoConverter + * @dest: a #GstVideoFrame + * @src: a #GstVideoFrame + * + * Convert the pixels of @src into @dest using @convert. + * + * Since: 1.6 + */ +void +gst_video_converter_frame (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest) +{ + g_return_if_fail (convert != NULL); + g_return_if_fail (src != NULL); + g_return_if_fail (dest != NULL); + + convert->convert (convert, src, dest); +} + +static void +video_converter_compute_matrix (GstVideoConverter * convert) +{ + MatrixData *dst = &convert->convert_matrix; + + color_matrix_set_identity (dst); + compute_matrix_to_RGB (convert, dst); + compute_matrix_to_YUV (convert, dst, FALSE); + + convert->current_bits = 8; + prepare_matrix (convert, dst); +} + +static void +video_converter_compute_resample (GstVideoConverter * convert) +{ + GstVideoInfo *in_info, *out_info; + const GstVideoFormatInfo *sfinfo, *dfinfo; + + if (CHECK_CHROMA_NONE (convert)) + return; + + in_info = &convert->in_info; + out_info = &convert->out_info; + + sfinfo = in_info->finfo; + dfinfo = out_info->finfo; + + GST_DEBUG ("site: %d->%d, w_sub: %d->%d, h_sub: %d->%d", in_info->chroma_site, + out_info->chroma_site, sfinfo->w_sub[2], dfinfo->w_sub[2], + sfinfo->h_sub[2], dfinfo->h_sub[2]); + + if (sfinfo->w_sub[2] != dfinfo->w_sub[2] || + sfinfo->h_sub[2] != dfinfo->h_sub[2] || + in_info->chroma_site != out_info->chroma_site || + in_info->width != out_info->width || + in_info->height != out_info->height) { + if (GST_VIDEO_INFO_IS_INTERLACED (in_info)) { + if (!CHECK_CHROMA_DOWNSAMPLE (convert)) + convert->upsample_i = gst_video_chroma_resample_new (0, + in_info->chroma_site, GST_VIDEO_CHROMA_FLAG_INTERLACED, + sfinfo->unpack_format, sfinfo->w_sub[2], sfinfo->h_sub[2]); + if (!CHECK_CHROMA_UPSAMPLE (convert)) + convert->downsample_i = + gst_video_chroma_resample_new (0, out_info->chroma_site, + GST_VIDEO_CHROMA_FLAG_INTERLACED, dfinfo->unpack_format, + -dfinfo->w_sub[2], -dfinfo->h_sub[2]); + } + if (!CHECK_CHROMA_DOWNSAMPLE (convert)) + convert->upsample_p = gst_video_chroma_resample_new (0, + in_info->chroma_site, 0, sfinfo->unpack_format, sfinfo->w_sub[2], + sfinfo->h_sub[2]); + if (!CHECK_CHROMA_UPSAMPLE (convert)) + convert->downsample_p = gst_video_chroma_resample_new (0, + out_info->chroma_site, 0, dfinfo->unpack_format, -dfinfo->w_sub[2], + -dfinfo->h_sub[2]); + } +} + +#define FRAME_GET_PLANE_STRIDE(frame, plane) \ + GST_VIDEO_FRAME_PLANE_STRIDE (frame, plane) +#define FRAME_GET_PLANE_LINE(frame, plane, line) \ + (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, plane))) + \ + FRAME_GET_PLANE_STRIDE (frame, plane) * (line)) + +#define FRAME_GET_COMP_STRIDE(frame, comp) \ + GST_VIDEO_FRAME_COMP_STRIDE (frame, comp) +#define FRAME_GET_COMP_LINE(frame, comp, line) \ + (gpointer)(((guint8*)(GST_VIDEO_FRAME_COMP_DATA (frame, comp))) + \ + FRAME_GET_COMP_STRIDE (frame, comp) * (line)) + +#define FRAME_GET_STRIDE(frame) FRAME_GET_PLANE_STRIDE (frame, 0) +#define FRAME_GET_LINE(frame,line) FRAME_GET_PLANE_LINE (frame, 0, line) + +#define FRAME_GET_Y_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_Y, line) +#define FRAME_GET_U_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_U, line) +#define FRAME_GET_V_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_V, line) +#define FRAME_GET_A_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_A, line) + +#define FRAME_GET_Y_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_Y) +#define FRAME_GET_U_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_U) +#define FRAME_GET_V_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_V) +#define FRAME_GET_A_STRIDE(frame) FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_A) + + +#define UNPACK_FRAME(frame,dest,line,x,width) \ + frame->info.finfo->unpack_func (frame->info.finfo, \ + (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ + GST_VIDEO_PACK_FLAG_INTERLACED : \ + GST_VIDEO_PACK_FLAG_NONE), \ + dest, frame->data, frame->info.stride, x, \ + line, width) +#define PACK_FRAME(frame,src,line,width) \ + frame->info.finfo->pack_func (frame->info.finfo, \ + (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ + GST_VIDEO_PACK_FLAG_INTERLACED : \ + GST_VIDEO_PACK_FLAG_NONE), \ + src, 0, frame->data, frame->info.stride, \ + frame->info.chroma_site, line, width); + +static gpointer +get_dest_line (GstLineCache * cache, gint idx, gpointer user_data) +{ + GstVideoConverter *convert = user_data; + guint8 *line; + gint pstride = convert->pack_pstride; + gint out_x = convert->out_x; + guint cline; + + cline = CLAMP (idx, 0, convert->out_maxheight - 1); + + line = FRAME_GET_LINE (convert->dest, cline); + GST_DEBUG ("get dest line %d %p", cline, line); + + if (convert->borderline) { + gint r_border = (out_x + convert->out_width) * pstride; + gint rb_width = convert->out_maxwidth * pstride - r_border; + gint lb_width = out_x * pstride; + + memcpy (line, convert->borderline, lb_width); + memcpy (line + r_border, convert->borderline, rb_width); + } + line += out_x * pstride; + + return line; +} + +static gboolean +do_unpack_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer tmpline; + guint cline; + + cline = CLAMP (in_line + convert->in_y, 0, convert->in_maxheight - 1); + + if (cache->alloc_writable || !convert->identity_unpack) { + tmpline = gst_line_cache_alloc_line (cache, out_line); + GST_DEBUG ("unpack line %d (%u) %p", in_line, cline, tmpline); + UNPACK_FRAME (convert->src, tmpline, cline, convert->in_x, + convert->in_width); + } else { + tmpline = ((guint8 *) FRAME_GET_LINE (convert->src, cline)) + + convert->in_x * convert->unpack_pstride; + GST_DEBUG ("get src line %d (%u) %p", in_line, cline, tmpline); + } + gst_line_cache_add_line (cache, in_line, tmpline); + + return TRUE; +} + +static gboolean +do_upsample_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer *lines; + gint i, start_line, n_lines; + + n_lines = convert->up_n_lines; + start_line = in_line; + if (start_line < n_lines + convert->up_offset) { + start_line += convert->up_offset; + out_line += convert->up_offset; + } + + /* get the lines needed for chroma upsample */ + lines = gst_line_cache_get_lines (cache->prev, out_line, start_line, n_lines); + + if (convert->upsample) { + GST_DEBUG ("doing upsample %d-%d %p", start_line, start_line + n_lines - 1, + lines[0]); + gst_video_chroma_resample (convert->upsample, lines, convert->in_width); + } + + for (i = 0; i < n_lines; i++) + gst_line_cache_add_line (cache, start_line + i, lines[i]); + + return TRUE; +} + +static gboolean +do_convert_to_RGB_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + MatrixData *data = &convert->to_RGB_matrix; + gpointer *lines, destline; + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + destline = lines[0]; + + if (data->matrix_func) { + GST_DEBUG ("to RGB line %d %p", in_line, destline); + data->matrix_func (data, destline); + } + if (convert->gamma_dec.gamma_func) { + destline = gst_line_cache_alloc_line (cache, out_line); + + GST_DEBUG ("gamma decode line %d %p->%p", in_line, lines[0], destline); + convert->gamma_dec.gamma_func (&convert->gamma_dec, destline, lines[0]); + } + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_hscale_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer *lines, destline; + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + + destline = gst_line_cache_alloc_line (cache, out_line); + + GST_DEBUG ("hresample line %d %p->%p", in_line, lines[0], destline); + gst_video_scaler_horizontal (convert->h_scaler, convert->h_scale_format, + lines[0], destline, 0, convert->out_width); + + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_vscale_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer *lines, destline; + guint sline, n_lines; + guint cline; + + cline = CLAMP (in_line, 0, convert->out_height - 1); + + gst_video_scaler_get_coeff (convert->v_scaler, cline, &sline, &n_lines); + lines = gst_line_cache_get_lines (cache->prev, out_line, sline, n_lines); + + destline = gst_line_cache_alloc_line (cache, out_line); + + GST_DEBUG ("vresample line %d %d-%d %p->%p", in_line, sline, + sline + n_lines - 1, lines[0], destline); + gst_video_scaler_vertical (convert->v_scaler, convert->v_scale_format, lines, + destline, cline, convert->v_scale_width); + + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_convert_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + MatrixData *data = &convert->convert_matrix; + gpointer *lines, destline; + guint in_bits, out_bits; + gint width; + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + + destline = lines[0]; + + in_bits = convert->in_bits; + out_bits = convert->out_bits; + + width = MIN (convert->in_width, convert->out_width); + + if (out_bits == 16 || in_bits == 16) { + gpointer srcline = lines[0]; + + if (out_bits != in_bits) + destline = gst_line_cache_alloc_line (cache, out_line); + + /* FIXME, we can scale in the conversion matrix */ + if (in_bits == 8) { + GST_DEBUG ("8->16 line %d %p->%p", in_line, srcline, destline); + video_orc_convert_u8_to_u16 (destline, srcline, width * 4); + srcline = destline; + } + + if (data->matrix_func) { + GST_DEBUG ("matrix line %d %p", in_line, srcline); + data->matrix_func (data, srcline); + } + + /* FIXME, dither here */ + if (out_bits == 8) { + GST_DEBUG ("16->8 line %d %p->%p", in_line, srcline, destline); + video_orc_convert_u16_to_u8 (destline, srcline, width * 4); + } + } else { + if (data->matrix_func) { + GST_DEBUG ("matrix line %d %p", in_line, destline); + data->matrix_func (data, destline); + } + } + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_alpha_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + gpointer *lines, destline; + GstVideoConverter *convert = user_data; + gint width = MIN (convert->in_width, convert->out_width); + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + destline = lines[0]; + + GST_DEBUG ("alpha line %d %p", in_line, destline); + convert->alpha_func (convert, destline, width); + + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_convert_to_YUV_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + MatrixData *data = &convert->to_YUV_matrix; + gpointer *lines, destline; + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + destline = lines[0]; + + if (convert->gamma_enc.gamma_func) { + destline = gst_line_cache_alloc_line (cache, out_line); + + GST_DEBUG ("gamma encode line %d %p->%p", in_line, lines[0], destline); + convert->gamma_enc.gamma_func (&convert->gamma_enc, destline, lines[0]); + } + if (data->matrix_func) { + GST_DEBUG ("to YUV line %d %p", in_line, destline); + data->matrix_func (data, destline); + } + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static gboolean +do_downsample_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer *lines; + gint i, start_line, n_lines; + + n_lines = convert->down_n_lines; + start_line = in_line; + if (start_line < n_lines + convert->down_offset) + start_line += convert->down_offset; + + /* get the lines needed for chroma downsample */ + lines = gst_line_cache_get_lines (cache->prev, out_line, start_line, n_lines); + + if (convert->downsample) { + GST_DEBUG ("downsample line %d %d-%d %p", in_line, start_line, + start_line + n_lines - 1, lines[0]); + gst_video_chroma_resample (convert->downsample, lines, convert->out_width); + } + + for (i = 0; i < n_lines; i++) + gst_line_cache_add_line (cache, start_line + i, lines[i]); + + return TRUE; +} + +static gboolean +do_dither_lines (GstLineCache * cache, gint out_line, gint in_line, + gpointer user_data) +{ + GstVideoConverter *convert = user_data; + gpointer *lines, destline; + + lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1); + destline = lines[0]; + + if (convert->dither) { + GST_DEBUG ("Dither line %d %p", in_line, destline); + gst_video_dither_line (convert->dither, destline, 0, out_line, + convert->out_width); + } + gst_line_cache_add_line (cache, in_line, destline); + + return TRUE; +} + +static void +video_converter_generic (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint i; + gint out_maxwidth, out_maxheight; + gint out_x, out_y, out_height; + gint pack_lines, pstride; + gint lb_width; + + out_height = convert->out_height; + out_maxwidth = convert->out_maxwidth; + out_maxheight = convert->out_maxheight; + + out_x = convert->out_x; + out_y = convert->out_y; + + convert->src = src; + convert->dest = dest; + + if (GST_VIDEO_FRAME_IS_INTERLACED (src)) { + GST_DEBUG ("setup interlaced frame"); + convert->upsample = convert->upsample_i; + convert->downsample = convert->downsample_i; + convert->v_scaler = convert->v_scaler_i; + } else { + GST_DEBUG ("setup progressive frame"); + convert->upsample = convert->upsample_p; + convert->downsample = convert->downsample_p; + convert->v_scaler = convert->v_scaler_p; + } + if (convert->upsample) { + gst_video_chroma_resample_get_info (convert->upsample, + &convert->up_n_lines, &convert->up_offset); + } else { + convert->up_n_lines = 1; + convert->up_offset = 0; + } + if (convert->downsample) { + gst_video_chroma_resample_get_info (convert->downsample, + &convert->down_n_lines, &convert->down_offset); + } else { + convert->down_n_lines = 1; + convert->down_offset = 0; + } + + pack_lines = convert->pack_nlines; /* only 1 for now */ + pstride = convert->pack_pstride; + + lb_width = out_x * pstride; + + if (convert->borderline) { + /* FIXME we should try to avoid PACK_FRAME */ + for (i = 0; i < out_y; i++) + PACK_FRAME (dest, convert->borderline, i, out_maxwidth); + } + + for (i = 0; i < out_height; i += pack_lines) { + gpointer *lines; + + /* load the lines needed to pack */ + lines = gst_line_cache_get_lines (convert->pack_lines, i + out_y, + i, pack_lines); + + if (!convert->identity_pack) { + /* take away the border */ + guint8 *l = ((guint8 *) lines[0]) - lb_width; + /* and pack into destination */ + GST_DEBUG ("pack line %d %p (%p)", i + out_y, lines[0], l); + PACK_FRAME (dest, l, i + out_y, out_maxwidth); + } + } + + if (convert->borderline) { + for (i = out_y + out_height; i < out_maxheight; i++) + PACK_FRAME (dest, convert->borderline, i, out_maxwidth); + } + if (convert->pack_pal) { + memcpy (GST_VIDEO_FRAME_PLANE_DATA (dest, 1), convert->pack_pal, + convert->pack_palsize); + } +} + +static void convert_fill_border (GstVideoConverter * convert, + GstVideoFrame * dest); + +/* Fast paths */ + +#define GET_LINE_OFFSETS(interlaced,line,l1,l2) \ + if (interlaced) { \ + l1 = (line & 2 ? line - 1 : line); \ + l2 = l1 + 2; \ + } else { \ + l1 = line; \ + l2 = l1 + 1; \ + } + +static void +convert_I420_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); + gint l1, l2; + + for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { + GET_LINE_OFFSETS (interlaced, i, l1, l2); + + video_orc_convert_I420_YUY2 (FRAME_GET_LINE (dest, l1), + FRAME_GET_LINE (dest, l2), + FRAME_GET_Y_LINE (src, l1), + FRAME_GET_Y_LINE (src, l2), + FRAME_GET_U_LINE (src, i >> 1), + FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2); + } + + /* now handle last line */ + if (height & 1) { + UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width); + PACK_FRAME (dest, convert->tmpline, height - 1, width); + } +} + +static void +convert_I420_UYVY (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); + gint l1, l2; + + for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { + GET_LINE_OFFSETS (interlaced, i, l1, l2); + + video_orc_convert_I420_UYVY (FRAME_GET_LINE (dest, l1), + FRAME_GET_LINE (dest, l2), + FRAME_GET_Y_LINE (src, l1), + FRAME_GET_Y_LINE (src, l2), + FRAME_GET_U_LINE (src, i >> 1), + FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2); + } + + /* now handle last line */ + if (height & 1) { + UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width); + PACK_FRAME (dest, convert->tmpline, height - 1, width); + } +} + +static void +convert_I420_AYUV (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); + guint8 alpha = MIN (convert->alpha_value, 255); + gint l1, l2; + + for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { + GET_LINE_OFFSETS (interlaced, i, l1, l2); + + video_orc_convert_I420_AYUV (FRAME_GET_LINE (dest, l1), + FRAME_GET_LINE (dest, l2), + FRAME_GET_Y_LINE (src, l1), + FRAME_GET_Y_LINE (src, l2), + FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1), + alpha, width); + } + + /* now handle last line */ + if (height & 1) { + UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width); + if (alpha != 0xff) + convert_set_alpha_u8 (convert, convert->tmpline, width); + PACK_FRAME (dest, convert->tmpline, height - 1, width); + } +} + +static void +convert_YUY2_I420 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); + gint l1, l2; + + for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { + GET_LINE_OFFSETS (interlaced, i, l1, l2); + + video_orc_convert_YUY2_I420 (FRAME_GET_Y_LINE (dest, l1), + FRAME_GET_Y_LINE (dest, l2), + FRAME_GET_U_LINE (dest, i >> 1), + FRAME_GET_V_LINE (dest, i >> 1), + FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2); + } + + /* now handle last line */ + if (height & 1) { + UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width); + PACK_FRAME (dest, convert->tmpline, height - 1, width); + } +} + +static void +convert_YUY2_AYUV (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *d; + guint8 alpha = MIN (convert->alpha_value, 255); + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_YUY2_AYUV (d, FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_YUY2_Y42B (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x >> 1; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x >> 1; + + video_orc_convert_YUY2_Y42B (dy, FRAME_GET_Y_STRIDE (dest), du, + FRAME_GET_U_STRIDE (dest), dv, FRAME_GET_V_STRIDE (dest), + s, FRAME_GET_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_YUY2_Y444 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x; + + video_orc_convert_YUY2_Y444 (dy, + FRAME_GET_COMP_STRIDE (dest, 0), du, + FRAME_GET_COMP_STRIDE (dest, 1), dv, + FRAME_GET_COMP_STRIDE (dest, 2), s, + FRAME_GET_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + + +static void +convert_UYVY_I420 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src); + gint l1, l2; + + for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) { + GET_LINE_OFFSETS (interlaced, i, l1, l2); + + video_orc_convert_UYVY_I420 (FRAME_GET_COMP_LINE (dest, 0, l1), + FRAME_GET_COMP_LINE (dest, 0, l2), + FRAME_GET_COMP_LINE (dest, 1, i >> 1), + FRAME_GET_COMP_LINE (dest, 2, i >> 1), + FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2); + } + + /* now handle last line */ + if (height & 1) { + UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width); + PACK_FRAME (dest, convert->tmpline, height - 1, width); + } +} + +static void +convert_UYVY_AYUV (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *d; + guint8 alpha = MIN (convert->alpha_value, 255); + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_UYVY_AYUV (d, + FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_UYVY_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + video_orc_convert_UYVY_YUY2 (d, + FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_UYVY_Y42B (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x >> 1; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x >> 1; + + video_orc_convert_UYVY_Y42B (dy, + FRAME_GET_Y_STRIDE (dest), du, + FRAME_GET_U_STRIDE (dest), dv, + FRAME_GET_V_STRIDE (dest), s, + FRAME_GET_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_UYVY_Y444 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (GST_ROUND_UP_2 (convert->in_x) * 2); + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x; + + video_orc_convert_UYVY_Y444 (dy, + FRAME_GET_Y_STRIDE (dest), du, + FRAME_GET_U_STRIDE (dest), dv, + FRAME_GET_V_STRIDE (dest), s, + FRAME_GET_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_I420 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s1, *s2, *dy1, *dy2, *du, *dv; + + s1 = FRAME_GET_LINE (src, convert->in_y + 0); + s1 += convert->in_x * 4; + s2 = FRAME_GET_LINE (src, convert->in_y + 1); + s2 += convert->in_x * 4; + + dy1 = FRAME_GET_Y_LINE (dest, convert->out_y + 0); + dy1 += convert->out_x; + dy2 = FRAME_GET_Y_LINE (dest, convert->out_y + 1); + dy2 += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y >> 1); + du += convert->out_x >> 1; + dv = FRAME_GET_V_LINE (dest, convert->out_y >> 1); + dv += convert->out_x >> 1; + + /* only for even width/height */ + video_orc_convert_AYUV_I420 (dy1, + 2 * FRAME_GET_Y_STRIDE (dest), dy2, + 2 * FRAME_GET_Y_STRIDE (dest), du, + FRAME_GET_U_STRIDE (dest), dv, + FRAME_GET_V_STRIDE (dest), s1, + 2 * FRAME_GET_STRIDE (src), s2, + 2 * FRAME_GET_STRIDE (src), width / 2, height / 2); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += convert->in_x * 4; + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + /* only for even width */ + video_orc_convert_AYUV_YUY2 (d, + FRAME_GET_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_UYVY (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += convert->in_x * 4; + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + /* only for even width */ + video_orc_convert_AYUV_UYVY (d, + FRAME_GET_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_Y42B (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += convert->in_x * 4; + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x >> 1; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x >> 1; + + /* only works for even width */ + video_orc_convert_AYUV_Y42B (dy, + FRAME_GET_Y_STRIDE (dest), du, + FRAME_GET_U_STRIDE (dest), dv, + FRAME_GET_V_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_Y444 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *s, *dy, *du, *dv; + + s = FRAME_GET_LINE (src, convert->in_y); + s += convert->in_x * 4; + + dy = FRAME_GET_Y_LINE (dest, convert->out_y); + dy += convert->out_x; + du = FRAME_GET_U_LINE (dest, convert->out_y); + du += convert->out_x; + dv = FRAME_GET_V_LINE (dest, convert->out_y); + dv += convert->out_x; + + video_orc_convert_AYUV_Y444 (FRAME_GET_Y_LINE (dest, 0), + FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0), + FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0), + FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0), + FRAME_GET_STRIDE (src), width, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y42B_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x >> 1; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x >> 1; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + video_orc_convert_Y42B_YUY2 (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, + FRAME_GET_V_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y42B_UYVY (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x >> 1; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x >> 1; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + video_orc_convert_Y42B_UYVY (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, + FRAME_GET_V_STRIDE (src), (width + 1) / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y42B_AYUV (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + guint8 alpha = MIN (convert->alpha_value, 255); + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x >> 1; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x >> 1; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += convert->out_x * 4; + + /* only for even width */ + video_orc_convert_Y42B_AYUV (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, + FRAME_GET_V_STRIDE (src), alpha, width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y444_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + video_orc_convert_Y444_YUY2 (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, + FRAME_GET_V_STRIDE (src), width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y444_UYVY (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += (GST_ROUND_UP_2 (convert->out_x) * 2); + + video_orc_convert_Y444_UYVY (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, + FRAME_GET_V_STRIDE (src), width / 2, height); + + convert_fill_border (convert, dest); +} + +static void +convert_Y444_AYUV (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + guint8 *sy, *su, *sv, *d; + guint8 alpha = MIN (convert->alpha_value, 255); + + sy = FRAME_GET_Y_LINE (src, convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, convert->in_y); + su += convert->in_x; + sv = FRAME_GET_V_LINE (src, convert->in_y); + sv += convert->in_x; + + d = FRAME_GET_LINE (dest, convert->out_y); + d += convert->out_x * 4; + + video_orc_convert_Y444_AYUV (d, + FRAME_GET_STRIDE (dest), sy, + FRAME_GET_Y_STRIDE (src), su, + FRAME_GET_U_STRIDE (src), sv, FRAME_GET_V_STRIDE (src), alpha, width, + height); + + convert_fill_border (convert, dest); +} + +#if G_BYTE_ORDER == G_LITTLE_ENDIAN +static void +convert_AYUV_ARGB (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + MatrixData *data = &convert->convert_matrix; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (convert->in_x * 4); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_AYUV_ARGB (d, FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], width, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_BGRA (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + MatrixData *data = &convert->convert_matrix; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (convert->in_x * 4); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_AYUV_BGRA (d, FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], width, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_ABGR (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + MatrixData *data = &convert->convert_matrix; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (convert->in_x * 4); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_AYUV_ABGR (d, FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], width, height); + + convert_fill_border (convert, dest); +} + +static void +convert_AYUV_RGBA (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + gint width = convert->in_width; + gint height = convert->in_height; + MatrixData *data = &convert->convert_matrix; + guint8 *s, *d; + + s = FRAME_GET_LINE (src, convert->in_y); + s += (convert->in_x * 4); + d = FRAME_GET_LINE (dest, convert->out_y); + d += (convert->out_x * 4); + + video_orc_convert_AYUV_RGBA (d, FRAME_GET_STRIDE (dest), s, + FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], width, height); + + convert_fill_border (convert, dest); +} + +static void +convert_I420_BGRA (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest) +{ + int i; + gint width = convert->in_width; + gint height = convert->in_height; + MatrixData *data = &convert->convert_matrix; + + for (i = 0; i < height; i++) { + guint8 *sy, *su, *sv, *d; + + d = FRAME_GET_LINE (dest, i + convert->out_y); + d += (convert->out_x * 4); + sy = FRAME_GET_Y_LINE (src, i + convert->in_y); + sy += convert->in_x; + su = FRAME_GET_U_LINE (src, (i + convert->in_y) >> 1); + su += (convert->in_x >> 1); + sv = FRAME_GET_V_LINE (src, (i + convert->in_y) >> 1); + sv += (convert->in_x >> 1); + + video_orc_convert_I420_BGRA (d, sy, su, sv, + data->im[0][0], data->im[0][2], + data->im[2][1], data->im[1][1], data->im[1][2], width); + } + convert_fill_border (convert, dest); +} +#endif + +static void +memset_u24 (guint8 * data, guint8 col[3], unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i++) { + data[0] = col[0]; + data[1] = col[1]; + data[2] = col[2]; + data += 3; + } +} + +static void +memset_u32_16 (guint8 * data, guint8 col[4], unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i += 2) { + data[0] = col[0]; + data[1] = col[1]; + if (i + 1 < n) { + data[2] = col[2]; + data[3] = col[3]; + } + data += 4; + } +} + +#define MAKE_BORDER_FUNC(func) \ + for (i = 0; i < out_y; i++) \ + func (FRAME_GET_PLANE_LINE (dest, k, i), col, out_maxwidth); \ + if (rb_width || lb_width) { \ + for (i = 0; i < out_height; i++) { \ + guint8 *d = FRAME_GET_PLANE_LINE (dest, k, i + out_y); \ + if (lb_width) \ + func (d, col, lb_width); \ + if (rb_width) \ + func (d + (pstride * r_border), col, rb_width); \ + } \ + } \ + for (i = out_y + out_height; i < out_maxheight; i++) \ + func (FRAME_GET_PLANE_LINE (dest, k, i), col, out_maxwidth); \ + +static void +convert_fill_border (GstVideoConverter * convert, GstVideoFrame * dest) +{ + int k, n_planes; + const GstVideoFormatInfo *out_finfo; + + if (!convert->fill_border || !convert->borderline) + return; + + out_finfo = convert->out_info.finfo; + + n_planes = GST_VIDEO_FRAME_N_PLANES (dest); + + for (k = 0; k < n_planes; k++) { + gint i, out_x, out_y, out_width, out_height, pstride, pgroup; + gint r_border, lb_width, rb_width; + gint out_maxwidth, out_maxheight; + gpointer borders; + + out_x = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_x); + out_y = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k, convert->out_y); + out_width = + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_width); + out_height = + GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k, convert->out_height); + out_maxwidth = + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_maxwidth); + out_maxheight = + GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k, + convert->out_maxheight); + + pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, k); + + switch (GST_VIDEO_FORMAT_INFO_FORMAT (out_finfo)) { + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_UYVY: + pgroup = 42; + out_maxwidth = GST_ROUND_UP_2 (out_maxwidth); + break; + default: + pgroup = pstride; + break; + } + + r_border = out_x + out_width; + rb_width = out_maxwidth - r_border; + lb_width = out_x; + + borders = &convert->borders[k]; + + switch (pgroup) { + case 1: + { + guint8 col = ((guint8 *) borders)[0]; + MAKE_BORDER_FUNC (memset); + break; + } + case 2: + { + guint16 col = ((guint16 *) borders)[0]; + MAKE_BORDER_FUNC (video_orc_splat_u16); + break; + } + case 3: + { + guint8 col[3]; + col[0] = ((guint8 *) borders)[0]; + col[1] = ((guint8 *) borders)[1]; + col[2] = ((guint8 *) borders)[2]; + MAKE_BORDER_FUNC (memset_u24); + break; + } + case 4: + { + guint32 col = ((guint32 *) borders)[0]; + MAKE_BORDER_FUNC (video_orc_splat_u32); + break; + } + case 8: + { + guint64 col = ((guint64 *) borders)[0]; + MAKE_BORDER_FUNC (video_orc_splat_u64); + break; + } + case 42: + { + guint8 col[4]; + col[0] = ((guint8 *) borders)[0]; + col[2] = ((guint8 *) borders)[2]; + col[1] = ((guint8 *) borders)[r_border & 1 ? 3 : 1]; + col[3] = ((guint8 *) borders)[r_border & 1 ? 1 : 3]; + MAKE_BORDER_FUNC (memset_u32_16); + break; + } + default: + break; + } + } +} + +static void +convert_plane_fill (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s, *d; + gint splane = convert->fsplane[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s += convert->fin_x[splane]; + d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d += convert->fout_x[plane]; + + video_orc_memset_2d (d, FRAME_GET_PLANE_STRIDE (dest, plane), + convert->ffill[plane], + convert->fout_width[plane], convert->fout_height[plane]); +} + +static void +convert_plane_h_double (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s, *d; + gint splane = convert->fsplane[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s += convert->fin_x[splane]; + d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d += convert->fout_x[plane]; + + video_orc_planar_chroma_422_444 (d, + FRAME_GET_PLANE_STRIDE (dest, plane), s, + FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane] / 2, + convert->fout_height[plane]); +} + +static void +convert_plane_h_halve (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s, *d; + gint splane = convert->fsplane[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s += convert->fin_x[splane]; + d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d += convert->fout_x[plane]; + + video_orc_planar_chroma_444_422 (d, + FRAME_GET_PLANE_STRIDE (dest, plane), s, + FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane], + convert->fout_height[plane]); +} + +static void +convert_plane_v_double (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s, *d1, *d2; + gint ds, splane = convert->fsplane[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s += convert->fin_x[splane]; + d1 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d1 += convert->fout_x[plane]; + d2 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane] + 1); + d2 += convert->fout_x[plane]; + ds = FRAME_GET_PLANE_STRIDE (dest, plane); + + video_orc_planar_chroma_420_422 (d1, 2 * ds, d2, 2 * ds, + s, FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane], + convert->fout_height[plane] / 2); +} + +static void +convert_plane_v_halve (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s1, *s2, *d; + gint ss, ds, splane = convert->fsplane[plane]; + + s1 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s1 += convert->fin_x[splane]; + s2 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane] + 1); + s2 += convert->fin_x[splane]; + d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d += convert->fout_x[plane]; + + ss = FRAME_GET_PLANE_STRIDE (src, splane); + ds = FRAME_GET_PLANE_STRIDE (dest, plane); + + video_orc_planar_chroma_422_420 (d, ds, s1, 2 * ss, s2, 2 * ss, + convert->fout_width[plane], convert->fout_height[plane]); +} + +static void +convert_plane_hv_double (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s, *d1, *d2; + gint ss, ds, splane = convert->fsplane[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s += convert->fin_x[splane]; + d1 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d1 += convert->fout_x[plane]; + d2 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane] + 1); + d2 += convert->fout_x[plane]; + ss = FRAME_GET_PLANE_STRIDE (src, splane); + ds = FRAME_GET_PLANE_STRIDE (dest, plane); + + video_orc_planar_chroma_420_444 (d1, 2 * ds, d2, 2 * ds, s, ss, + (convert->fout_width[plane] + 1) / 2, convert->fout_height[plane] / 2); +} + +static void +convert_plane_hv_halve (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + guint8 *s1, *s2, *d; + gint ss, ds, splane = convert->fsplane[plane]; + + s1 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]); + s1 += convert->fin_x[splane]; + s2 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane] + 1); + s2 += convert->fin_x[splane]; + d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]); + d += convert->fout_x[plane]; + ss = FRAME_GET_PLANE_STRIDE (src, splane); + ds = FRAME_GET_PLANE_STRIDE (dest, plane); + + video_orc_planar_chroma_444_420 (d, ds, s1, 2 * ss, s2, 2 * ss, + convert->fout_width[plane], convert->fout_height[plane]); +} + +static void +convert_plane_hv (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest, gint plane) +{ + gint in_x, in_y, out_x, out_y, out_width, out_height; + GstVideoFormat format; + GstVideoScaler *h_scaler, *v_scaler; + gint splane = convert->fsplane[plane]; + guint8 *s, *d; + + in_x = convert->fin_x[splane]; + in_y = convert->fin_y[splane]; + out_x = convert->fout_x[plane]; + out_y = convert->fout_y[plane]; + out_width = convert->fout_width[plane]; + out_height = convert->fout_height[plane]; + format = convert->fformat[plane]; + + h_scaler = convert->fh_scaler[plane]; + v_scaler = convert->fv_scaler[plane]; + + s = FRAME_GET_PLANE_LINE (src, splane, in_y); + s += in_x; + d = FRAME_GET_PLANE_LINE (dest, plane, out_y); + d += out_x; + + gst_video_scaler_2d (h_scaler, v_scaler, format, + s, FRAME_GET_PLANE_STRIDE (src, splane), + d, FRAME_GET_PLANE_STRIDE (dest, plane), 0, 0, out_width, out_height); +} + +static void +convert_scale_planes (GstVideoConverter * convert, + const GstVideoFrame * src, GstVideoFrame * dest) +{ + int i, n_planes; + + n_planes = GST_VIDEO_FRAME_N_PLANES (dest); + for (i = 0; i < n_planes; i++) { + if (convert->fconvert[i]) + convert->fconvert[i] (convert, src, dest, i); + } + convert_fill_border (convert, dest); +} + +static GstVideoFormat +get_scale_format (GstVideoFormat format, gint plane) +{ + GstVideoFormat res = GST_VIDEO_FORMAT_UNKNOWN; + + switch (format) { + case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: + case GST_VIDEO_FORMAT_Y41B: + case GST_VIDEO_FORMAT_Y42B: + case GST_VIDEO_FORMAT_Y444: + case GST_VIDEO_FORMAT_GRAY8: + case GST_VIDEO_FORMAT_A420: + case GST_VIDEO_FORMAT_YUV9: + case GST_VIDEO_FORMAT_YVU9: + case GST_VIDEO_FORMAT_GBR: + res = GST_VIDEO_FORMAT_GRAY8; + break; + case GST_VIDEO_FORMAT_GRAY16_BE: + case GST_VIDEO_FORMAT_GRAY16_LE: + res = GST_VIDEO_FORMAT_GRAY16_BE; + break; + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_UYVY: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_AYUV: + case GST_VIDEO_FORMAT_RGBx: + case GST_VIDEO_FORMAT_BGRx: + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_xBGR: + case GST_VIDEO_FORMAT_RGBA: + case GST_VIDEO_FORMAT_BGRA: + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_ABGR: + case GST_VIDEO_FORMAT_RGB: + case GST_VIDEO_FORMAT_BGR: + case GST_VIDEO_FORMAT_v308: + case GST_VIDEO_FORMAT_ARGB64: + case GST_VIDEO_FORMAT_AYUV64: + res = format; + break; + case GST_VIDEO_FORMAT_RGB15: + case GST_VIDEO_FORMAT_BGR15: + case GST_VIDEO_FORMAT_RGB16: + case GST_VIDEO_FORMAT_BGR16: + res = GST_VIDEO_FORMAT_NV12; + break; + case GST_VIDEO_FORMAT_NV12: + case GST_VIDEO_FORMAT_NV21: + case GST_VIDEO_FORMAT_NV16: + case GST_VIDEO_FORMAT_NV61: + case GST_VIDEO_FORMAT_NV24: + res = plane == 0 ? GST_VIDEO_FORMAT_GRAY8 : GST_VIDEO_FORMAT_NV12; + break; + case GST_VIDEO_FORMAT_UNKNOWN: + case GST_VIDEO_FORMAT_ENCODED: + case GST_VIDEO_FORMAT_v210: + case GST_VIDEO_FORMAT_v216: + case GST_VIDEO_FORMAT_UYVP: + case GST_VIDEO_FORMAT_RGB8P: + case GST_VIDEO_FORMAT_IYU1: + case GST_VIDEO_FORMAT_r210: + case GST_VIDEO_FORMAT_I420_10BE: + case GST_VIDEO_FORMAT_I420_10LE: + case GST_VIDEO_FORMAT_I422_10BE: + case GST_VIDEO_FORMAT_I422_10LE: + case GST_VIDEO_FORMAT_Y444_10BE: + case GST_VIDEO_FORMAT_Y444_10LE: + case GST_VIDEO_FORMAT_GBR_10BE: + case GST_VIDEO_FORMAT_GBR_10LE: + case GST_VIDEO_FORMAT_NV12_64Z32: + case GST_VIDEO_FORMAT_A420_10BE: + case GST_VIDEO_FORMAT_A420_10LE: + case GST_VIDEO_FORMAT_A422_10BE: + case GST_VIDEO_FORMAT_A422_10LE: + case GST_VIDEO_FORMAT_A444_10BE: + case GST_VIDEO_FORMAT_A444_10LE: + res = format; + g_assert_not_reached (); + break; + } + return res; +} + +static gboolean +is_merge_yuv (GstVideoInfo * info) +{ + switch (GST_VIDEO_INFO_FORMAT (info)) { + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_UYVY: + return TRUE; + default: + return FALSE; + } +} + +static gboolean +setup_scale (GstVideoConverter * convert) +{ + int i, n_planes; + gint method, cr_method, stride, in_width, in_height, out_width, out_height; + guint taps; + GstVideoInfo *in_info, *out_info; + const GstVideoFormatInfo *in_finfo, *out_finfo; + GstVideoFormat in_format, out_format; + + in_info = &convert->in_info; + out_info = &convert->out_info; + + in_finfo = in_info->finfo; + out_finfo = out_info->finfo; + + n_planes = GST_VIDEO_INFO_N_PLANES (out_info); + + method = GET_OPT_RESAMPLER_METHOD (convert); + if (method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) + cr_method = method; + else + cr_method = GET_OPT_CHROMA_RESAMPLER_METHOD (convert); + taps = GET_OPT_RESAMPLER_TAPS (convert); + + in_format = GST_VIDEO_INFO_FORMAT (in_info); + out_format = GST_VIDEO_INFO_FORMAT (out_info); + + switch (in_format) { + case GST_VIDEO_FORMAT_RGB15: + case GST_VIDEO_FORMAT_RGB16: + case GST_VIDEO_FORMAT_BGR15: + case GST_VIDEO_FORMAT_BGR16: +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + case GST_VIDEO_FORMAT_GRAY16_BE: +#else + case GST_VIDEO_FORMAT_GRAY16_LE: +#endif + if (method != GST_VIDEO_RESAMPLER_METHOD_NEAREST) { + GST_DEBUG ("%s only with nearest resampling", + gst_video_format_to_string (in_format)); + return FALSE; + } + break; + default: + break; + } + + in_width = convert->in_width; + in_height = convert->in_height; + out_width = convert->out_width; + out_height = convert->out_height; + + stride = 0; + + if (n_planes == 1 && !GST_VIDEO_FORMAT_INFO_IS_GRAY (out_finfo)) { + gint pstride; + + if (is_merge_yuv (in_info)) { + GstVideoScaler *y_scaler, *uv_scaler; + + if (in_width != out_width) { + y_scaler = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps, + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, GST_VIDEO_COMP_Y, + in_width), GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, + GST_VIDEO_COMP_Y, out_width), convert->config); + uv_scaler = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, + gst_video_scaler_get_max_taps (y_scaler), + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, GST_VIDEO_COMP_U, + in_width), GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, + GST_VIDEO_COMP_U, out_width), convert->config); + + convert->fh_scaler[0] = + gst_video_scaler_combine_packed_YUV (y_scaler, uv_scaler, + in_format, out_format); + + gst_video_scaler_free (y_scaler); + gst_video_scaler_free (uv_scaler); + } else + convert->fh_scaler[0] = NULL; + + pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, GST_VIDEO_COMP_Y); + convert->fin_x[0] = GST_ROUND_UP_2 (convert->in_x) * pstride; + convert->fout_x[0] = GST_ROUND_UP_2 (convert->out_x) * pstride; + + } else { + if (in_width != out_width && in_width != 0 && out_width != 0) + convert->fh_scaler[0] = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps, + in_width, out_width, convert->config); + else + convert->fh_scaler[0] = NULL; + + pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, GST_VIDEO_COMP_R); + convert->fin_x[0] = convert->in_x * pstride; + convert->fout_x[0] = convert->out_x * pstride; + } + stride = MAX (stride, GST_VIDEO_INFO_PLANE_STRIDE (in_info, 0)); + stride = MAX (stride, GST_VIDEO_INFO_PLANE_STRIDE (out_info, 0)); + + if (in_height != out_height && in_height != 0 && out_height != 0) { + convert->fv_scaler[0] = + gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps, + in_height, out_height, convert->config); + } else { + convert->fv_scaler[0] = NULL; + } + + convert->fin_y[0] = convert->in_y; + convert->fout_y[0] = convert->out_y; + convert->fout_width[0] = out_width; + convert->fout_height[0] = out_height; + convert->fconvert[0] = convert_plane_hv; + convert->fformat[0] = get_scale_format (in_format, 0); + convert->fsplane[0] = 0; + } else { + for (i = 0; i < n_planes; i++) { + gint comp, n_comp, j, iw, ih, ow, oh, pstride; + gboolean need_v_scaler, need_h_scaler; + GstStructure *config; + gint resample_method; + + n_comp = GST_VIDEO_FORMAT_INFO_N_COMPONENTS (in_finfo); + + /* find the component in this plane and map it to the plane of + * the source */ + comp = -1; + for (j = 0; j < n_comp; j++) { + if (GST_VIDEO_FORMAT_INFO_PLANE (out_finfo, j) == i) { + comp = j; + break; + } + } + + stride = MAX (stride, GST_VIDEO_INFO_COMP_STRIDE (in_info, i)); + stride = MAX (stride, GST_VIDEO_INFO_COMP_STRIDE (out_info, i)); + + iw = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, i, in_width); + ih = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (in_finfo, i, in_height); + ow = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, i, out_width); + oh = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, i, out_height); + + GST_DEBUG ("plane %d: %dx%d -> %dx%d", i, iw, ih, ow, oh); + + convert->fout_width[i] = ow; + convert->fout_height[i] = oh; + + pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, i); + convert->fin_x[i] = + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, i, convert->in_x); + convert->fin_x[i] *= pstride; + convert->fin_y[i] = + GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (in_finfo, i, convert->in_y); + convert->fout_x[i] = + GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, i, convert->out_x); + convert->fout_x[i] *= pstride; + convert->fout_y[i] = + GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, i, convert->out_y); + + GST_DEBUG ("plane %d: pstride %d", i, pstride); + GST_DEBUG ("plane %d: in_x %d, in_y %d", i, convert->fin_x[i], + convert->fin_y[i]); + GST_DEBUG ("plane %d: out_x %d, out_y %d", i, convert->fout_x[i], + convert->fout_y[i]); + + if (comp == -1) { + convert->fconvert[i] = convert_plane_fill; + if (GST_VIDEO_INFO_IS_YUV (out_info)) { + if (i == 3) + convert->ffill[i] = convert->alpha_value; + if (i == 0) + convert->ffill[i] = 0x00; + else + convert->ffill[i] = 0x80; + } else { + if (i == 3) + convert->ffill[i] = convert->alpha_value; + else + convert->ffill[i] = 0x00; + } + GST_DEBUG ("plane %d fill %02x", i, convert->ffill[i]); + continue; + } else { + convert->fsplane[i] = GST_VIDEO_FORMAT_INFO_PLANE (in_finfo, comp); + GST_DEBUG ("plane %d -> %d (comp %d)", i, convert->fsplane[i], comp); + } + + config = gst_structure_copy (convert->config); + + resample_method = (i == 0 ? method : cr_method); + + need_v_scaler = FALSE; + need_h_scaler = FALSE; + if (iw == ow) { + if (ih == oh) { + convert->fconvert[i] = convert_plane_hv; + GST_DEBUG ("plane %d: copy", i); + } else if (ih == 2 * oh && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) { + convert->fconvert[i] = convert_plane_v_halve; + GST_DEBUG ("plane %d: vertical halve", i); + } else if (2 * ih == oh && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) { + convert->fconvert[i] = convert_plane_v_double; + GST_DEBUG ("plane %d: vertical double", i); + } else { + convert->fconvert[i] = convert_plane_hv; + GST_DEBUG ("plane %d: vertical scale", i); + need_v_scaler = TRUE; + } + } else if (ih == oh) { + if (iw == 2 * ow && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) { + convert->fconvert[i] = convert_plane_h_halve; + GST_DEBUG ("plane %d: horizontal halve", i); + } else if (2 * iw == ow && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) { + convert->fconvert[i] = convert_plane_h_double; + GST_DEBUG ("plane %d: horizontal double", i); + } else { + convert->fconvert[i] = convert_plane_hv; + GST_DEBUG ("plane %d: horizontal scale", i); + need_h_scaler = TRUE; + } + } else { + if (iw == 2 * ow && ih == 2 * oh && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) { + convert->fconvert[i] = convert_plane_hv_halve; + GST_DEBUG ("plane %d: horizontal/vertical halve", i); + } else if (2 * iw == ow && 2 * ih == oh && pstride == 1 + && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) { + convert->fconvert[i] = convert_plane_hv_double; + GST_DEBUG ("plane %d: horizontal/vertical double", i); + } else { + convert->fconvert[i] = convert_plane_hv; + GST_DEBUG ("plane %d: horizontal/vertical scale", i); + need_v_scaler = TRUE; + need_h_scaler = TRUE; + } + } + + if (need_h_scaler && iw != 0 && ow != 0) { + convert->fh_scaler[i] = gst_video_scaler_new (resample_method, + GST_VIDEO_SCALER_FLAG_NONE, taps, iw, ow, config); + } else + convert->fh_scaler[i] = NULL; + + if (need_v_scaler && ih != 0 && oh != 0) { + convert->fv_scaler[i] = gst_video_scaler_new (resample_method, + GST_VIDEO_SCALER_FLAG_NONE, taps, ih, oh, config); + } else + convert->fv_scaler[i] = NULL; + + gst_structure_free (config); + convert->fformat[i] = get_scale_format (in_format, i); + } + } + + return TRUE; +} + +/* Fast paths */ + +typedef struct +{ + GstVideoFormat in_format; + GstVideoFormat out_format; + gboolean keeps_interlaced; + gboolean needs_color_matrix; + gboolean keeps_size; + gboolean do_crop; + gboolean do_border; + gboolean alpha_copy; + gboolean alpha_set; + gboolean alpha_mult; + gint width_align, height_align; + void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src, + GstVideoFrame * dest); +} VideoTransform; + +static const VideoTransform transforms[] = { + /* planar -> packed */ + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV}, + + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV}, + + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_YUY2}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_UYVY}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, TRUE, FALSE, 1, 0, convert_Y42B_AYUV}, + + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_YUY2}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_UYVY}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_Y444_AYUV}, + + /* packed -> packed */ + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2}, /* alias */ + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, TRUE, FALSE, 1, 0, convert_YUY2_AYUV}, + + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2}, + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_UYVY_AYUV}, + + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_YUY2}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_UYVY}, + + /* packed -> planar */ + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420}, + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420}, + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y42B}, + {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y444}, + + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420}, + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE, + FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420}, + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y42B}, + {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y444}, + + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_Y42B}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_AYUV_Y444}, + + /* planar -> planar */ + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + /* sempiplanar -> semiplanar */ + {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_NV21, GST_VIDEO_FORMAT_NV21, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_NV61, GST_VIDEO_FORMAT_NV61, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRA, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xRGB, TRUE, TRUE, TRUE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB}, /* alias */ + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRx, TRUE, TRUE, TRUE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA}, /* alias */ + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ABGR, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBA, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA}, + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xBGR, TRUE, TRUE, TRUE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR}, /* alias */ + {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, TRUE, TRUE, TRUE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA}, /* alias */ + + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA}, + {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA}, + {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA}, +#endif + + /* scalers */ + {GST_VIDEO_FORMAT_GBR, GST_VIDEO_FORMAT_GBR, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_YVYU, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_RGB15, GST_VIDEO_FORMAT_RGB15, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_BGR15, GST_VIDEO_FORMAT_BGR15, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_BGR16, GST_VIDEO_FORMAT_BGR16, TRUE, FALSE, FALSE, TRUE, + TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_BGR, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_v308, GST_VIDEO_FORMAT_v308, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_ARGB, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_xRGB, GST_VIDEO_FORMAT_xRGB, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_ABGR, GST_VIDEO_FORMAT_ABGR, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_xBGR, GST_VIDEO_FORMAT_xBGR, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_RGBA, GST_VIDEO_FORMAT_RGBA, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_RGBx, GST_VIDEO_FORMAT_RGBx, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_BGRA, GST_VIDEO_FORMAT_BGRA, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_BGRx, GST_VIDEO_FORMAT_BGRx, TRUE, FALSE, FALSE, TRUE, TRUE, + FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_ARGB64, GST_VIDEO_FORMAT_ARGB64, TRUE, FALSE, FALSE, TRUE, + TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_AYUV64, GST_VIDEO_FORMAT_AYUV64, TRUE, FALSE, FALSE, TRUE, + TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes}, + + {GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_GRAY16_LE, TRUE, FALSE, FALSE, + TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, + {GST_VIDEO_FORMAT_GRAY16_BE, GST_VIDEO_FORMAT_GRAY16_BE, TRUE, FALSE, FALSE, + TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes}, +}; + +static gboolean +video_converter_lookup_fastpath (GstVideoConverter * convert) +{ + int i; + GstVideoFormat in_format, out_format; + GstVideoTransferFunction in_transf, out_transf; + gboolean interlaced, same_matrix, same_primaries, same_size, crop, border; + gboolean need_copy, need_set, need_mult; + gint width, height; + + width = GST_VIDEO_INFO_WIDTH (&convert->in_info); + height = GST_VIDEO_INFO_HEIGHT (&convert->in_info); + + if (GET_OPT_DITHER_QUANTIZATION (convert) != 1) + return FALSE; + + /* we don't do gamma conversion in fastpath */ + in_transf = convert->in_info.colorimetry.transfer; + out_transf = convert->out_info.colorimetry.transfer; + + same_size = (width == convert->out_width && height == convert->out_height); + + /* fastpaths don't do gamma */ + if (CHECK_GAMMA_REMAP (convert) && (!same_size || in_transf != out_transf)) + return FALSE; + + need_copy = (convert->alpha_mode & ALPHA_MODE_COPY) == ALPHA_MODE_COPY; + need_set = (convert->alpha_mode & ALPHA_MODE_SET) == ALPHA_MODE_SET; + need_mult = (convert->alpha_mode & ALPHA_MODE_MULT) == ALPHA_MODE_MULT; + GST_DEBUG ("alpha copy %d, set %d, mult %d", need_copy, need_set, need_mult); + + in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info); + out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info); + + if (CHECK_MATRIX_NONE (convert)) { + same_matrix = TRUE; + } else { + GstVideoColorMatrix in_matrix, out_matrix; + + in_matrix = convert->in_info.colorimetry.matrix; + out_matrix = convert->out_info.colorimetry.matrix; + same_matrix = in_matrix == out_matrix; + } + + if (CHECK_PRIMARIES_NONE (convert)) { + same_primaries = TRUE; + } else { + GstVideoColorPrimaries in_primaries, out_primaries; + + in_primaries = convert->in_info.colorimetry.primaries; + out_primaries = convert->out_info.colorimetry.primaries; + same_primaries = in_primaries == out_primaries; + } + + interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info); + interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info); + + crop = convert->in_x || convert->in_y + || convert->in_width < convert->in_maxwidth + || convert->in_height < convert->in_maxheight; + border = convert->out_x || convert->out_y + || convert->out_width < convert->out_maxwidth + || convert->out_height < convert->out_maxheight; + + for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) { + if (transforms[i].in_format == in_format && + transforms[i].out_format == out_format && + (transforms[i].keeps_interlaced || !interlaced) && + (transforms[i].needs_color_matrix || (same_matrix && same_primaries)) + && (!transforms[i].keeps_size || same_size) + && (transforms[i].width_align & width) == 0 + && (transforms[i].height_align & height) == 0 + && (transforms[i].do_crop || !crop) + && (transforms[i].do_border || !border) + && (transforms[i].alpha_copy || !need_copy) + && (transforms[i].alpha_set || !need_set) + && (transforms[i].alpha_mult || !need_mult)) { + GST_DEBUG ("using fastpath"); + if (transforms[i].needs_color_matrix) + video_converter_compute_matrix (convert); + convert->convert = transforms[i].convert; + convert->tmpline = g_malloc0 (sizeof (guint16) * (width + 8) * 4); + if (!transforms[i].keeps_size) + if (!setup_scale (convert)) + return FALSE; + if (border) + setup_borderline (convert); + return TRUE; + } + } + GST_DEBUG ("no fastpath found"); + return FALSE; +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-converter.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-converter.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-converter.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-converter.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,284 @@ +/* Video conversion api function + * Copyright (C) 2014 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_CONVERTER_H__ +#define __GST_VIDEO_CONVERTER_H__ + +#include + +G_BEGIN_DECLS + +/** + * GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD: + * + * #GST_TYPE_RESAMPLER_METHOD, The resampler method to use for + * resampling. Other options for the resampler can be used, see + * the #GstResampler. Default is #GST_RESAMPLER_METHOD_CUBIC + */ +#define GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD "GstVideoConverter.resampler-method" +/** + * GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD: + * + * #GST_TYPE_RESAMPLER_METHOD, The resampler method to use for + * chroma resampling. Other options for the resampler can be used, see + * the #GstResampler. Default is #GST_RESAMPLER_METHOD_LINEAR + */ +#define GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD "GstVideoConverter.chroma-resampler-method" +/** + * GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS: + * + * #G_TYPE_UINT, The number of taps for the resampler. + * Default is 0: let the resampler choose a good value. + */ +#define GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS "GstVideoConverter.resampler-taps" + +/** + * GST_VIDEO_CONVERTER_OPT_DITHER_METHOD: + * + * #GST_TYPE_VIDEO_DITHER_METHOD, The dither method to use when + * changing bit depth. + * Default is #GST_VIDEO_DITHER_BAYER. + */ +#define GST_VIDEO_CONVERTER_OPT_DITHER_METHOD "GstVideoConverter.dither-method" + +/** + * GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION: + * + * #G_TYPE_UINT, The quantization amount to dither to. Components will be + * quantized to multiples of this value. + * Default is 1 + */ +#define GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION "GstVideoConverter.dither-quantization" + +/** + * GST_VIDEO_CONVERTER_OPT_SRC_X: + * + * #G_TYPE_INT, source x position to start conversion, default 0 + */ +#define GST_VIDEO_CONVERTER_OPT_SRC_X "GstVideoConverter.src-x" +/** + * GST_VIDEO_CONVERTER_OPT_SRC_Y: + * + * #G_TYPE_INT, source y position to start conversion, default 0 + */ +#define GST_VIDEO_CONVERTER_OPT_SRC_Y "GstVideoConverter.src-y" +/** + * GST_VIDEO_CONVERTER_OPT_SRC_WIDTH: + * + * #G_TYPE_INT, source width to convert, default source width + */ +#define GST_VIDEO_CONVERTER_OPT_SRC_WIDTH "GstVideoConverter.src-width" +/** + * GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT: + * + * #G_TYPE_INT, source height to convert, default source height + */ +#define GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT "GstVideoConverter.src-height" + +/** + * GST_VIDEO_CONVERTER_OPT_DEST_X: + * + * #G_TYPE_INT, x position in the destination frame, default 0 + */ +#define GST_VIDEO_CONVERTER_OPT_DEST_X "GstVideoConverter.dest-x" +/** + * GST_VIDEO_CONVERTER_OPT_DEST_Y: + * + * #G_TYPE_INT, y position in the destination frame, default 0 + */ +#define GST_VIDEO_CONVERTER_OPT_DEST_Y "GstVideoConverter.dest-y" +/** + * GST_VIDEO_CONVERTER_OPT_DEST_WIDTH: + * + * #G_TYPE_INT, width in the destination frame, default destination width + */ +#define GST_VIDEO_CONVERTER_OPT_DEST_WIDTH "GstVideoConverter.dest-width" +/** + * GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT: + * + * #G_TYPE_INT, height in the destination frame, default destination height + */ +#define GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT "GstVideoConverter.dest-height" + +/** + * GST_VIDEO_CONVERTER_OPT_FILL_BORDER: + * + * #G_TYPE_BOOLEAN, if the destination rectangle does not fill the complete + * destination image, render a border with + * #GST_VIDEO_CONVERTER_OPT_BORDER_ARGB. Otherwise the unusded pixels in the + * destination are untouched. Default %TRUE. + */ +#define GST_VIDEO_CONVERTER_OPT_FILL_BORDER "GstVideoConverter.fill-border" +/** + * GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE: + * + * #G_TYPE_DOUBLE, the alpha color value to use. + * Default to 1.0 + */ +#define GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE "GstVideoConverter.alpha-value" +/** + * GstVideoAlphaMode: + * @GST_VIDEO_ALPHA_MODE_COPY: When input and output have alpha, it will be copied. + * When the input has no alpha, alpha will be set to + * #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE + * @GST_VIDEO_ALPHA_MODE_SET: set all alpha to + * #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE + * @GST_VIDEO_ALPHA_MODE_MULT: multiply all alpha with + * #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE. + * When the input format has no alpha but the output format has, the + * alpha value will be set to #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE + * + * Different alpha modes. + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_ALPHA_MODE_COPY, + GST_VIDEO_ALPHA_MODE_SET, + GST_VIDEO_ALPHA_MODE_MULT +} GstVideoAlphaMode; +/** + * GST_VIDEO_CONVERTER_OPT_ALPHA_MODE: + * + * #GST_TYPE_VIDEO_ALPHA_MODE, the alpha mode to use. + * Default is #GST_VIDEO_ALPHA_MODE_COPY. + */ +#define GST_VIDEO_CONVERTER_OPT_ALPHA_MODE "GstVideoConverter.alpha-mode" +/** + * GST_VIDEO_CONVERTER_OPT_BORDER_ARGB: + * + * #G_TYPE_UINT, the border color to use if #GST_VIDEO_CONVERTER_OPT_FILL_BORDER + * is set to %TRUE. The color is in ARGB format. + * Default 0xff000000 + */ +#define GST_VIDEO_CONVERTER_OPT_BORDER_ARGB "GstVideoConverter.border-argb" + +/** + * GstVideoChromaMode: + * @GST_VIDEO_CHROMA_MODE_FULL: do full chroma up and down sampling + * @GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY: only perform chroma upsampling + * @GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY: only perform chroma downsampling + * @GST_VIDEO_CHROMA_MODE_NONE: disable chroma resampling + * + * Different chroma downsampling and upsampling modes + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_CHROMA_MODE_FULL, + GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY, + GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY, + GST_VIDEO_CHROMA_MODE_NONE +} GstVideoChromaMode; + +/** + * GST_VIDEO_CONVERTER_OPT_CHROMA_MODE: + * + * #GST_TYPE_VIDEO_CHROMA_MODE, set the chroma resample mode subsampled + * formats. Default is #GST_VIDEO_CHROMA_MODE_FULL. + */ +#define GST_VIDEO_CONVERTER_OPT_CHROMA_MODE "GstVideoConverter.chroma-mode" + +/** + *GstVideoMatrixMode: + * @GST_VIDEO_MATRIX_MODE_FULL: do conversion between color matrices + * @GST_VIDEO_MATRIX_MODE_INPUT_ONLY: use the input color matrix to convert + * to and from R'G'B + * @GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY: use the output color matrix to convert + * to and from R'G'B + * @GST_VIDEO_MATRIX_MODE_NONE: disable color matrix conversion. + * + * Different color matrix conversion modes + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_MATRIX_MODE_FULL, + GST_VIDEO_MATRIX_MODE_INPUT_ONLY, + GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY, + GST_VIDEO_MATRIX_MODE_NONE +} GstVideoMatrixMode; +/** + * GST_VIDEO_CONVERTER_OPT_MATRIX_MODE: + * + * #GST_TYPE_VIDEO_MATRIX_MODE, set the color matrix conversion mode for + * converting between Y'PbPr and non-linear RGB (R'G'B'). + * Default is #GST_VIDEO_MATRIX_MODE_FULL. + */ +#define GST_VIDEO_CONVERTER_OPT_MATRIX_MODE "GstVideoConverter.matrix-mode" +/** + * GstVideoGammaMode: + * @GST_VIDEO_GAMMA_MODE_NONE: disable gamma handling + * @GST_VIDEO_GAMMA_MODE_REMAP: convert between input and output gamma + * Different gamma conversion modes + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_GAMMA_MODE_NONE, + GST_VIDEO_GAMMA_MODE_REMAP +} GstVideoGammaMode; +/** + * GST_VIDEO_CONVERTER_OPT_GAMMA_MODE: + * + * #GST_TYPE_VIDEO_GAMMA_MODE, set the gamma mode. + * Default is #GST_VIDEO_GAMMA_MODE_NONE. + */ +#define GST_VIDEO_CONVERTER_OPT_GAMMA_MODE "GstVideoConverter.gamma-mode" +/** + * GstVideoPrimariesMode: + * @GST_VIDEO_PRIMARIES_MODE_NONE: disable conversion between primaries + * @GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY: do conversion between primaries only + * when it can be merged with color matrix conversion. + * @GST_VIDEO_PRIMARIES_MODE_FAST: fast conversion between primaries + * + * Different primaries conversion modes + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_PRIMARIES_MODE_NONE, + GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY, + GST_VIDEO_PRIMARIES_MODE_FAST +} GstVideoPrimariesMode; +/** + * GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE: + * + * #GST_TYPE_VIDEO_PRIMARIES_MODE, set the primaries conversion mode. + * Default is #GST_VIDEO_PRIMARIES_MODE_NONE. + */ +#define GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE "GstVideoConverter.primaries-mode" + +typedef struct _GstVideoConverter GstVideoConverter; + +GstVideoConverter * gst_video_converter_new (GstVideoInfo *in_info, + GstVideoInfo *out_info, + GstStructure *config); +void gst_video_converter_free (GstVideoConverter * convert); + +gboolean gst_video_converter_set_config (GstVideoConverter * convert, GstStructure *config); +const GstStructure * gst_video_converter_get_config (GstVideoConverter * convert); + +void gst_video_converter_frame (GstVideoConverter * convert, + const GstVideoFrame *src, GstVideoFrame *dest); + + +G_END_DECLS + +#endif /* __GST_VIDEO_CONVERTER_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-dither.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-dither.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-dither.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-dither.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,493 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include + +#include "video-dither.h" +#include "video-orc.h" + +/** + * SECTION:gstvideodither + * @short_description: Utility object for dithering and quantizing lines of video + * + * GstVideoDither provides implementations of several dithering algorithms + * that can be applied to lines of video pixels to quantize and dither them. + * + */ +struct _GstVideoDither +{ + GstVideoDitherMethod method; + GstVideoDitherFlags flags; + GstVideoFormat format; + guint width; + + guint depth; + guint n_comp; + + void (*func) (GstVideoDither * dither, gpointer pixels, guint x, guint y, + guint width); + guint8 shift[4]; + guint16 mask[4]; + guint64 orc_mask64; + guint32 orc_mask32; + + gpointer errors; +}; + +static void +dither_none_u8_mask (GstVideoDither * dither, gpointer pixels, guint x, guint y, + guint width) +{ + guint8 *p = pixels; + + video_orc_dither_none_4u8_mask (p + (x * 4), dither->orc_mask32, width); +} + +static void +dither_none_u16_mask (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint16 *p = pixels; + + video_orc_dither_none_4u16_mask (p + (x * 4), dither->orc_mask64, width); +} + +static void +dither_verterr_u8 (GstVideoDither * dither, gpointer pixels, guint x, guint y, + guint width) +{ + guint8 *p = pixels; + guint16 *e = dither->errors; + + if (y == 0) + memset (e + (x * 4), 0, width * 8); + + video_orc_dither_verterr_4u8_mask (p + (x * 4), e + (x * 4), + dither->orc_mask64, width); +} + +static void +dither_verterr_u16 (GstVideoDither * dither, gpointer pixels, guint x, guint y, + guint width) +{ + guint16 *p = pixels; + guint16 *e = dither->errors; + + if (y == 0) + memset (e + (x * 4), 0, width * 8); + + { + gint i, end; + guint16 *m = dither->mask; + guint32 v, mp; + + end = (width + x) * 4; + for (i = x * 4; i < end; i++) { + mp = m[i & 3]; + v = p[i] + e[i]; + /* take new error and store */ + e[i] = v & mp; + /* quantize and store */ + v &= ~mp; + p[i] = MIN (v, 65535); + } + } +} + +static void +dither_floyd_steinberg_u8 (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint8 *p = pixels; + guint16 *e = dither->errors; + + if (y == 0) + memset (e + (x * 4), 0, (width + 1) * 8); + + /* add and multiply errors from previous line */ + video_orc_dither_fs_muladd_u8 (e + x * 4, width * 4); +#if 1 + { + gint i, end; + guint16 *m = dither->mask, mp; + guint16 v; + + end = (width + x) * 4; + + for (i = x * 4; i < end; i++) { + mp = m[i & 3]; + v = p[i] + ((7 * e[i] + e[i + 4]) >> 4); + /* take new error and store */ + e[i + 4] = v & mp; + /* quantize and store */ + v &= ~mp; + p[i] = MIN (v, 255); + } + } +#else + video_orc_dither_fs_add_4u8 (p, e + x * 4, e + (x + 1) * 4, + dither->orc_mask64, width); +#endif +} + +static void +dither_floyd_steinberg_u16 (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint16 *p = pixels; + guint16 *e = dither->errors; + + if (y == 0) + memset (e + (x * 4), 0, (width + 1) * 8); + + { + gint i, end; + guint16 *m = dither->mask, mp; + guint32 v; + + end = (width + x) * 4; + for (i = x * 4; i < end; i++) { + mp = m[i & 3]; + /* apply previous errors to pixel */ + v = p[i] + ((7 * e[i] + e[i + 4] + 5 * e[i + 8] + 3 * e[i + 12]) >> 4); + /* take new error and store */ + e[i + 4] = v & mp; + /* quantize and store */ + v &= ~mp; + p[i] = MIN (v, 65535); + } + } +} + +static void +dither_sierra_lite_u8 (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint8 *p = pixels; + guint16 *e = dither->errors; + gint i, end; + guint16 *m = dither->mask, mp; + guint16 v; + + if (y == 0) + memset (e + (x * 4), 0, (width + 4) * 8); + + end = (width + x) * 4; + for (i = x; i < end; i++) { + mp = m[i & 3]; + /* apply previous errors to pixel */ + v = p[i] + ((2 * e[i] + e[i + 8] + e[i + 12]) >> 2); + /* store new error */ + e[i + 4] = v & mp; + /* quantize and store */ + v &= ~mp; + p[i] = MIN (v, 255); + } +} + +static void +dither_sierra_lite_u16 (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint16 *p = pixels; + guint16 *e = dither->errors; + gint i, end; + guint16 *m = dither->mask, mp; + guint32 v; + + if (y == 0) + memset (e + (x * 4), 0, (width + 4) * 8); + + end = (width + x) * 4; + for (i = x; i < end; i++) { + mp = m[i & 3]; + /* apply previous errors to pixel */ + v = p[i] + ((2 * e[i] + e[i + 8] + e[i + 12]) >> 2); + /* store new error */ + e[i + 4] = v & mp; + /* quantize and store */ + v &= ~mp; + p[i] = MIN (v & ~mp, 65535); + } +} + +static const guint16 bayer_map[16][16] = { + {0, 128, 32, 160, 8, 136, 40, 168, 2, 130, 34, 162, 10, 138, 42, 170}, + {192, 64, 224, 96, 200, 72, 232, 104, 194, 66, 226, 98, 202, 74, 234, 106}, + {48, 176, 16, 144, 56, 184, 24, 152, 50, 178, 18, 146, 58, 186, 26, 154}, + {240, 112, 208, 80, 248, 120, 216, 88, 242, 114, 210, 82, 250, 122, 218, 90}, + {12, 240, 44, 172, 4, 132, 36, 164, 14, 242, 46, 174, 6, 134, 38, 166}, + {204, 76, 236, 108, 196, 68, 228, 100, 206, 78, 238, 110, 198, 70, 230, 102}, + {60, 188, 28, 156, 52, 180, 20, 148, 62, 190, 30, 158, 54, 182, 22, 150}, + {252, 142, 220, 92, 244, 116, 212, 84, 254, 144, 222, 94, 246, 118, 214, 86}, + {3, 131, 35, 163, 11, 139, 43, 171, 1, 129, 33, 161, 9, 137, 41, 169}, + {195, 67, 227, 99, 203, 75, 235, 107, 193, 65, 225, 97, 201, 73, 233, 105}, + {51, 179, 19, 147, 59, 187, 27, 155, 49, 177, 17, 145, 57, 185, 25, 153}, + {243, 115, 211, 83, 251, 123, 219, 91, 241, 113, 209, 81, 249, 121, 217, 89}, + {15, 243, 47, 175, 7, 135, 39, 167, 13, 241, 45, 173, 5, 133, 37, 165}, + {207, 79, 239, 111, 199, 71, 231, 103, 205, 77, 237, 109, 197, 69, 229, 101}, + {63, 191, 31, 159, 55, 183, 23, 151, 61, 189, 29, 157, 53, 181, 21, 149}, + {255, 145, 223, 95, 247, 119, 215, 87, 253, 143, 221, 93, 245, 117, 213, 85} +}; + +static void +dither_ordered_u8 (GstVideoDither * dither, gpointer pixels, guint x, guint y, + guint width) +{ + guint8 *p = pixels; + guint8 *c = (guint8 *) dither->errors + ((y & 15) * width + (x & 15)) * 4; + + video_orc_dither_ordered_u8 (p, c, width * 4); +} + +static void +dither_ordered_u8_mask (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint8 *p = pixels; + guint16 *c = (guint16 *) dither->errors + ((y & 15) * width + (x & 15)) * 4; + + video_orc_dither_ordered_4u8_mask (p, c, dither->orc_mask64, width); +} + +static void +dither_ordered_u16_mask (GstVideoDither * dither, gpointer pixels, guint x, + guint y, guint width) +{ + guint16 *p = pixels; + guint16 *c = (guint16 *) dither->errors + ((y & 15) * width + (x & 15)) * 4; + + video_orc_dither_ordered_4u16_mask (p, c, dither->orc_mask64, width); +} + +static void +alloc_errors (GstVideoDither * dither, guint lines) +{ + guint width, n_comp; + + width = dither->width; + n_comp = dither->n_comp; + + dither->errors = g_malloc0 (sizeof (guint16) * (width + 8) * n_comp * lines); +} + +static void +setup_bayer (GstVideoDither * dither) +{ + guint i, j, k, width, n_comp, errdepth; + guint8 *shift; + + width = dither->width; + shift = dither->shift; + n_comp = dither->n_comp; + + if (dither->depth == 8) { + if (dither->flags & GST_VIDEO_DITHER_FLAG_QUANTIZE) { + dither->func = dither_ordered_u8_mask; + errdepth = 16; + } else { + dither->func = dither_ordered_u8; + errdepth = 8; + } + } else { + dither->func = dither_ordered_u16_mask; + errdepth = 16; + } + + alloc_errors (dither, 16); + + if (errdepth == 8) { + for (i = 0; i < 16; i++) { + guint8 *p = (guint8 *) dither->errors + (n_comp * width * i), v; + for (j = 0; j < width; j++) { + for (k = 0; k < n_comp; k++) { + v = bayer_map[i & 15][j & 15]; + if (shift[k] < 8) + v = v >> (8 - shift[k]); + p[n_comp * j + k] = v; + } + } + } + } else { + for (i = 0; i < 16; i++) { + guint16 *p = (guint16 *) dither->errors + (n_comp * width * i), v; + for (j = 0; j < width; j++) { + for (k = 0; k < n_comp; k++) { + v = bayer_map[i & 15][j & 15]; + if (shift[k] < 8) + v = v >> (8 - shift[k]); + p[n_comp * j + k] = v; + } + } + } + } +} + +static gint +count_power (guint v) +{ + gint res = 0; + while (v > 1) { + res++; + v >>= 1; + } + return res; +} + +/** + * gst_video_dither_new: (skip) + * @method: a #GstVideoDitherMethod + * @flags: a #GstVideoDitherFlags + * @format: a #GstVideoFormat + * @quantizer: quantizer + * @width: the width of the lines + * + * Make a new dither object for dithering lines of @format using the + * algorithm described by @method. + * + * Each component will be quantized to a multiple of @quantizer. Better + * performance is achived when @quantizer is a power of 2. + * + * @width is the width of the lines that this ditherer will handle. + * + * Returns: a new #GstVideoDither + */ +GstVideoDither * +gst_video_dither_new (GstVideoDitherMethod method, GstVideoDitherFlags flags, + GstVideoFormat format, guint quantizer[GST_VIDEO_MAX_COMPONENTS], + guint width) +{ + GstVideoDither *dither; + gint i; + + dither = g_slice_new0 (GstVideoDither); + dither->method = method; + dither->flags = flags; + dither->format = format; + dither->width = width; + + dither->n_comp = 4; + + switch (format) { + case GST_VIDEO_FORMAT_AYUV: + case GST_VIDEO_FORMAT_ARGB: + dither->depth = 8; + break; + case GST_VIDEO_FORMAT_AYUV64: + case GST_VIDEO_FORMAT_ARGB64: + dither->depth = 16; + break; + default: + g_slice_free (GstVideoDither, dither); + g_return_val_if_reached (NULL); + break; + } + + for (i = 0; i < 4; i++) { + /* FIXME, only power of 2 quantizers */ + guint q = quantizer[(i + 3) & 3]; + + dither->shift[i] = count_power (q); + dither->mask[i] = (1 << dither->shift[i]) - 1; + GST_DEBUG ("%d: quant %d shift %d mask %08x", i, q, dither->shift[i], + dither->mask[i]); + dither->orc_mask64 = + (dither->orc_mask64 << 16) | GUINT16_FROM_BE (dither->mask[i]); + dither->orc_mask32 = (dither->orc_mask32 << 8) | (guint8) dither->mask[i]; + } + dither->orc_mask64 = GUINT64_FROM_BE (dither->orc_mask64); + dither->orc_mask32 = GUINT32_FROM_BE (dither->orc_mask32); + GST_DEBUG ("mask64 %08" G_GINT64_MODIFIER "x", (guint64) dither->orc_mask64); + GST_DEBUG ("mask32 %08x", dither->orc_mask32); + + switch (method) { + case GST_VIDEO_DITHER_NONE: + if (dither->flags & GST_VIDEO_DITHER_FLAG_QUANTIZE) + if (dither->depth == 8) + dither->func = dither_none_u8_mask; + else + dither->func = dither_none_u16_mask; + else + dither->func = NULL; + break; + case GST_VIDEO_DITHER_VERTERR: + alloc_errors (dither, 1); + if (dither->depth == 8) { + dither->func = dither_verterr_u8; + } else + dither->func = dither_verterr_u16; + break; + case GST_VIDEO_DITHER_FLOYD_STEINBERG: + alloc_errors (dither, 1); + if (dither->depth == 8) { + dither->func = dither_floyd_steinberg_u8; + } else + dither->func = dither_floyd_steinberg_u16; + break; + case GST_VIDEO_DITHER_SIERRA_LITE: + alloc_errors (dither, 1); + if (dither->depth == 8) { + dither->func = dither_sierra_lite_u8; + } else + dither->func = dither_sierra_lite_u16; + break; + case GST_VIDEO_DITHER_BAYER: + setup_bayer (dither); + break; + } + return dither; +} + +/** + * gst_video_dither_free: + * @dither: a #GstVideoDither + * + * Free @dither + */ +void +gst_video_dither_free (GstVideoDither * dither) +{ + g_return_if_fail (dither != NULL); + + g_free (dither->errors); + g_slice_free (GstVideoDither, dither); +} + +/** + * gst_video_dither_line: + * @dither: a #GstVideoDither + * @line: pointer to the pixels of the line + * @x: x coordinate + * @y: y coordinate + * @width: the width + * + * Dither @width pixels starting from offset @x in @line using @dither. + * + * @y is the line number of @line in the output image. + */ +void +gst_video_dither_line (GstVideoDither * dither, gpointer line, guint x, guint y, + guint width) +{ + g_return_if_fail (dither != NULL); + g_return_if_fail (x + width <= dither->width); + + if (dither->func) + dither->func (dither, line, x, y, width); +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-dither.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-dither.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-dither.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-dither.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,77 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_DITHER_H__ +#define __GST_VIDEO_DITHER_H__ + +#include + +G_BEGIN_DECLS + +/** + * GstVideoDitherMethod: + * @GST_VIDEO_DITHER_NONE: no dithering + * @GST_VIDEO_DITHER_VERTERR: propagate rounding errors downwards + * @GST_VIDEO_DITHER_FLOYD_STEINBERG: Dither with floyd-steinberg error diffusion + * @GST_VIDEO_DITHER_SIERRA_LITE: Dither with Sierra Lite error diffusion + * @GST_VIDEO_DITHER_BAYER: ordered dither using a bayer pattern + * + * Different dithering methods to use. + */ +typedef enum { + GST_VIDEO_DITHER_NONE, + GST_VIDEO_DITHER_VERTERR, + GST_VIDEO_DITHER_FLOYD_STEINBERG, + GST_VIDEO_DITHER_SIERRA_LITE, + GST_VIDEO_DITHER_BAYER, +} GstVideoDitherMethod; + +/** + * GstVideoDitherFlags: + * @GST_VIDEO_DITHER_FLAG_NONE: no flags + * @GST_VIDEO_DITHER_FLAG_INTERLACED: the input is interlaced + * @GST_VIDEO_DITHER_FLAG_QUANTIZE: quantize values in addition to adding dither. + * + * Extra flags that influence the result from gst_video_chroma_resample_new(). + */ +typedef enum { + GST_VIDEO_DITHER_FLAG_NONE = 0, + GST_VIDEO_DITHER_FLAG_INTERLACED = (1 << 0), + GST_VIDEO_DITHER_FLAG_QUANTIZE = (1 << 1), +} GstVideoDitherFlags; + +typedef struct _GstVideoDither GstVideoDither; + +/* circular dependency, need to include this after defining the enums */ +#include + +GstVideoDither * gst_video_dither_new (GstVideoDitherMethod method, + GstVideoDitherFlags flags, + GstVideoFormat format, + guint quantizer[GST_VIDEO_MAX_COMPONENTS], + guint width); + +void gst_video_dither_free (GstVideoDither *dither); + +void gst_video_dither_line (GstVideoDither *dither, + gpointer line, guint x, guint y, guint width); + +G_END_DECLS + +#endif /* __GST_VIDEO_DITHER_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-format.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-format.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-format.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-format.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,6 +29,18 @@ #include "video-format.h" #include "video-orc.h" +#ifndef restrict +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* restrict should be available */ +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define restrict __restrict__ +#elif defined(_MSC_VER) && _MSC_VER >= 1500 +#define restrict __restrict +#else +#define restrict /* no op */ +#endif +#endif + /* Line conversion to AYUV */ #define GET_PLANE_STRIDE(plane) (stride(plane)) @@ -65,6 +77,15 @@ ((line & ~7) >> 2) + (line & 1) : \ line >> 2) +#define IS_CHROMA_LINE_420(line, flags) \ + (flags & GST_VIDEO_PACK_FLAG_INTERLACED ? \ + !(line & 2) : !(line & 1)) +#define IS_CHROMA_LINE_410(line, flags) \ + (flags & GST_VIDEO_PACK_FLAG_INTERLACED ? \ + !(line & 6) : !(line & 3)) + +#define IS_ALIGNED(x,n) ((((guintptr)(x)&((n)-1))) == 0) + #define PACK_420 GST_VIDEO_FORMAT_AYUV, unpack_planar_420, 1, pack_planar_420 static void unpack_planar_420 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, @@ -72,19 +93,24 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (uv); - guint8 *v_line = GET_V_LINE (uv); - guint8 *ayuv = dest; - - video_orc_unpack_I420 (dest, y_line, u_line, v_line, width); - - if (width & 1) { - gint i = width - 1; - - ayuv[i * 4 + 2] = u_line[i >> 1]; - ayuv[i * 4 + 3] = v_line[i >> 1]; + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (uv); + const guint8 *restrict sv = GET_V_LINE (uv); + guint8 *restrict d = dest; + + sy += x; + su += x >> 1; + sv += x >> 1; + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = *su++; + d[3] = *sv++; + width--; + d += 4; } + video_orc_unpack_I420 (d, sy, su, sv, width); } static void @@ -94,20 +120,33 @@ gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (uv); - guint8 *v_line = GET_V_LINE (uv); - const guint8 *ayuv = src; - - video_orc_pack_I420 (y_line, u_line, v_line, src, width / 2); - - if (width & 1) { - gint i = width - 1; + guint8 *dy = GET_Y_LINE (y); + guint8 *du = GET_U_LINE (uv); + guint8 *dv = GET_V_LINE (uv); + const guint8 *s = src; - y_line[i] = ayuv[i * 4 + 1]; - u_line[i >> 1] = ayuv[i * 4 + 2]; - v_line[i >> 1] = ayuv[i * 4 + 3]; - } + if (IS_CHROMA_LINE_420 (y, flags)) { + if (IS_ALIGNED (s, 8)) + video_orc_pack_I420 (dy, du, dv, s, width / 2); + else { + gint i; + + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + du[i] = s[i * 8 + 2]; + dv[i] = s[i * 8 + 3]; + } + } + if (width & 1) { + gint i = width - 1; + + dy[i] = s[i * 4 + 1]; + du[i >> 1] = s[i * 4 + 2]; + dv[i >> 1] = s[i * 4 + 3]; + } + } else + video_orc_pack_Y (dy, s, width); } #define PACK_YUY2 GST_VIDEO_FORMAT_AYUV, unpack_YUY2, 1, pack_YUY2 @@ -116,18 +155,44 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *line = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; - video_orc_unpack_YUY2 (dest, line, width / 2); + s += (x & ~1) << 1; + if (x & 1) { + d[0] = 0xff; + d[1] = s[2]; + d[2] = s[1]; + d[3] = s[3]; + s += 4; + d += 4; + width--; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_YUY2 (d, s, width / 2); + else { + gint i; + + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = s[i * 4 + 0]; + d[i * 8 + 2] = s[i * 4 + 1]; + d[i * 8 + 3] = s[i * 4 + 3]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = s[i * 4 + 2]; + d[i * 8 + 6] = s[i * 4 + 1]; + d[i * 8 + 7] = s[i * 4 + 3]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = line[i * 2 + 0]; - d[i * 4 + 2] = line[i * 2 + 1]; - d[i * 4 + 3] = line[i * 2 + 3]; + d[i * 4 + 1] = s[i * 2 + 0]; + d[i * 4 + 2] = s[i * 2 + 1]; + d[i * 4 + 3] = s[i * 2 + 3]; } } @@ -137,17 +202,27 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - guint8 *line = GET_LINE (y); - const guint8 *ayuv = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; - video_orc_pack_YUY2 (line, src, width / 2); + if (IS_ALIGNED (s, 8)) + video_orc_pack_YUY2 (d, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 4 + 0] = s[i * 8 + 1]; + d[i * 4 + 1] = s[i * 8 + 2]; + d[i * 4 + 2] = s[i * 8 + 5]; + d[i * 4 + 3] = s[i * 8 + 3]; + } + } if (width & 1) { gint i = width - 1; - line[i * 2 + 0] = ayuv[i * 4 + 1]; - line[i * 2 + 1] = ayuv[i * 4 + 2]; - line[i * 2 + 3] = ayuv[i * 4 + 3]; + d[i * 2 + 0] = s[i * 4 + 1]; + d[i * 2 + 1] = s[i * 4 + 2]; + d[i * 2 + 3] = s[i * 4 + 3]; } } @@ -157,18 +232,44 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *line = GET_LINE (y); + const guint8 *s = GET_LINE (y); guint8 *d = dest; - video_orc_unpack_UYVY (dest, line, width / 2); + s += (x & ~1) << 1; + if (x & 1) { + d[0] = 0xff; + d[1] = s[3]; + d[2] = s[0]; + d[3] = s[2]; + s += 4; + d += 4; + width--; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_UYVY (d, s, width / 2); + else { + gint i; + + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = s[i * 4 + 1]; + d[i * 8 + 2] = s[i * 4 + 0]; + d[i * 8 + 3] = s[i * 4 + 2]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = s[i * 4 + 3]; + d[i * 8 + 6] = s[i * 4 + 0]; + d[i * 8 + 7] = s[i * 4 + 2]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = line[i * 2 + 1]; - d[i * 4 + 2] = line[i * 2 + 0]; - d[i * 4 + 3] = line[i * 2 + 2]; + d[i * 4 + 1] = s[i * 2 + 1]; + d[i * 4 + 2] = s[i * 2 + 0]; + d[i * 4 + 3] = s[i * 2 + 2]; } } @@ -178,17 +279,26 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - guint8 *line = GET_LINE (y); - const guint8 *ayuv = src; - - video_orc_pack_UYVY (line, src, width / 2); + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; + if (IS_ALIGNED (s, 8)) + video_orc_pack_UYVY (d, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 4 + 0] = s[i * 8 + 2]; + d[i * 4 + 1] = s[i * 8 + 1]; + d[i * 4 + 2] = s[i * 8 + 3]; + d[i * 4 + 3] = s[i * 8 + 5]; + } + } if (width & 1) { gint i = width - 1; - line[i * 2 + 0] = ayuv[i * 4 + 2]; - line[i * 2 + 1] = ayuv[i * 4 + 1]; - line[i * 2 + 2] = ayuv[i * 4 + 3]; + d[i * 2 + 0] = s[i * 4 + 2]; + d[i * 2 + 1] = s[i * 4 + 1]; + d[i * 2 + 2] = s[i * 4 + 3]; } } @@ -198,18 +308,44 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *line = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; - video_orc_unpack_YVYU (dest, line, width / 2); + s += (x & ~1) << 1; + if (x & 1) { + d[0] = 0xff; + d[1] = s[2]; + d[2] = s[3]; + d[3] = s[1]; + s += 4; + d += 4; + width--; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_YVYU (d, s, width / 2); + else { + gint i; + + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = s[i * 4 + 0]; + d[i * 8 + 2] = s[i * 4 + 3]; + d[i * 8 + 3] = s[i * 4 + 1]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = s[i * 4 + 2]; + d[i * 8 + 6] = s[i * 4 + 3]; + d[i * 8 + 7] = s[i * 4 + 1]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = line[i * 2 + 0]; - d[i * 4 + 2] = line[i * 2 + 3]; - d[i * 4 + 3] = line[i * 2 + 1]; + d[i * 4 + 1] = s[i * 2 + 0]; + d[i * 4 + 2] = s[i * 2 + 3]; + d[i * 4 + 3] = s[i * 2 + 1]; } } @@ -219,17 +355,27 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - guint8 *line = GET_LINE (y); - const guint8 *ayuv = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; - video_orc_pack_YVYU (line, src, width / 2); + if (IS_ALIGNED (s, 8)) + video_orc_pack_YVYU (d, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 4 + 0] = s[i * 8 + 1]; + d[i * 4 + 1] = s[i * 8 + 3]; + d[i * 4 + 2] = s[i * 8 + 5]; + d[i * 4 + 3] = s[i * 8 + 2]; + } + } if (width & 1) { gint i = width - 1; - line[i * 2 + 0] = ayuv[i * 4 + 1]; - line[i * 2 + 1] = ayuv[i * 4 + 3]; - line[i * 2 + 3] = ayuv[i * 4 + 2]; + d[i * 2 + 0] = s[i * 4 + 1]; + d[i * 2 + 1] = s[i * 4 + 3]; + d[i * 2 + 3] = s[i * 4 + 2]; } } @@ -240,8 +386,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; + + s += x * 3; for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xff; @@ -258,8 +406,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint8 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; for (i = 0; i < width; i++) { d[i * 3 + 0] = s[i * 4 + 1]; @@ -275,7 +423,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - memcpy (dest, GET_LINE (y), width * 4); + const guint8 *restrict s = GET_LINE (y); + + s += x * 4; + + memcpy (dest, s, width * 4); } static void @@ -284,7 +436,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - memcpy (GET_LINE (y), src, width * 4); + guint8 *restrict d = GET_LINE (y); + + memcpy (d, src, width * 4); } #define PACK_v210 GST_VIDEO_FORMAT_AYUV64, unpack_v210, 1, pack_v210 @@ -294,13 +448,16 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint16 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint16 *restrict d = dest; guint32 a0, a1, a2, a3; guint16 y0, y1, y2, y3, y4, y5; guint16 u0, u2, u4; guint16 v0, v2, v4; + /* FIXME */ + s += x * 2; + for (i = 0; i < width; i += 6) { a0 = GST_READ_UINT32_LE (s + (i / 6) * 16 + 0); a1 = GST_READ_UINT32_LE (s + (i / 6) * 16 + 4); @@ -384,8 +541,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint16 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; guint32 a0, a1, a2, a3; guint16 y0, y1, y2, y3, y4, y5; guint16 u0, u1, u2; @@ -468,8 +625,19 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint16 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint16 *restrict d = dest; + + s += (x & ~1) << 2; + if (x & 1) { + d[0] = 0xffff; + d[1] = GST_READ_UINT16_LE (s + 6); + d[2] = GST_READ_UINT16_LE (s + 0); + d[3] = GST_READ_UINT16_LE (s + 4); + s += 8; + d += 4; + width--; + } for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xffff; @@ -486,8 +654,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint16 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; for (i = 0; i < width - 1; i += 2) { GST_WRITE_UINT16_LE (d + i * 4 + 0, s[(i + 0) * 4 + 2]); @@ -509,20 +677,51 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (y); - guint8 *v_line = GET_V_LINE (y); - guint8 *d = dest; - - video_orc_unpack_YUV9 (dest, y_line, u_line, v_line, width / 2); + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (y); + const guint8 *restrict sv = GET_V_LINE (y); + guint8 *restrict d = dest; + + sy += x; + su += x >> 2; + sv += x >> 2; + + if (x & 3) { + for (; x & 3; x++) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = *su; + d[3] = *sv; + width--; + d += 4; + } + su++; + sy++; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_YUV9 (d, sy, su, sv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = su[i >> 1]; + d[i * 8 + 3] = sv[i >> 1]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = su[i >> 1]; + d[i * 8 + 7] = sv[i >> 1]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = u_line[i >> 2]; - d[i * 4 + 3] = v_line[i >> 2]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = su[i >> 2]; + d[i * 4 + 3] = sv[i >> 2]; } } @@ -533,28 +732,28 @@ gint y, gint width) { int i; - guint8 *destY = GET_Y_LINE (y); - guint8 *destU = GET_U_LINE (y); - guint8 *destV = GET_V_LINE (y); - const guint8 *s = src; + guint8 *restrict dy = GET_Y_LINE (y); + guint8 *restrict du = GET_U_LINE (y); + guint8 *restrict dv = GET_V_LINE (y); + const guint8 *restrict s = src; for (i = 0; i < width - 3; i += 4) { - destY[i] = s[i * 4 + 1]; - destY[i + 1] = s[i * 4 + 5]; - destY[i + 2] = s[i * 4 + 9]; - destY[i + 3] = s[i * 4 + 13]; + dy[i] = s[i * 4 + 1]; + dy[i + 1] = s[i * 4 + 5]; + dy[i + 2] = s[i * 4 + 9]; + dy[i + 3] = s[i * 4 + 13]; - destU[i >> 2] = s[i * 4 + 2]; - destV[i >> 2] = s[i * 4 + 3]; + du[i >> 2] = s[i * 4 + 2]; + dv[i >> 2] = s[i * 4 + 3]; } if (i < width) { - destY[i] = s[i * 4 + 1]; - destU[i >> 2] = s[i * 4 + 2]; - destV[i >> 2] = s[i * 4 + 3]; + dy[i] = s[i * 4 + 1]; + du[i >> 2] = s[i * 4 + 2]; + dv[i >> 2] = s[i * 4 + 3]; if (i < width - 1) - destY[i + 1] = s[i * 4 + 5]; + dy[i + 1] = s[i * 4 + 5]; if (i < width - 2) - destY[i + 2] = s[i * 4 + 9]; + dy[i + 2] = s[i * 4 + 9]; } } @@ -564,20 +763,47 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (y); - guint8 *v_line = GET_V_LINE (y); - guint8 *d = dest; - - video_orc_unpack_Y42B (dest, y_line, u_line, v_line, width / 2); + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (y); + const guint8 *restrict sv = GET_V_LINE (y); + guint8 *restrict d = dest; + + sy += x; + su += x >> 1; + sv += x >> 1; + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = *su++; + d[3] = *sv++; + width--; + d += 4; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_Y42B (d, sy, su, sv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = su[i]; + d[i * 8 + 3] = sv[i]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = su[i]; + d[i * 8 + 7] = sv[i]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = u_line[i >> 1]; - d[i * 4 + 3] = v_line[i >> 1]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = su[i >> 1]; + d[i * 4 + 3] = sv[i >> 1]; } } @@ -587,19 +813,29 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (y); - guint8 *v_line = GET_V_LINE (y); - const guint8 *ayuv = src; - - video_orc_pack_Y42B (y_line, u_line, v_line, src, width / 2); + guint8 *restrict dy = GET_Y_LINE (y); + guint8 *restrict du = GET_U_LINE (y); + guint8 *restrict dv = GET_V_LINE (y); + const guint8 *restrict s = src; + + if (IS_ALIGNED (s, 8)) + video_orc_pack_Y42B (dy, du, dv, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + du[i] = s[i * 8 + 2]; + dv[i] = s[i * 8 + 3]; + } + } if (width & 1) { gint i = width - 1; - y_line[i] = ayuv[i * 4 + 1]; - u_line[i >> 1] = ayuv[i * 4 + 2]; - v_line[i >> 1] = ayuv[i * 4 + 3]; + dy[i] = s[i * 4 + 1]; + du[i >> 1] = s[i * 4 + 2]; + dv[i >> 1] = s[i * 4 + 3]; } } @@ -609,8 +845,15 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_Y444 (dest, GET_Y_LINE (y), GET_U_LINE (y), - GET_V_LINE (y), width); + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (y); + const guint8 *restrict sv = GET_V_LINE (y); + + sy += x; + su += x; + sv += x; + + video_orc_unpack_Y444 (dest, sy, su, sv, width); } static void @@ -619,8 +862,11 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_Y444 (GET_Y_LINE (y), GET_U_LINE (y), GET_V_LINE (y), src, - width); + guint8 *restrict dy = GET_Y_LINE (y); + guint8 *restrict du = GET_U_LINE (y); + guint8 *restrict dv = GET_V_LINE (y); + + video_orc_pack_Y444 (dy, du, dv, src, width); } #define PACK_GBR GST_VIDEO_FORMAT_ARGB, unpack_GBR, 1, pack_GBR @@ -629,8 +875,15 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_Y444 (dest, GET_R_LINE (y), GET_G_LINE (y), - GET_B_LINE (y), width); + const guint8 *restrict sr = GET_R_LINE (y); + const guint8 *restrict sg = GET_G_LINE (y); + const guint8 *restrict sb = GET_B_LINE (y); + + sr += x; + sg += x; + sb += x; + + video_orc_unpack_Y444 (dest, sr, sg, sb, width); } static void @@ -639,8 +892,11 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_Y444 (GET_R_LINE (y), GET_G_LINE (y), GET_B_LINE (y), src, - width); + guint8 *restrict dr = GET_R_LINE (y); + guint8 *restrict dg = GET_G_LINE (y); + guint8 *restrict db = GET_B_LINE (y); + + video_orc_pack_Y444 (dr, dg, db, src, width); } #define PACK_GRAY8 GST_VIDEO_FORMAT_AYUV, unpack_GRAY8, 1, pack_GRAY8 @@ -649,7 +905,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_GRAY8 (dest, GET_LINE (y), width); + const guint8 *restrict s = GET_LINE (y); + + s += x; + + video_orc_unpack_GRAY8 (dest, s, width); } static void @@ -658,7 +918,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_GRAY8 (GET_LINE (y), src, width); + guint8 *restrict d = GET_LINE (y); + + video_orc_pack_GRAY8 (d, src, width); } #define PACK_GRAY16_BE GST_VIDEO_FORMAT_AYUV64, unpack_GRAY16_BE, 1, pack_GRAY16_BE @@ -668,8 +930,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint16 *s = GET_LINE (y); - guint16 *d = dest; + const guint16 *restrict s = GET_LINE (y); + guint16 *restrict d = dest; + + s += x; for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xffff; @@ -686,8 +950,8 @@ gint y, gint width) { int i; - guint16 *d = GET_LINE (y); - const guint16 *s = src; + guint16 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; for (i = 0; i < width; i++) { GST_WRITE_UINT16_BE (d + i, s[i * 4 + 1]); @@ -701,8 +965,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint16 *s = GET_LINE (y); - guint16 *d = dest; + const guint16 *restrict s = GET_LINE (y); + guint16 *restrict d = dest; + + s += x; for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xffff; @@ -719,8 +985,8 @@ gint y, gint width) { int i; - guint16 *d = GET_LINE (y); - const guint16 *s = src; + guint16 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; for (i = 0; i < width; i++) { GST_WRITE_UINT16_LE (d + i, s[i * 4 + 1]); @@ -733,26 +999,12 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - int i; - const guint16 *s = GET_LINE (y); - guint8 *d = dest, r, g, b; - - for (i = 0; i < width; i++) { - r = ((s[i] >> 11) & 0x1f) << 3; - g = ((s[i] >> 5) & 0x3f) << 2; - b = ((s[i]) & 0x1f) << 3; + const guint16 *restrict s = GET_LINE (y); - if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { - r |= (r >> 5); - g |= (g >> 6); - b |= (b >> 5); - } - - d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = r; - d[i * 4 + 2] = g; - d[i * 4 + 3] = b; - } + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_RGB16_trunc (dest, s + x, width); + else + video_orc_unpack_RGB16 (dest, s + x, width); } static void @@ -761,14 +1013,13 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - int i; - guint16 *d = GET_LINE (y); - const guint8 *s = src; + guint16 *restrict d = GET_LINE (y); - for (i = 0; i < width; i++) { - d[i] = ((s[i * 4 + 1] >> 3) << 11) | - ((s[i * 4 + 2] >> 2) << 5) | (s[i * 4 + 3] >> 3); - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + video_orc_pack_RGB16_le (d, src, width); +#else + video_orc_pack_RGB16_be (d, src, width); +#endif } #define PACK_BGR16 GST_VIDEO_FORMAT_ARGB, unpack_BGR16, 1, pack_BGR16 @@ -777,26 +1028,12 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - int i; - const guint16 *s = GET_LINE (y); - guint8 *d = dest, r, g, b; - - for (i = 0; i < width; i++) { - b = ((s[i] >> 11) & 0x1f) << 3; - g = ((s[i] >> 5) & 0x3f) << 2; - r = ((s[i]) & 0x1f) << 3; - - if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { - r |= (r >> 5); - g |= (g >> 6); - b |= (b >> 5); - } + const guint16 *restrict s = GET_LINE (y); - d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = r; - d[i * 4 + 2] = g; - d[i * 4 + 3] = b; - } + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_BGR16_trunc (dest, s + x, width); + else + video_orc_unpack_BGR16 (dest, s + x, width); } static void @@ -805,14 +1042,13 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - int i; - guint16 *d = GET_LINE (y); - const guint8 *s = src; + guint16 *restrict d = GET_LINE (y); - for (i = 0; i < width; i++) { - d[i] = ((s[i * 4 + 3] >> 3) << 11) | - ((s[i * 4 + 2] >> 2) << 5) | (s[i * 4 + 1] >> 3); - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + video_orc_pack_BGR16_le (d, src, width); +#else + video_orc_pack_BGR16_be (d, src, width); +#endif } #define PACK_RGB15 GST_VIDEO_FORMAT_ARGB, unpack_RGB15, 1, pack_RGB15 @@ -821,26 +1057,19 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - int i; - const guint16 *s = GET_LINE (y); - guint8 *d = dest, r, g, b; - - for (i = 0; i < width; i++) { - r = ((s[i] >> 10) & 0x1f) << 3; - g = ((s[i] >> 5) & 0x1f) << 3; - b = ((s[i]) & 0x1f) << 3; - - if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { - r |= (r >> 5); - g |= (g >> 5); - b |= (b >> 5); - } + const guint16 *restrict s = GET_LINE (y); - d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = r; - d[i * 4 + 2] = g; - d[i * 4 + 3] = b; - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_RGB15_le_trunc (dest, s + x, width); + else + video_orc_unpack_RGB15_le (dest, s + x, width); +#else + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_RGB15_be_trunc (dest, s + x, width); + else + video_orc_unpack_RGB15_be (dest, s + x, width); +#endif } static void @@ -849,14 +1078,13 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - int i; - guint16 *d = GET_LINE (y); - const guint8 *s = src; + guint16 *restrict d = GET_LINE (y); - for (i = 0; i < width; i++) { - d[i] = ((s[i * 4 + 1] >> 3) << 10) | - ((s[i * 4 + 2] >> 3) << 5) | (s[i * 4 + 3] >> 3); - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + video_orc_pack_RGB15_le (d, src, width); +#else + video_orc_pack_RGB15_be (d, src, width); +#endif } #define PACK_BGR15 GST_VIDEO_FORMAT_ARGB, unpack_BGR15, 1, pack_BGR15 @@ -865,26 +1093,19 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - int i; - const guint16 *s = GET_LINE (y); - guint8 *d = dest, r, g, b; - - for (i = 0; i < width; i++) { - b = ((s[i] >> 10) & 0x1f) << 3; - g = ((s[i] >> 5) & 0x1f) << 3; - r = ((s[i]) & 0x1f) << 3; + const guint16 *restrict s = GET_LINE (y); - if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { - r |= (r >> 5); - g |= (g >> 5); - b |= (b >> 5); - } - - d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = r; - d[i * 4 + 2] = g; - d[i * 4 + 3] = b; - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_BGR15_le_trunc (dest, s + x, width); + else + video_orc_unpack_BGR15_le (dest, s + x, width); +#else + if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE) + video_orc_unpack_BGR15_be_trunc (dest, s + x, width); + else + video_orc_unpack_BGR15_be (dest, s + x, width); +#endif } static void @@ -893,14 +1114,13 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - int i; - guint16 *d = GET_LINE (y); - const guint8 *s = src; + guint16 *restrict d = GET_LINE (y); - for (i = 0; i < width; i++) { - d[i] = ((s[i * 4 + 3] >> 3) << 10) | - ((s[i * 4 + 2] >> 3) << 5) | (s[i * 4 + 1] >> 3); - } +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + video_orc_pack_BGR15_le (d, src, width); +#else + video_orc_pack_BGR15_be (d, src, width); +#endif } #define PACK_BGRA GST_VIDEO_FORMAT_ARGB, unpack_BGRA, 1, pack_BGRA @@ -909,7 +1129,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_BGRA (dest, GET_LINE (y), width); + const guint8 *restrict s = GET_LINE (y); + + s += x * 4; + + video_orc_unpack_BGRA (dest, s, width); } static void @@ -918,7 +1142,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_BGRA (GET_LINE (y), src, width); + guint8 *restrict d = GET_LINE (y); + + video_orc_pack_BGRA (d, src, width); } #define PACK_ABGR GST_VIDEO_FORMAT_ARGB, unpack_ABGR, 1, pack_ABGR @@ -927,7 +1153,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_ABGR (dest, GET_LINE (y), width); + const guint8 *restrict s = GET_LINE (y); + + s += x * 4; + + video_orc_unpack_ABGR (dest, s, width); } static void @@ -936,7 +1166,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_ABGR (GET_LINE (y), src, width); + guint8 *restrict d = GET_LINE (y); + + video_orc_pack_ABGR (d, src, width); } #define PACK_RGBA GST_VIDEO_FORMAT_ARGB, unpack_RGBA, 1, pack_RGBA @@ -945,7 +1177,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_RGBA (dest, GET_LINE (y), width); + const guint8 *restrict s = GET_LINE (y); + + s += x * 4; + + video_orc_unpack_RGBA (dest, s, width); } static void @@ -954,7 +1190,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_RGBA (GET_LINE (y), src, width); + guint8 *restrict d = GET_LINE (y); + + video_orc_pack_RGBA (d, src, width); } #define PACK_RGB GST_VIDEO_FORMAT_ARGB, unpack_RGB, 1, pack_RGB @@ -964,8 +1202,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; + + s += x * 3; for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xff; @@ -982,8 +1222,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint8 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; for (i = 0; i < width; i++) { d[i * 3 + 0] = s[i * 4 + 1]; @@ -999,8 +1239,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; + + s += x * 3; for (i = 0; i < width; i++) { d[i * 4 + 0] = 0xff; @@ -1017,8 +1259,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint8 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; for (i = 0; i < width; i++) { d[i * 3 + 0] = s[i * 4 + 3]; @@ -1034,19 +1276,46 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, uv); - guint8 *d = dest; - - video_orc_unpack_NV12 (dest, y_line, uv_line, width / 2); + const guint8 *restrict sy = GET_PLANE_LINE (0, y); + const guint8 *restrict suv = GET_PLANE_LINE (1, uv); + guint8 *restrict d = dest; + + sy += x; + suv += (x & ~1); + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = suv[0]; + d[3] = suv[1]; + width--; + d += 4; + suv += 2; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_NV12 (d, sy, suv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = suv[i * 2 + 0]; + d[i * 8 + 3] = suv[i * 2 + 1]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = suv[i * 2 + 0]; + d[i * 8 + 7] = suv[i * 2 + 1]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = uv_line[i + 0]; - d[i * 4 + 3] = uv_line[i + 1]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = suv[i + 0]; + d[i * 4 + 3] = suv[i + 1]; } } @@ -1057,19 +1326,31 @@ gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, uv); - const guint8 *ayuv = src; - - video_orc_pack_NV12 (y_line, uv_line, src, width / 2); - - if (width & 1) { - gint i = width - 1; - - y_line[i] = ayuv[i * 4 + 1]; - uv_line[i + 0] = ayuv[i * 4 + 2]; - uv_line[i + 1] = ayuv[i * 4 + 3]; - } + guint8 *restrict dy = GET_PLANE_LINE (0, y); + guint8 *restrict duv = GET_PLANE_LINE (1, uv); + const guint8 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + if (IS_ALIGNED (s, 8)) + video_orc_pack_NV12 (dy, duv, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + duv[i * 2 + 0] = s[i * 8 + 2]; + duv[i * 2 + 1] = s[i * 8 + 3]; + } + } + if (width & 1) { + gint i = width - 1; + + dy[i] = s[i * 4 + 1]; + duv[i + 0] = s[i * 4 + 2]; + duv[i + 1] = s[i * 4 + 3]; + } + } else + video_orc_pack_Y (dy, s, width); } #define PACK_NV21 GST_VIDEO_FORMAT_AYUV, unpack_NV21, 1, pack_NV21 @@ -1079,19 +1360,46 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, uv); - guint8 *d = dest; - - video_orc_unpack_NV21 (dest, y_line, uv_line, width / 2); + const guint8 *restrict sy = GET_PLANE_LINE (0, y); + const guint8 *restrict suv = GET_PLANE_LINE (1, uv); + guint8 *restrict d = dest; + + sy += x; + suv += (x & ~1); + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = suv[1]; + d[3] = suv[0]; + width--; + d += 4; + suv += 2; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_NV21 (d, sy, suv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = suv[i * 2 + 1]; + d[i * 8 + 3] = suv[i * 2 + 0]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = suv[i * 2 + 1]; + d[i * 8 + 7] = suv[i * 2 + 0]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = uv_line[i + 1]; - d[i * 4 + 3] = uv_line[i + 0]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = suv[i + 1]; + d[i * 4 + 3] = suv[i + 0]; } } @@ -1102,61 +1410,192 @@ gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, uv); - const guint8 *ayuv = src; + guint8 *restrict dy = GET_PLANE_LINE (0, y); + guint8 *restrict duv = GET_PLANE_LINE (1, uv); + const guint8 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + if (IS_ALIGNED (s, 8)) + video_orc_pack_NV21 (dy, duv, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + duv[i * 2 + 0] = s[i * 8 + 3]; + duv[i * 2 + 1] = s[i * 8 + 2]; + } + } + if (width & 1) { + gint i = width - 1; + + dy[i] = s[i * 4 + 1]; + duv[i + 0] = s[i * 4 + 3]; + duv[i + 1] = s[i * 4 + 2]; + } + } else + video_orc_pack_Y (dy, s, width); +} - video_orc_pack_NV21 (y_line, uv_line, src, width / 2); +#define PACK_NV16 GST_VIDEO_FORMAT_AYUV, unpack_NV16, 1, pack_NV16 +static void +unpack_NV16 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + const guint8 *restrict sy = GET_PLANE_LINE (0, y); + const guint8 *restrict suv = GET_PLANE_LINE (1, y); + guint8 *restrict d = dest; + + sy += x; + suv += (x & ~1); + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = suv[0]; + d[3] = suv[1]; + width--; + d += 4; + suv += 2; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_NV12 (d, sy, suv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = suv[i * 2 + 0]; + d[i * 8 + 3] = suv[i * 2 + 1]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = suv[i * 2 + 0]; + d[i * 8 + 7] = suv[i * 2 + 1]; + } + } if (width & 1) { gint i = width - 1; - y_line[i] = ayuv[i * 4 + 1]; - uv_line[i + 0] = ayuv[i * 4 + 3]; - uv_line[i + 1] = ayuv[i * 4 + 2]; + d[i * 4 + 0] = 0xff; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = suv[i + 0]; + d[i * 4 + 3] = suv[i + 1]; } } -#define PACK_NV16 GST_VIDEO_FORMAT_AYUV, unpack_NV16, 1, pack_NV16 static void -unpack_NV16 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +pack_NV16 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + guint8 *restrict dy = GET_PLANE_LINE (0, y); + guint8 *restrict duv = GET_PLANE_LINE (1, y); + const guint8 *restrict s = src; + + if (IS_ALIGNED (s, 8)) + video_orc_pack_NV12 (dy, duv, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + duv[i * 2 + 0] = s[i * 8 + 2]; + duv[i * 2 + 1] = s[i * 8 + 3]; + } + } + + if (width & 1) { + gint i = width - 1; + + dy[i] = s[i * 4 + 1]; + duv[i + 0] = s[i * 4 + 2]; + duv[i + 1] = s[i * 4 + 3]; + } +} + +#define PACK_NV61 GST_VIDEO_FORMAT_AYUV, unpack_NV61, 1, pack_NV61 +static void +unpack_NV61 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, y); - guint8 *d = dest; + const guint8 *restrict sy = GET_PLANE_LINE (0, y); + const guint8 *restrict svu = GET_PLANE_LINE (1, y); + guint8 *restrict d = dest; + + sy += x; + svu += (x & ~1); + + if (x & 1) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = svu[1]; + d[3] = svu[0]; + width--; + d += 4; + svu += 2; + } + + if (IS_ALIGNED (d, 8)) { + video_orc_unpack_NV21 (d, sy, svu, width / 2); + } else { + gint i; - video_orc_unpack_NV12 (dest, y_line, uv_line, width / 2); + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = svu[i * 2 + 1]; + d[i * 8 + 3] = svu[i * 2 + 0]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = svu[i * 2 + 1]; + d[i * 8 + 7] = svu[i * 2 + 0]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = uv_line[i + 0]; - d[i * 4 + 3] = uv_line[i + 1]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = svu[i + 1]; + d[i * 4 + 3] = svu[i + 0]; } } static void -pack_NV16 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +pack_NV61 (const GstVideoFormatInfo * info, GstVideoPackFlags flags, const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - guint8 *y_line = GET_PLANE_LINE (0, y); - guint8 *uv_line = GET_PLANE_LINE (1, y); - const guint8 *ayuv = src; + const guint8 *restrict s = src; + guint8 *restrict dy = GET_PLANE_LINE (0, y); + guint8 *restrict dvu = GET_PLANE_LINE (1, y); - video_orc_pack_NV12 (y_line, uv_line, src, width / 2); + if (IS_ALIGNED (s, 8)) { + video_orc_pack_NV21 (dy, dvu, s, width / 2); + } else { + gint i; + + for (i = 0; i < width / 2; i++) { + dy[i * 2 + 0] = s[i * 8 + 1]; + dy[i * 2 + 1] = s[i * 8 + 5]; + dvu[i * 2 + 0] = s[i * 8 + 3]; + dvu[i * 2 + 1] = s[i * 8 + 2]; + } + } if (width & 1) { gint i = width - 1; - y_line[i] = ayuv[i * 4 + 1]; - uv_line[i + 0] = ayuv[i * 4 + 2]; - uv_line[i + 1] = ayuv[i * 4 + 3]; + dy[i] = s[i * 4 + 1]; + dvu[i + 0] = s[i * 4 + 2]; + dvu[i + 1] = s[i * 4 + 3]; } } @@ -1166,8 +1605,13 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - video_orc_unpack_NV24 (dest, - GET_PLANE_LINE (0, y), GET_PLANE_LINE (1, y), width); + const guint8 *restrict sy = GET_PLANE_LINE (0, y); + const guint8 *restrict suv = GET_PLANE_LINE (1, y); + + sy += x; + suv += x << 1; + + video_orc_unpack_NV24 (dest, sy, suv, width); } static void @@ -1176,8 +1620,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - video_orc_pack_NV24 (GET_PLANE_LINE (0, y), - GET_PLANE_LINE (1, y), src, width); + guint8 *restrict dy = GET_PLANE_LINE (0, y); + guint8 *restrict duv = GET_PLANE_LINE (1, y); + + video_orc_pack_NV24 (dy, duv, src, width); } #define PACK_UYVP GST_VIDEO_FORMAT_AYUV64, unpack_UYVP, 1, pack_UYVP @@ -1187,8 +1633,11 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint16 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint16 *restrict d = dest; + + /* FIXME */ + s += x << 1; for (i = 0; i < width; i += 2) { guint16 y0, y1; @@ -1201,10 +1650,10 @@ y1 = (((s[(i / 2) * 5 + 3] & 0x03) << 8) | s[(i / 2) * 5 + 4]) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { - y0 |= (y0 >> 4); - y1 |= (y1 >> 4); - u0 |= (u0 >> 4); - v0 |= (v0 >> 4); + y0 |= (y0 >> 10); + y1 |= (y1 >> 10); + u0 |= (u0 >> 10); + v0 |= (v0 >> 10); } d[i * 4 + 0] = 0xffff; @@ -1228,8 +1677,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint16 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; for (i = 0; i < width; i += 2) { guint16 y0, y1; @@ -1260,9 +1709,26 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { gint uv = GET_UV_420 (y, flags); - - video_orc_unpack_A420 (dest, GET_Y_LINE (y), GET_U_LINE (uv), - GET_V_LINE (uv), GET_A_LINE (y), width); + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (uv); + const guint8 *restrict sv = GET_V_LINE (uv); + const guint8 *restrict sa = GET_A_LINE (y); + guint8 *restrict d = dest; + + sy += x; + su += x >> 1; + sv += x >> 1; + sa += x; + + if (x & 1) { + d[0] = *sa++; + d[1] = *sy++; + d[2] = *su++; + d[3] = *sv++; + width--; + d += 4; + } + video_orc_unpack_A420 (d, sy, su, sv, sa, width); } static void @@ -1272,22 +1738,37 @@ gint y, gint width) { gint uv = GET_UV_420 (y, flags); - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (uv); - guint8 *v_line = GET_V_LINE (uv); - guint8 *a_line = GET_A_LINE (y); - const guint8 *ayuv = src; - - video_orc_pack_A420 (y_line, u_line, v_line, a_line, src, width / 2); - - if (width & 1) { - gint i = width - 1; - - a_line[i] = ayuv[i * 4 + 0]; - y_line[i] = ayuv[i * 4 + 1]; - u_line[i >> 1] = ayuv[i * 4 + 2]; - v_line[i >> 1] = ayuv[i * 4 + 3]; - } + guint8 *restrict dy = GET_Y_LINE (y); + guint8 *restrict du = GET_U_LINE (uv); + guint8 *restrict dv = GET_V_LINE (uv); + guint8 *restrict da = GET_A_LINE (y); + const guint8 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + if (IS_ALIGNED (s, 8)) + video_orc_pack_A420 (dy, du, dv, da, s, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + da[i * 2 + 0] = s[i * 8 + 0]; + dy[i * 2 + 0] = s[i * 8 + 1]; + da[i * 2 + 1] = s[i * 8 + 4]; + dy[i * 2 + 1] = s[i * 8 + 5]; + du[i] = s[i * 8 + 2]; + dv[i] = s[i * 8 + 3]; + } + } + + if (width & 1) { + gint i = width - 1; + + da[i] = s[i * 4 + 0]; + dy[i] = s[i * 4 + 1]; + du[i >> 1] = s[i * 4 + 2]; + dv[i >> 1] = s[i * 4 + 3]; + } + } else + video_orc_pack_AY (dy, da, s, width); } #define PACK_RGB8P GST_VIDEO_FORMAT_ARGB, unpack_RGB8P, 1, pack_RGB8P @@ -1297,9 +1778,11 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - const guint32 *p = data[1]; - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + const guint32 *restrict p = data[1]; + guint8 *restrict d = dest; + + s += x; for (i = 0; i < width; i++) { guint32 v = p[s[i]]; @@ -1363,8 +1846,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint8 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; /* Use our poor man's palette, taken from ffmpegcolorspace too */ for (i = 0; i < width; i++) { @@ -1385,20 +1868,51 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { gint uv = GET_UV_410 (y, flags); - guint8 *y_line = GET_Y_LINE (y); - guint8 *u_line = GET_U_LINE (uv); - guint8 *v_line = GET_V_LINE (uv); - guint8 *d = dest; - - video_orc_unpack_YUV9 (dest, y_line, u_line, v_line, width / 2); + const guint8 *restrict sy = GET_Y_LINE (y); + const guint8 *restrict su = GET_U_LINE (uv); + const guint8 *restrict sv = GET_V_LINE (uv); + guint8 *restrict d = dest; + + sy += x; + su += x >> 2; + sv += x >> 2; + + if (x & 3) { + for (; x & 3; x++) { + d[0] = 0xff; + d[1] = *sy++; + d[2] = *su; + d[3] = *sv; + width--; + d += 4; + } + su++; + sy++; + } + + if (IS_ALIGNED (d, 8)) + video_orc_unpack_YUV9 (d, sy, su, sv, width / 2); + else { + gint i; + for (i = 0; i < width / 2; i++) { + d[i * 8 + 0] = 0xff; + d[i * 8 + 1] = sy[i * 2 + 0]; + d[i * 8 + 2] = su[i >> 1]; + d[i * 8 + 3] = sv[i >> 1]; + d[i * 8 + 4] = 0xff; + d[i * 8 + 5] = sy[i * 2 + 1]; + d[i * 8 + 6] = su[i >> 1]; + d[i * 8 + 7] = sv[i >> 1]; + } + } if (width & 1) { gint i = width - 1; d[i * 4 + 0] = 0xff; - d[i * 4 + 1] = y_line[i]; - d[i * 4 + 2] = u_line[i >> 2]; - d[i * 4 + 3] = v_line[i >> 2]; + d[i * 4 + 1] = sy[i]; + d[i * 4 + 2] = su[i >> 2]; + d[i * 4 + 3] = sv[i >> 2]; } } @@ -1410,31 +1924,31 @@ { int i; gint uv = GET_UV_410 (y, flags); - guint8 *destY = GET_Y_LINE (y); - guint8 *destU = GET_U_LINE (uv); - guint8 *destV = GET_V_LINE (uv); - const guint8 *s = src; + guint8 *restrict dy = GET_Y_LINE (y); + guint8 *restrict du = GET_U_LINE (uv); + guint8 *restrict dv = GET_V_LINE (uv); + const guint8 *restrict s = src; for (i = 0; i < width - 3; i += 4) { - destY[i] = s[i * 4 + 1]; - destY[i + 1] = s[i * 4 + 5]; - destY[i + 2] = s[i * 4 + 9]; - destY[i + 3] = s[i * 4 + 13]; - if (y % 4 == 0) { - destU[i >> 2] = s[i * 4 + 2]; - destV[i >> 2] = s[i * 4 + 3]; + dy[i] = s[i * 4 + 1]; + dy[i + 1] = s[i * 4 + 5]; + dy[i + 2] = s[i * 4 + 9]; + dy[i + 3] = s[i * 4 + 13]; + if (IS_CHROMA_LINE_410 (y, flags)) { + du[i >> 2] = s[i * 4 + 2]; + dv[i >> 2] = s[i * 4 + 3]; } } if (i < width) { - destY[i] = s[i * 4 + 1]; - if (y % 4 == 0) { - destU[i >> 2] = s[i * 4 + 2]; - destV[i >> 2] = s[i * 4 + 3]; + dy[i] = s[i * 4 + 1]; + if (IS_CHROMA_LINE_410 (y, flags)) { + du[i >> 2] = s[i * 4 + 2]; + dv[i >> 2] = s[i * 4 + 3]; } if (i < width - 1) - destY[i + 1] = s[i * 4 + 5]; + dy[i + 1] = s[i * 4 + 5]; if (i < width - 2) - destY[i + 2] = s[i * 4 + 9]; + dy[i + 2] = s[i * 4 + 9]; } } @@ -1445,12 +1959,15 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint8 *d = dest; + const guint8 *restrict s = GET_LINE (y); + guint8 *restrict d = dest; guint8 y0, y1, y2, y3; guint8 u0; guint8 v0; + /* FIXME */ + s += x * 4; + for (i = 0; i < width - 3; i += 4) { y0 = s[(i >> 2) * 6 + 1]; y1 = s[(i >> 2) * 6 + 2]; @@ -1511,8 +2028,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint8 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint8 *restrict s = src; for (i = 0; i < width - 3; i += 4) { d[(i >> 2) * 6 + 0] = s[i * 4 + 2]; @@ -1540,7 +2057,11 @@ gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { - memcpy (dest, GET_LINE (y), width * 8); + const guint8 *s = GET_LINE (y); + + s += x * 8; + + memcpy (dest, s, width * 8); } static void @@ -1549,7 +2070,9 @@ const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { - memcpy (GET_LINE (y), src, width * 8); + guint8 *restrict d = GET_LINE (y); + + memcpy (d, src, width * 8); } #define PACK_r210 GST_VIDEO_FORMAT_ARGB64, unpack_r210, 1, pack_r210 @@ -1559,8 +2082,10 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - const guint8 *s = GET_LINE (y); - guint16 *d = dest, R, G, B; + const guint8 *restrict s = GET_LINE (y); + guint16 *restrict d = dest, R, G, B; + + s += x * 4; for (i = 0; i < width; i++) { guint32 x = GST_READ_UINT32_BE (s + i * 4); @@ -1589,8 +2114,8 @@ gint y, gint width) { int i; - guint8 *d = GET_LINE (y); - const guint16 *s = src; + guint8 *restrict d = GET_LINE (y); + const guint16 *restrict s = src; for (i = 0; i < width; i++) { guint32 x = 0; @@ -1608,15 +2133,25 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcG = GET_G_LINE (y); - guint16 *srcB = GET_B_LINE (y); - guint16 *srcR = GET_R_LINE (y); + const guint16 *sg = GET_G_LINE (y); + const guint16 *sb = GET_B_LINE (y); + const guint16 *sr = GET_R_LINE (y); guint16 *d = dest, G, B, R; + sg += x; + sb += x; + sr += x; + for (i = 0; i < width; i++) { - G = GST_READ_UINT16_LE (srcG + i) << 6; - B = GST_READ_UINT16_LE (srcB + i) << 6; - R = GST_READ_UINT16_LE (srcR + i) << 6; + G = GST_READ_UINT16_LE (sg + i) << 6; + B = GST_READ_UINT16_LE (sb + i) << 6; + R = GST_READ_UINT16_LE (sr + i) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + R |= (R >> 10); + G |= (G >> 10); + B |= (B >> 10); + } d[i * 4 + 0] = 0xffff; d[i * 4 + 1] = R; @@ -1632,20 +2167,20 @@ gint y, gint width) { int i; - guint16 *destG = GET_G_LINE (y); - guint16 *destB = GET_B_LINE (y); - guint16 *destR = GET_R_LINE (y); + guint16 *restrict dg = GET_G_LINE (y); + guint16 *restrict db = GET_B_LINE (y); + guint16 *restrict dr = GET_R_LINE (y); guint16 G, B, R; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width; i++) { G = (s[i * 4 + 2]) >> 6; B = (s[i * 4 + 3]) >> 6; R = (s[i * 4 + 1]) >> 6; - GST_WRITE_UINT16_LE (destG + i, G); - GST_WRITE_UINT16_LE (destB + i, B); - GST_WRITE_UINT16_LE (destR + i, R); + GST_WRITE_UINT16_LE (dg + i, G); + GST_WRITE_UINT16_LE (db + i, B); + GST_WRITE_UINT16_LE (dr + i, R); } } @@ -1656,19 +2191,29 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcG = GET_G_LINE (y); - guint16 *srcB = GET_B_LINE (y); - guint16 *srcR = GET_R_LINE (y); - guint16 *d = dest, G, B, R; + const guint16 *restrict sg = GET_G_LINE (y); + const guint16 *restrict sb = GET_B_LINE (y); + const guint16 *restrict sr = GET_R_LINE (y); + guint16 *restrict d = dest, G, B, R; + + sg += x; + sb += x; + sr += x; for (i = 0; i < width; i++) { - G = GST_READ_UINT16_BE (srcG + i) << 6; - B = GST_READ_UINT16_BE (srcB + i) << 6; - R = GST_READ_UINT16_BE (srcR + i) << 6; + G = GST_READ_UINT16_BE (sg + i) << 6; + B = GST_READ_UINT16_BE (sb + i) << 6; + R = GST_READ_UINT16_BE (sr + i) << 6; - d[i * 4 + 0] = 0xffff; - d[i * 4 + 1] = R; - d[i * 4 + 2] = G; + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + R |= (R >> 10); + G |= (G >> 10); + B |= (B >> 10); + } + + d[i * 4 + 0] = 0xffff; + d[i * 4 + 1] = R; + d[i * 4 + 2] = G; d[i * 4 + 3] = B; } } @@ -1680,20 +2225,20 @@ gint y, gint width) { int i; - guint16 *destG = GET_G_LINE (y); - guint16 *destB = GET_B_LINE (y); - guint16 *destR = GET_R_LINE (y); + guint16 *restrict dg = GET_G_LINE (y); + guint16 *restrict db = GET_B_LINE (y); + guint16 *restrict dr = GET_R_LINE (y); guint16 G, B, R; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width; i++) { G = s[i * 4 + 2] >> 6; B = s[i * 4 + 3] >> 6; R = s[i * 4 + 1] >> 6; - GST_WRITE_UINT16_BE (destG + i, G); - GST_WRITE_UINT16_BE (destB + i, B); - GST_WRITE_UINT16_BE (destR + i, R); + GST_WRITE_UINT16_BE (dg + i, G); + GST_WRITE_UINT16_BE (db + i, B); + GST_WRITE_UINT16_BE (dr + i, R); } } @@ -1704,15 +2249,19 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (y); - guint16 *srcV = GET_V_LINE (y); - guint16 *d = dest, Y, U, V; + guint16 *restrict sy = GET_Y_LINE (y); + guint16 *restrict su = GET_U_LINE (y); + guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x; + sv += x; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_LE (srcY + i) << 6; - U = GST_READ_UINT16_LE (srcU + i) << 6; - V = GST_READ_UINT16_LE (srcV + i) << 6; + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + i) << 6; + V = GST_READ_UINT16_LE (sv + i) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { Y |= (Y >> 10); @@ -1734,20 +2283,20 @@ gint y, gint width) { int i; - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (y); - guint16 *destV = GET_V_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); guint16 Y, U, V; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width; i++) { Y = (s[i * 4 + 1]) >> 6; U = (s[i * 4 + 2]) >> 6; V = (s[i * 4 + 3]) >> 6; - GST_WRITE_UINT16_LE (destY + i, Y); - GST_WRITE_UINT16_LE (destU + i, U); - GST_WRITE_UINT16_LE (destV + i, V); + GST_WRITE_UINT16_LE (dy + i, Y); + GST_WRITE_UINT16_LE (du + i, U); + GST_WRITE_UINT16_LE (dv + i, V); } } @@ -1758,15 +2307,19 @@ const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (y); - guint16 *srcV = GET_V_LINE (y); - guint16 *d = dest, Y, U, V; + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x; + sv += x; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_BE (srcY + i) << 6; - U = GST_READ_UINT16_BE (srcU + i) << 6; - V = GST_READ_UINT16_BE (srcV + i) << 6; + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + i) << 6; + V = GST_READ_UINT16_BE (sv + i) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { Y |= (Y >> 10); @@ -1788,20 +2341,20 @@ gint y, gint width) { int i; - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (y); - guint16 *destV = GET_V_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); guint16 Y, U, V; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width; i++) { Y = s[i * 4 + 1] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_BE (destY + i, Y); - GST_WRITE_UINT16_BE (destU + i, U); - GST_WRITE_UINT16_BE (destV + i, V); + GST_WRITE_UINT16_BE (dy + i, Y); + GST_WRITE_UINT16_BE (du + i, U); + GST_WRITE_UINT16_BE (dv + i, V); } } @@ -1813,15 +2366,19 @@ { int i; gint uv = GET_UV_420 (y, flags); - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (uv); - guint16 *srcV = GET_V_LINE (uv); - guint16 *d = dest, Y, U, V; + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (uv); + const guint16 *restrict sv = GET_V_LINE (uv); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x >> 1; + sv += x >> 1; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_LE (srcY + i) << 6; - U = GST_READ_UINT16_LE (srcU + (i >> 1)) << 6; - V = GST_READ_UINT16_LE (srcV + (i >> 1)) << 6; + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { Y |= (Y >> 10); @@ -1833,6 +2390,12 @@ d[i * 4 + 1] = Y; d[i * 4 + 2] = U; d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } } } @@ -1844,11 +2407,177 @@ { int i; gint uv = GET_UV_420 (y, flags); - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (uv); - guint16 *destV = GET_V_LINE (uv); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (uv); + guint16 *restrict dv = GET_V_LINE (uv); + guint16 Y0, Y1, U, V; + const guint16 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + for (i = 0; i < width - 1; i += 2) { + Y0 = s[i * 4 + 1] >> 6; + Y1 = s[i * 4 + 5] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_LE (dy + i + 0, Y0); + GST_WRITE_UINT16_LE (dy + i + 1, Y1); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); + } + if (i == width - 1) { + Y0 = s[i * 4 + 1] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_LE (dy + i, Y0); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); + } + } else { + for (i = 0; i < width; i++) { + Y0 = s[i * 4 + 1] >> 6; + GST_WRITE_UINT16_LE (dy + i, Y0); + } + } +} + +#define PACK_I420_10BE GST_VIDEO_FORMAT_AYUV64, unpack_I420_10BE, 1, pack_I420_10BE +static void +unpack_I420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (uv); + const guint16 *restrict sv = GET_V_LINE (uv); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x >> 1; + sv += x >> 1; + + for (i = 0; i < width; i++) { + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = 0xffff; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } + } +} + +static void +pack_I420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (uv); + guint16 *restrict dv = GET_V_LINE (uv); + guint16 Y0, Y1, U, V; + const guint16 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + for (i = 0; i < width - 1; i += 2) { + Y0 = s[i * 4 + 1] >> 6; + Y1 = s[i * 4 + 5] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_BE (dy + i + 0, Y0); + GST_WRITE_UINT16_BE (dy + i + 1, Y1); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); + } + if (i == width - 1) { + Y0 = s[i * 4 + 1] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_BE (dy + i, Y0); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); + } + } else { + for (i = 0; i < width; i++) { + Y0 = s[i * 4 + 1] >> 6; + GST_WRITE_UINT16_BE (dy + i, Y0); + } + } +} + +#define PACK_I422_10LE GST_VIDEO_FORMAT_AYUV64, unpack_I422_10LE, 1, pack_I422_10LE +static void +unpack_I422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x >> 1; + sv += x >> 1; + + for (i = 0; i < width; i++) { + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = 0xffff; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } + } +} + +static void +pack_I422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); guint16 Y0, Y1, U, V; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width - 1; i += 2) { Y0 = s[i * 4 + 1] >> 6; @@ -1856,39 +2585,42 @@ U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_LE (destY + i + 0, Y0); - GST_WRITE_UINT16_LE (destY + i + 1, Y1); - GST_WRITE_UINT16_LE (destU + (i >> 1), U); - GST_WRITE_UINT16_LE (destV + (i >> 1), V); + GST_WRITE_UINT16_LE (dy + i + 0, Y0); + GST_WRITE_UINT16_LE (dy + i + 1, Y1); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); } if (i == width - 1) { Y0 = s[i * 4 + 1] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_LE (destY + i, Y0); - GST_WRITE_UINT16_LE (destU + (i >> 1), U); - GST_WRITE_UINT16_LE (destV + (i >> 1), V); + GST_WRITE_UINT16_LE (dy + i, Y0); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); } } -#define PACK_I420_10BE GST_VIDEO_FORMAT_AYUV64, unpack_I420_10BE, 1, pack_I420_10BE +#define PACK_I422_10BE GST_VIDEO_FORMAT_AYUV64, unpack_I422_10BE, 1, pack_I422_10BE static void -unpack_I420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +unpack_I422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - gint uv = GET_UV_420 (y, flags); - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (uv); - guint16 *srcV = GET_V_LINE (uv); - guint16 *d = dest, Y, U, V; + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, Y, U, V; + + sy += x; + su += x >> 1; + sv += x >> 1; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_BE (srcY + i) << 6; - U = GST_READ_UINT16_BE (srcU + (i >> 1)) << 6; - V = GST_READ_UINT16_BE (srcV + (i >> 1)) << 6; + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { Y |= (Y >> 10); @@ -1900,22 +2632,27 @@ d[i * 4 + 1] = Y; d[i * 4 + 2] = U; d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } } } static void -pack_I420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +pack_I422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { int i; - gint uv = GET_UV_420 (y, flags); - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (uv); - guint16 *destV = GET_V_LINE (uv); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); guint16 Y0, Y1, U, V; - const guint16 *s = src; + const guint16 *restrict s = src; for (i = 0; i < width - 1; i += 2) { Y0 = s[i * 4 + 1] >> 6; @@ -1923,46 +2660,54 @@ U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_BE (destY + i + 0, Y0); - GST_WRITE_UINT16_BE (destY + i + 1, Y1); - GST_WRITE_UINT16_BE (destU + (i >> 1), U); - GST_WRITE_UINT16_BE (destV + (i >> 1), V); + GST_WRITE_UINT16_BE (dy + i + 0, Y0); + GST_WRITE_UINT16_BE (dy + i + 1, Y1); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); } if (i == width - 1) { Y0 = s[i * 4 + 1] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_BE (destY + i, Y0); - GST_WRITE_UINT16_BE (destU + (i >> 1), U); - GST_WRITE_UINT16_BE (destV + (i >> 1), V); + GST_WRITE_UINT16_BE (dy + i, Y0); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); } } -#define PACK_I422_10LE GST_VIDEO_FORMAT_AYUV64, unpack_I422_10LE, 1, pack_I422_10LE +#define PACK_A444_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A444_10LE, 1, pack_A444_10LE static void -unpack_I422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +unpack_A444_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (y); - guint16 *srcV = GET_V_LINE (y); - guint16 *d = dest, Y, U, V; + guint16 *restrict sa = GET_A_LINE (y); + guint16 *restrict sy = GET_Y_LINE (y); + guint16 *restrict su = GET_U_LINE (y); + guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x; + sv += x; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_LE (srcY + i) << 6; - U = GST_READ_UINT16_LE (srcU + (i >> 1)) << 6; - V = GST_READ_UINT16_LE (srcV + (i >> 1)) << 6; + A = GST_READ_UINT16_LE (sa + i) << 6; + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + i) << 6; + V = GST_READ_UINT16_LE (sv + i) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); Y |= (Y >> 10); U |= (U >> 10); V |= (V >> 10); } - d[i * 4 + 0] = 0xffff; + d[i * 4 + 0] = A; d[i * 4 + 1] = Y; d[i * 4 + 2] = U; d[i * 4 + 3] = V; @@ -1970,102 +2715,460 @@ } static void -pack_I422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +pack_A444_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { int i; - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (y); - guint16 *destV = GET_V_LINE (y); - guint16 Y0, Y1, U, V; - const guint16 *s = src; + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); + guint16 A, Y, U, V; + const guint16 *restrict s = src; + + for (i = 0; i < width; i++) { + A = (s[i * 4 + 0]) >> 6; + Y = (s[i * 4 + 1]) >> 6; + U = (s[i * 4 + 2]) >> 6; + V = (s[i * 4 + 3]) >> 6; + + GST_WRITE_UINT16_LE (da + i, A); + GST_WRITE_UINT16_LE (dy + i, Y); + GST_WRITE_UINT16_LE (du + i, U); + GST_WRITE_UINT16_LE (dv + i, V); + } +} + +#define PACK_A444_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A444_10BE, 1, pack_A444_10BE +static void +unpack_A444_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + const guint16 *restrict sa = GET_A_LINE (y); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x; + sv += x; + + for (i = 0; i < width; i++) { + A = GST_READ_UINT16_BE (sa + i) << 6; + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + i) << 6; + V = GST_READ_UINT16_BE (sv + i) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = A; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + } +} + +static void +pack_A444_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); + guint16 A, Y, U, V; + const guint16 *restrict s = src; + + for (i = 0; i < width; i++) { + A = s[i * 4 + 0] >> 6; + Y = s[i * 4 + 1] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_BE (da + i, A); + GST_WRITE_UINT16_BE (dy + i, Y); + GST_WRITE_UINT16_BE (du + i, U); + GST_WRITE_UINT16_BE (dv + i, V); + } +} + +#define PACK_A420_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A420_10LE, 1, pack_A420_10LE +static void +unpack_A420_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + const guint16 *restrict sa = GET_A_LINE (y); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (uv); + const guint16 *restrict sv = GET_V_LINE (uv); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x >> 1; + sv += x >> 1; + + for (i = 0; i < width; i++) { + A = GST_READ_UINT16_LE (sa + i) << 6; + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = A; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } + } +} + +static void +pack_A420_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (uv); + guint16 *restrict dv = GET_V_LINE (uv); + guint16 A0, Y0, A1, Y1, U, V; + const guint16 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + for (i = 0; i < width - 1; i += 2) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + A1 = s[i * 4 + 4] >> 6; + Y1 = s[i * 4 + 5] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_LE (da + i + 0, A0); + GST_WRITE_UINT16_LE (dy + i + 0, Y0); + GST_WRITE_UINT16_LE (da + i + 1, A1); + GST_WRITE_UINT16_LE (dy + i + 1, Y1); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); + } + if (i == width - 1) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_LE (da + i, A0); + GST_WRITE_UINT16_LE (dy + i, Y0); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); + } + } else { + for (i = 0; i < width; i++) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + GST_WRITE_UINT16_LE (da + i, A0); + GST_WRITE_UINT16_LE (dy + i, Y0); + } + } +} + +#define PACK_A420_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A420_10BE, 1, pack_A420_10BE +static void +unpack_A420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + const guint16 *restrict sa = GET_A_LINE (y); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (uv); + const guint16 *restrict sv = GET_V_LINE (uv); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x >> 1; + sv += x >> 1; + + for (i = 0; i < width; i++) { + A = GST_READ_UINT16_BE (sa + i) << 6; + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = A; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } + } +} + +static void +pack_A420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + gint uv = GET_UV_420 (y, flags); + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (uv); + guint16 *restrict dv = GET_V_LINE (uv); + guint16 A0, Y0, A1, Y1, U, V; + const guint16 *restrict s = src; + + if (IS_CHROMA_LINE_420 (y, flags)) { + for (i = 0; i < width - 1; i += 2) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + A1 = s[i * 4 + 4] >> 6; + Y1 = s[i * 4 + 5] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_BE (da + i + 0, A0); + GST_WRITE_UINT16_BE (dy + i + 0, Y0); + GST_WRITE_UINT16_BE (da + i + 1, A1); + GST_WRITE_UINT16_BE (dy + i + 1, Y1); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); + } + if (i == width - 1) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + U = s[i * 4 + 2] >> 6; + V = s[i * 4 + 3] >> 6; + + GST_WRITE_UINT16_BE (da + i, A0); + GST_WRITE_UINT16_BE (dy + i, Y0); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); + } + } else { + for (i = 0; i < width; i++) { + A0 = s[i * 4 + 0] >> 6; + Y0 = s[i * 4 + 1] >> 6; + GST_WRITE_UINT16_BE (da + i, A0); + GST_WRITE_UINT16_BE (dy + i, Y0); + } + } +} + +#define PACK_A422_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A422_10LE, 1, pack_A422_10LE +static void +unpack_A422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) +{ + int i; + const guint16 *restrict sa = GET_A_LINE (y); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x >> 1; + sv += x >> 1; + + for (i = 0; i < width; i++) { + A = GST_READ_UINT16_LE (sa + i) << 6; + Y = GST_READ_UINT16_LE (sy + i) << 6; + U = GST_READ_UINT16_LE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6; + + if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); + Y |= (Y >> 10); + U |= (U >> 10); + V |= (V >> 10); + } + + d[i * 4 + 0] = A; + d[i * 4 + 1] = Y; + d[i * 4 + 2] = U; + d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } + } +} + +static void +pack_A422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, + const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], + const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, + gint y, gint width) +{ + int i; + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); + guint16 A0, Y0, A1, Y1, U, V; + const guint16 *restrict s = src; for (i = 0; i < width - 1; i += 2) { + A0 = s[i * 4 + 0] >> 6; Y0 = s[i * 4 + 1] >> 6; + A1 = s[i * 4 + 4] >> 6; Y1 = s[i * 4 + 5] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_LE (destY + i + 0, Y0); - GST_WRITE_UINT16_LE (destY + i + 1, Y1); - GST_WRITE_UINT16_LE (destU + (i >> 1), U); - GST_WRITE_UINT16_LE (destV + (i >> 1), V); + GST_WRITE_UINT16_LE (da + i + 0, A0); + GST_WRITE_UINT16_LE (dy + i + 0, Y0); + GST_WRITE_UINT16_LE (da + i + 1, A1); + GST_WRITE_UINT16_LE (dy + i + 1, Y1); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); } if (i == width - 1) { + A0 = s[i * 4 + 0] >> 6; Y0 = s[i * 4 + 1] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_LE (destY + i, Y0); - GST_WRITE_UINT16_LE (destU + (i >> 1), U); - GST_WRITE_UINT16_LE (destV + (i >> 1), V); + GST_WRITE_UINT16_LE (da + i, A0); + GST_WRITE_UINT16_LE (dy + i, Y0); + GST_WRITE_UINT16_LE (du + (i >> 1), U); + GST_WRITE_UINT16_LE (dv + (i >> 1), V); } } -#define PACK_I422_10BE GST_VIDEO_FORMAT_AYUV64, unpack_I422_10BE, 1, pack_I422_10BE +#define PACK_A422_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A422_10BE, 1, pack_A422_10BE static void -unpack_I422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +unpack_A422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width) { int i; - guint16 *srcY = GET_Y_LINE (y); - guint16 *srcU = GET_U_LINE (y); - guint16 *srcV = GET_V_LINE (y); - guint16 *d = dest, Y, U, V; + const guint16 *restrict sa = GET_A_LINE (y); + const guint16 *restrict sy = GET_Y_LINE (y); + const guint16 *restrict su = GET_U_LINE (y); + const guint16 *restrict sv = GET_V_LINE (y); + guint16 *restrict d = dest, A, Y, U, V; + + sa += x; + sy += x; + su += x >> 1; + sv += x >> 1; for (i = 0; i < width; i++) { - Y = GST_READ_UINT16_BE (srcY + i) << 6; - U = GST_READ_UINT16_BE (srcU + (i >> 1)) << 6; - V = GST_READ_UINT16_BE (srcV + (i >> 1)) << 6; + A = GST_READ_UINT16_BE (sa + i) << 6; + Y = GST_READ_UINT16_BE (sy + i) << 6; + U = GST_READ_UINT16_BE (su + (i >> 1)) << 6; + V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6; if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) { + A |= (A >> 10); Y |= (Y >> 10); U |= (U >> 10); V |= (V >> 10); } - d[i * 4 + 0] = 0xffff; + d[i * 4 + 0] = A; d[i * 4 + 1] = Y; d[i * 4 + 2] = U; d[i * 4 + 3] = V; + + if (x & 1) { + x = 0; + su++; + sv++; + } } } static void -pack_I422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, +pack_A422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags, const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES], const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site, gint y, gint width) { int i; - guint16 *destY = GET_Y_LINE (y); - guint16 *destU = GET_U_LINE (y); - guint16 *destV = GET_V_LINE (y); - guint16 Y0, Y1, U, V; - const guint16 *s = src; + guint16 *restrict da = GET_A_LINE (y); + guint16 *restrict dy = GET_Y_LINE (y); + guint16 *restrict du = GET_U_LINE (y); + guint16 *restrict dv = GET_V_LINE (y); + guint16 A0, Y0, A1, Y1, U, V; + const guint16 *restrict s = src; for (i = 0; i < width - 1; i += 2) { + A0 = s[i * 4 + 0] >> 6; Y0 = s[i * 4 + 1] >> 6; + A1 = s[i * 4 + 4] >> 6; Y1 = s[i * 4 + 5] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_BE (destY + i + 0, Y0); - GST_WRITE_UINT16_BE (destY + i + 1, Y1); - GST_WRITE_UINT16_BE (destU + (i >> 1), U); - GST_WRITE_UINT16_BE (destV + (i >> 1), V); + GST_WRITE_UINT16_BE (da + i + 0, A0); + GST_WRITE_UINT16_BE (dy + i + 0, Y0); + GST_WRITE_UINT16_BE (da + i + 1, A1); + GST_WRITE_UINT16_BE (dy + i + 1, Y1); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); } if (i == width - 1) { + A0 = s[i * 4 + 0] >> 6; Y0 = s[i * 4 + 1] >> 6; U = s[i * 4 + 2] >> 6; V = s[i * 4 + 3] >> 6; - GST_WRITE_UINT16_BE (destY + i, Y0); - GST_WRITE_UINT16_BE (destU + (i >> 1), U); - GST_WRITE_UINT16_BE (destV + (i >> 1), V); + GST_WRITE_UINT16_BE (da + i, A0); + GST_WRITE_UINT16_BE (dy + i, Y0); + GST_WRITE_UINT16_BE (du + (i >> 1), U); + GST_WRITE_UINT16_BE (dv + (i >> 1), V); } } @@ -2217,6 +3320,7 @@ #define DPTH8888 8, 4, { 0, 0, 0, 0 }, { 8, 8, 8, 8 } #define DPTH8880 8, 4, { 0, 0, 0, 0 }, { 8, 8, 8, 0 } #define DPTH10_10_10 10, 3, { 0, 0, 0, 0 }, { 10, 10, 10, 0 } +#define DPTH10_10_10_10 10, 4, { 0, 0, 0, 0 }, { 10, 10, 10, 10 } #define DPTH16 16, 1, { 0, 0, 0, 0 }, { 16, 0, 0, 0 } #define DPTH16_16_16 16, 3, { 0, 0, 0, 0 }, { 16, 16, 16, 0 } #define DPTH16_16_16_16 16, 4, { 0, 0, 0, 0 }, { 16, 16, 16, 16 } @@ -2232,6 +3336,7 @@ #define PSTR122 { 1, 2, 2, 0 } #define PSTR2 { 2, 0, 0, 0 } #define PSTR222 { 2, 2, 2, 0 } +#define PSTR2222 { 2, 2, 2, 2 } #define PSTR244 { 2, 4, 4, 0 } #define PSTR444 { 4, 4, 4, 0 } #define PSTR4444 { 4, 4, 4, 4 } @@ -2278,6 +3383,7 @@ #define SUB444 { 0, 0, 0, 0 }, { 0, 0, 0, 0 } #define SUB4444 { 0, 0, 0, 0 }, { 0, 0, 0, 0 } #define SUB4204 { 0, 1, 1, 0 }, { 0, 1, 1, 0 } +#define SUB4224 { 0, 1, 1, 0 }, { 0, 0, 0, 0 } /* tile_mode, tile_width, tile_height */ #define TILE_64x32(mode) GST_VIDEO_TILE_MODE_ ##mode, 6, 5 @@ -2288,6 +3394,8 @@ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } } #define MAKE_YUVA_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA, depth, pstride, plane, offs, sub, pack } } +#define MAKE_YUVA_LE_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack ) \ + { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } } #define MAKE_YUVA_PACK_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA | GST_VIDEO_FORMAT_FLAG_UNPACK, depth, pstride, plane, offs, sub, pack } } #define MAKE_YUVA_LE_PACK_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \ @@ -2315,7 +3423,7 @@ #define MAKE_GRAY_LE_FORMAT(name, desc, depth, pstride, plane, offs, sub, pack) \ { 0x00000000, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_GRAY | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } } -static VideoFormat formats[] = { +static const VideoFormat formats[] = { {0x00000000, {GST_VIDEO_FORMAT_UNKNOWN, "UNKNOWN", "unknown video", 0, DPTH0, PSTR0, PLANE_NA, OFFS0}}, {0x00000000, {GST_VIDEO_FORMAT_ENCODED, "ENCODED", "encoded video", @@ -2446,12 +3554,26 @@ OFFS0, SUB444, PACK_GBR_10LE), MAKE_YUV_FORMAT (NV16, "raw video", GST_MAKE_FOURCC ('N', 'V', '1', '6'), - DPTH888, PSTR111, PLANE011, OFFS001, SUB422, PACK_NV16), + DPTH888, PSTR122, PLANE011, OFFS001, SUB422, PACK_NV16), MAKE_YUV_FORMAT (NV24, "raw video", GST_MAKE_FOURCC ('N', 'V', '2', '4'), - DPTH888, PSTR111, PLANE011, OFFS001, SUB444, PACK_NV24), + DPTH888, PSTR122, PLANE011, OFFS001, SUB444, PACK_NV24), MAKE_YUV_T_FORMAT (NV12_64Z32, "raw video", GST_MAKE_FOURCC ('T', 'M', '1', '2'), DPTH8880, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12_64Z32, TILE_64x32 (ZFLIPZ_2X2)), + MAKE_YUVA_FORMAT (A420_10BE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4204, PACK_A420_10BE), + MAKE_YUVA_LE_FORMAT (A420_10LE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4204, PACK_A420_10LE), + MAKE_YUVA_FORMAT (A422_10BE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4224, PACK_A422_10BE), + MAKE_YUVA_LE_FORMAT (A422_10LE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4224, PACK_A422_10LE), + MAKE_YUVA_FORMAT (A444_10BE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4444, PACK_A444_10BE), + MAKE_YUVA_LE_FORMAT (A444_10LE, "raw video", 0x00000000, DPTH10_10_10_10, + PSTR2222, PLANE0123, OFFS0, SUB4444, PACK_A444_10LE), + MAKE_YUV_FORMAT (NV61, "raw video", GST_MAKE_FOURCC ('N', 'V', '6', '1'), + DPTH888, PSTR122, PLANE011, OFFS010, SUB422, PACK_NV61), }; static GstVideoFormat @@ -2656,6 +3778,8 @@ return GST_VIDEO_FORMAT_NV21; case GST_MAKE_FOURCC ('N', 'V', '1', '6'): return GST_VIDEO_FORMAT_NV16; + case GST_MAKE_FOURCC ('N', 'V', '6', '1'): + return GST_VIDEO_FORMAT_NV61; case GST_MAKE_FOURCC ('N', 'V', '2', '4'): return GST_VIDEO_FORMAT_NV24; case GST_MAKE_FOURCC ('v', '3', '0', '8'): @@ -2728,6 +3852,15 @@ return formats[format].fourcc; } +/** + * gst_video_format_to_string: + * @format: a #GstVideoFormat video format + * + * Returns a string containing a descriptive name for + * the #GstVideoFormat if there is one, or NULL otherwise. + * + * Returns: the name corresponding to @format + */ const gchar * gst_video_format_to_string (GstVideoFormat format) { diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-format.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-format.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-format.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-format.h 2015-10-22 08:01:34.000000000 +0000 @@ -84,8 +84,15 @@ * @GST_VIDEO_FORMAT_GBR_10BE: planar 4:4:4 RGB, 10 bits per channel * @GST_VIDEO_FORMAT_GBR_10LE: planar 4:4:4 RGB, 10 bits per channel * @GST_VIDEO_FORMAT_NV16: planar 4:2:2 YUV with interleaved UV plane + * @GST_VIDEO_FORMAT_NV61: planar 4:2:2 YUV with interleaved VU plane (Since 1.6) * @GST_VIDEO_FORMAT_NV24: planar 4:4:4 YUV with interleaved UV plane * @GST_VIDEO_FORMAT_NV12_64Z32: NV12 with 64x32 tiling in zigzag pattern + * @GST_VIDEO_FORMAT_A420_10BE: planar 4:4:2:0 YUV, 10 bits per channel + * @GST_VIDEO_FORMAT_A420_10LE: planar 4:4:2:0 YUV, 10 bits per channel + * @GST_VIDEO_FORMAT_A422_10BE: planar 4:4:2:2 YUV, 10 bits per channel + * @GST_VIDEO_FORMAT_A422_10LE: planar 4:4:2:2 YUV, 10 bits per channel + * @GST_VIDEO_FORMAT_A444_10BE: planar 4:4:4:4 YUV, 10 bits per channel + * @GST_VIDEO_FORMAT_A444_10LE: planar 4:4:4:4 YUV, 10 bits per channel * * Enum value describing the most common video formats. */ @@ -144,6 +151,13 @@ GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV12_64Z32, + GST_VIDEO_FORMAT_A420_10BE, + GST_VIDEO_FORMAT_A420_10LE, + GST_VIDEO_FORMAT_A422_10BE, + GST_VIDEO_FORMAT_A422_10LE, + GST_VIDEO_FORMAT_A444_10BE, + GST_VIDEO_FORMAT_A444_10LE, + GST_VIDEO_FORMAT_NV61, } GstVideoFormat; #define GST_VIDEO_MAX_PLANES 4 @@ -239,9 +253,14 @@ * @width: the amount of pixels to unpack. * * Unpacks @width pixels from the given planes and strides containing data of - * format @info. The pixels will be unpacked into @dest which each component - * interleaved. @dest should at least be big enough to hold @width * - * n_components * size(unpack_format) bytes. + * format @info. The pixels will be unpacked into @dest with each component + * interleaved as per @info's unpack_format, which will usually be one of + * #GST_VIDEO_FORMAT_ARGB, #GST_VIDEO_FORMAT_AYUV, #GST_VIDEO_FORMAT_ARGB64 or + * #GST_VIDEO_FORMAT_AYUV64 depending on the format to unpack. + * @dest should at least be big enough to hold @width * bytes_per_pixel bytes + * where bytes_per_pixel relates to the unpack format and will usually be + * either 4 or 8 depending on the unpack format. bytes_per_pixel will be + * the same as the pixel stride for plane 0 for the above formats. * * For subsampled formats, the components will be duplicated in the destination * array. Reconstruction of the missing components can be performed in a @@ -272,14 +291,18 @@ * contain at least pack_lines lines with a stride of @sstride and @y * should be a multiple of pack_lines. * - * Subsampled formats will use the horizontally cosited component in the - * destination. Subsampling should be performed before packing. + * Subsampled formats will use the horizontally and vertically cosited + * component from the source. Subsampling should be performed before + * packing. * - * Because tis function does not have a x coordinate, it is not possible to + * Because this function does not have a x coordinate, it is not possible to * pack pixels starting from an unaligned position. For tiled images this * means that packing should start from a tile coordinate. For subsampled - * formats this means that a complete pixel need to be packed. + * formats this means that a complete pixel needs to be packed. */ +/* FIXME(2.0): remove the chroma_site, it is unused and is not relevant for + * packing, chroma subsampling based on chroma-site should be done in a separate + * step before packing*/ typedef void (*GstVideoFormatPack) (const GstVideoFormatInfo *info, GstVideoPackFlags flags, const gpointer src, gint sstride, @@ -460,10 +483,11 @@ #define GST_VIDEO_FORMATS_ALL "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, " \ "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, " \ - "YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, " \ - "v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \ + "YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, " \ + "GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \ "IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, " \ - " Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }" + " Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, "\ + " A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }" /** * GST_VIDEO_CAPS_MAKE: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-frame.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-frame.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-frame.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-frame.c 2015-10-22 08:01:34.000000000 +0000 @@ -72,13 +72,19 @@ frame->info = *info; if (meta) { + /* All these values must be consistent */ + g_return_val_if_fail (info->finfo->format == meta->format, FALSE); + g_return_val_if_fail (info->width <= meta->width, FALSE); + g_return_val_if_fail (info->height <= meta->height, FALSE); + g_return_val_if_fail (info->finfo->n_planes == meta->n_planes, FALSE); + frame->info.finfo = gst_video_format_get_info (meta->format); frame->info.width = meta->width; frame->info.height = meta->height; frame->id = meta->id; frame->flags = meta->flags; - for (i = 0; i < info->finfo->n_planes; i++) { + for (i = 0; i < meta->n_planes; i++) { frame->info.offset[i] = meta->offset[i]; if (!gst_video_meta_map (meta, i, &frame->map[i], &frame->data[i], &frame->info.stride[i], flags)) @@ -105,7 +111,10 @@ 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); + frame->meta = meta; /* buffer flags enhance the frame flags */ @@ -189,11 +198,13 @@ 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 +213,9 @@ } 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); } /** @@ -249,10 +262,16 @@ return TRUE; } - /* FIXME. assumes subsampling of component N is the same as plane N, which is + /* FIXME: assumes subsampling of component N is the same as plane N, which is * currently true for all formats we have but it might not be in the future. */ w = GST_VIDEO_FRAME_COMP_WIDTH (dest, plane) * GST_VIDEO_FRAME_COMP_PSTRIDE (dest, plane); + /* FIXME: workaround for complex formats like v210, UYVP and IYU1 that have + * pstride == 0 */ + if (w == 0) + w = MIN (GST_VIDEO_INFO_PLANE_STRIDE (dinfo, plane), + GST_VIDEO_INFO_PLANE_STRIDE (sinfo, plane)); + h = GST_VIDEO_FRAME_COMP_HEIGHT (dest, plane); ss = GST_VIDEO_INFO_PLANE_STRIDE (sinfo, plane); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-frame.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-frame.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-frame.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-frame.h 2015-10-22 08:01:34.000000000 +0000 @@ -30,11 +30,15 @@ * GstVideoFrameFlags: * @GST_VIDEO_FRAME_FLAG_NONE: no flags * @GST_VIDEO_FRAME_FLAG_INTERLACED: The video frame is interlaced. In mixed - * interlace-mode, this flags specifies if the frame is interlace or + * interlace-mode, this flag specifies if the frame is interlaced or * progressive. * @GST_VIDEO_FRAME_FLAG_TFF: The video frame has the top field first * @GST_VIDEO_FRAME_FLAG_RFF: The video frame has the repeat flag * @GST_VIDEO_FRAME_FLAG_ONEFIELD: The video frame has one field + * @GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW: The video contains one or + * more non-mono views + * @GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE: The video frame is the first + * in a set of corresponding views provided as sequential frames. * * Extra video frame flags */ @@ -43,7 +47,9 @@ GST_VIDEO_FRAME_FLAG_INTERLACED = (1 << 0), GST_VIDEO_FRAME_FLAG_TFF = (1 << 1), GST_VIDEO_FRAME_FLAG_RFF = (1 << 2), - GST_VIDEO_FRAME_FLAG_ONEFIELD = (1 << 3) + GST_VIDEO_FRAME_FLAG_ONEFIELD = (1 << 3), + GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW = (1 << 4), + GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE = (1 << 5) } GstVideoFrameFlags; /* circular dependency, need to include this after defining the enums */ @@ -53,6 +59,7 @@ /** * GstVideoFrame: * @info: the #GstVideoInfo + * @flags: #GstVideoFrameFlags for the frame * @buffer: the mapped buffer * @meta: pointer to metadata if any * @id: id of the mapped frame. the id can for example be used to @@ -135,8 +142,19 @@ * @GST_VIDEO_BUFFER_FLAG_ONEFIELD: If the #GstBuffer is interlaced, then only the * first field (as defined by the %GST_VIDEO_BUFFER_TFF * flag setting) is to be displayed. + * @GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW: The #GstBuffer contains one or more specific views, + * such as left or right eye view. This flags is set on + * any buffer that contains non-mono content - even for + * streams that contain only a single viewpoint. In mixed + * mono / non-mono streams, the absense of the flag marks + * mono buffers. + * @GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE: When conveying stereo/multiview content with + * frame-by-frame methods, this flag marks the first buffer + * in a bundle of frames that belong together. + * @GST_VIDEO_BUFFER_FLAG_LAST: Offset to define more flags * - * Additional video buffer flags. + * Additional video buffer flags. These flags can potentially be used on any + * buffers carrying video data - even encoded data. */ typedef enum { GST_VIDEO_BUFFER_FLAG_INTERLACED = (GST_BUFFER_FLAG_LAST << 0), @@ -144,9 +162,30 @@ GST_VIDEO_BUFFER_FLAG_RFF = (GST_BUFFER_FLAG_LAST << 2), GST_VIDEO_BUFFER_FLAG_ONEFIELD = (GST_BUFFER_FLAG_LAST << 3), + GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW = (GST_BUFFER_FLAG_LAST << 4), + GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE = (GST_BUFFER_FLAG_LAST << 5), + GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8) } GstVideoBufferFlags; +/** + * GstVideoFrameMapFlags: + * @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__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video.h 2015-10-22 08:01:34.000000000 +0000 @@ -26,9 +26,13 @@ #include #include +#include #include #include #include +#include +#include +#include G_BEGIN_DECLS @@ -100,6 +104,9 @@ guint display_par_n, guint display_par_d); +gboolean gst_video_guess_framerate (GstClockTime duration, + gint * dest_n, gint * dest_d); + /* convert/encode video sample from one format to another */ typedef void (*GstVideoConvertSampleCallback) (GstSample * sample, GError *error, gpointer user_data); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-info.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-info.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-info.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-info.c 2015-10-22 08:01:34.000000000 +0000 @@ -29,6 +29,83 @@ #include "video-info.h" #include "video-tile.h" +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-info", 0, + "video-info structure"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + +/** + * gst_video_info_copy: + * @info: a #GstVideoInfo + * + * Copy a GstVideoInfo structure. + * + * Returns: a new #GstVideoInfo. free with gst_video_info_free. + * + * Since: 1.6 + */ +GstVideoInfo * +gst_video_info_copy (const GstVideoInfo * info) +{ + return g_slice_dup (GstVideoInfo, info); +} + +/** + * gst_video_info_free: + * @info: a #GstVideoInfo + * + * Free a GstVideoInfo structure previously allocated with gst_video_info_new() + * or gst_video_info_copy(). + * + * Since: 1.6 + */ +void +gst_video_info_free (GstVideoInfo * info) +{ + g_slice_free (GstVideoInfo, info); +} + +G_DEFINE_BOXED_TYPE (GstVideoInfo, gst_video_info, + (GBoxedCopyFunc) gst_video_info_copy, (GBoxedFreeFunc) gst_video_info_free); + +/** + * gst_video_info_new: + * + * Allocate a new #GstVideoInfo that is also initialized with + * gst_video_info_init(). + * + * Returns: a new #GstVideoInfo. free with gst_video_info_free(). + * + * Since: 1.6 + */ +GstVideoInfo * +gst_video_info_new (void) +{ + GstVideoInfo *info; + + info = g_slice_new (GstVideoInfo); + gst_video_info_init (info); + + return info; +} + static int fill_planes (GstVideoInfo * info); /** @@ -52,6 +129,7 @@ info->fps_d = 1; info->par_n = 1; info->par_d = 1; + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_NONE; } #define MAKE_COLORIMETRY(r,m,t,p) { \ @@ -63,15 +141,58 @@ #define DEFAULT_RGB 2 #define DEFAULT_GRAY 3 #define DEFAULT_UNKNOWN 4 +#define DEFAULT_YUV_UHD 5 static const GstVideoColorimetry default_color[] = { - MAKE_COLORIMETRY (_16_235, BT601, BT709, BT470M), + MAKE_COLORIMETRY (_16_235, BT601, BT709, SMPTE170M), MAKE_COLORIMETRY (_16_235, BT709, BT709, BT709), - MAKE_COLORIMETRY (_0_255, RGB, UNKNOWN, UNKNOWN), + MAKE_COLORIMETRY (_0_255, RGB, SRGB, BT709), MAKE_COLORIMETRY (_0_255, BT601, UNKNOWN, UNKNOWN), MAKE_COLORIMETRY (_UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN), + MAKE_COLORIMETRY (_16_235, BT2020, BT2020_12, BT2020), }; +static void +set_default_colorimetry (GstVideoInfo * info) +{ + const GstVideoFormatInfo *finfo = info->finfo; + + if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) { + if (info->height >= 2160) { + info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED; + info->colorimetry = default_color[DEFAULT_YUV_UHD]; + } else if (info->height > 576) { + info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED; + info->colorimetry = default_color[DEFAULT_YUV_HD]; + } else { + info->chroma_site = GST_VIDEO_CHROMA_SITE_NONE; + info->colorimetry = default_color[DEFAULT_YUV_SD]; + } + } else if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) { + info->colorimetry = default_color[DEFAULT_GRAY]; + } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) { + info->colorimetry = default_color[DEFAULT_RGB]; + } else { + info->colorimetry = default_color[DEFAULT_UNKNOWN]; + } +} + +static gboolean +validate_colorimetry (GstVideoInfo * info) +{ + const GstVideoFormatInfo *finfo = info->finfo; + + if (!GST_VIDEO_FORMAT_INFO_IS_RGB (finfo) && + info->colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_RGB) + return FALSE; + + if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo) && + info->colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_UNKNOWN) + return FALSE; + + return TRUE; +} + /** * gst_video_info_set_format: * @info: a #GstVideoInfo @@ -81,38 +202,25 @@ * * Set the default info for a video frame of @format and @width and @height. * - * Note: This initializes @info first, no values are preserved. + * Note: This initializes @info first, no values are preserved. This function + * does not set the offsets correctly for interlaced vertically + * subsampled formats. */ void gst_video_info_set_format (GstVideoInfo * info, GstVideoFormat format, guint width, guint height) { - const GstVideoFormatInfo *finfo; - g_return_if_fail (info != NULL); g_return_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN); gst_video_info_init (info); - finfo = gst_video_format_get_info (format); - - info->flags = 0; - info->finfo = finfo; + info->finfo = gst_video_format_get_info (format); info->width = width; info->height = height; + info->views = 1; - if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) { - if (height > 576) - info->colorimetry = default_color[DEFAULT_YUV_HD]; - else - info->colorimetry = default_color[DEFAULT_YUV_SD]; - } else if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) { - info->colorimetry = default_color[DEFAULT_GRAY]; - } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) { - info->colorimetry = default_color[DEFAULT_RGB]; - } else { - info->colorimetry = default_color[DEFAULT_UNKNOWN]; - } + set_default_colorimetry (info); fill_planes (info); } @@ -124,8 +232,18 @@ "fields" }; -static const gchar * -gst_interlace_mode_to_string (GstVideoInterlaceMode mode) +/** + * gst_video_interlace_mode_to_string: + * @mode: a #GstVideoInterlaceMode + * + * Convert @mode to its string representation. + * + * Returns: @mode as a string or NULL if @mode in invalid. + * + * Since: 1.6 + */ +const gchar * +gst_video_interlace_mode_to_string (GstVideoInterlaceMode mode) { if (((guint) mode) >= G_N_ELEMENTS (interlace_mode)) return NULL; @@ -133,8 +251,20 @@ return interlace_mode[mode]; } -static GstVideoInterlaceMode -gst_interlace_mode_from_string (const gchar * mode) +/** + * gst_video_interlace_mode_from_string: + * @mode: a mode + * + * Convert @mode to a #GstVideoInterlaceMode + * + * Returns: the #GstVideoInterlaceMode of @mode or + * #GST_VIDEO_INTERLACE_MODE_PROGRESSIVE when @mode is not a valid + * string representation for a #GstVideoInterlaceMode. + * + * Since: 1.6 + */ +GstVideoInterlaceMode +gst_video_interlace_mode_from_string (const gchar * mode) { gint i; for (i = 0; i < G_N_ELEMENTS (interlace_mode); i++) { @@ -159,7 +289,7 @@ GstStructure *structure; const gchar *s; GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN; - gint width = 0, height = 0, views; + gint width = 0, height = 0; gint fps_n, fps_d; gint par_n, par_d; @@ -194,7 +324,11 @@ format != GST_VIDEO_FORMAT_ENCODED) goto no_height; - gst_video_info_set_format (info, format, width, height); + gst_video_info_init (info); + + info->finfo = gst_video_format_get_info (format); + info->width = width; + info->height = height; if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) { if (fps_n == 0) { @@ -211,32 +345,59 @@ info->fps_d = 1; } + if (gst_structure_get_fraction (structure, "pixel-aspect-ratio", + &par_n, &par_d)) { + info->par_n = par_n; + info->par_d = par_d; + } else { + info->par_n = 1; + info->par_d = 1; + } + if ((s = gst_structure_get_string (structure, "interlace-mode"))) - info->interlace_mode = gst_interlace_mode_from_string (s); + info->interlace_mode = gst_video_interlace_mode_from_string (s); else info->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE; - if (gst_structure_get_int (structure, "views", &views)) - info->views = views; - else - info->views = 1; + { + if ((s = gst_structure_get_string (structure, "multiview-mode"))) + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = + gst_video_multiview_mode_from_caps_string (s); + else + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_NONE; + + gst_structure_get_flagset (structure, "multiview-flags", + &GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), NULL); + + if (!gst_structure_get_int (structure, "views", &info->views)) + info->views = 1; + + /* At one point, I tried normalising the half-aspect flag here, + * but it behaves weird for GstVideoInfo operations other than + * directly converting to/from caps - sometimes causing the + * PAR to be doubled/halved too many times */ + } if ((s = gst_structure_get_string (structure, "chroma-site"))) info->chroma_site = gst_video_chroma_from_string (s); else info->chroma_site = GST_VIDEO_CHROMA_SITE_UNKNOWN; - if ((s = gst_structure_get_string (structure, "colorimetry"))) - gst_video_colorimetry_from_string (&info->colorimetry, s); - - if (gst_structure_get_fraction (structure, "pixel-aspect-ratio", - &par_n, &par_d)) { - info->par_n = par_n; - info->par_d = par_d; + if ((s = gst_structure_get_string (structure, "colorimetry"))) { + if (!gst_video_colorimetry_from_string (&info->colorimetry, s)) { + GST_WARNING ("unparsable colorimetry, using default"); + set_default_colorimetry (info); + } else if (!validate_colorimetry (info)) { + GST_WARNING ("invalid colorimetry, using default"); + set_default_colorimetry (info); + } } else { - info->par_n = 1; - info->par_d = 1; + GST_DEBUG ("no colorimetry, using default"); + set_default_colorimetry (info); } + + fill_planes (info); + return TRUE; /* ERROR */ @@ -303,6 +464,19 @@ return FALSE; if (GST_VIDEO_INFO_FPS_D (info) != GST_VIDEO_INFO_FPS_D (other)) return FALSE; + if (!gst_video_colorimetry_is_equal (&GST_VIDEO_INFO_COLORIMETRY (info), + &GST_VIDEO_INFO_COLORIMETRY (other))) + return FALSE; + if (GST_VIDEO_INFO_CHROMA_SITE (info) != GST_VIDEO_INFO_CHROMA_SITE (other)) + return FALSE; + if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != + GST_VIDEO_INFO_MULTIVIEW_MODE (other)) + return FALSE; + if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) != + GST_VIDEO_INFO_MULTIVIEW_FLAGS (other)) + return FALSE; + if (GST_VIDEO_INFO_VIEWS (info) != GST_VIDEO_INFO_VIEWS (other)) + return FALSE; for (i = 0; i < info->finfo->n_planes; i++) { if (info->stride[i] != other->stride[i]) @@ -328,6 +502,7 @@ GstCaps *caps; const gchar *format; gchar *color; + gint par_n, par_d; g_return_val_if_fail (info != NULL, NULL); g_return_val_if_fail (info->finfo != NULL, NULL); @@ -339,11 +514,52 @@ caps = gst_caps_new_simple ("video/x-raw", "format", G_TYPE_STRING, format, "width", G_TYPE_INT, info->width, - "height", G_TYPE_INT, info->height, - "pixel-aspect-ratio", GST_TYPE_FRACTION, info->par_n, info->par_d, NULL); + "height", G_TYPE_INT, info->height, NULL); + + par_n = info->par_n; + par_d = info->par_d; gst_caps_set_simple (caps, "interlace-mode", G_TYPE_STRING, - gst_interlace_mode_to_string (info->interlace_mode), NULL); + gst_video_interlace_mode_to_string (info->interlace_mode), NULL); + + if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != GST_VIDEO_MULTIVIEW_MODE_NONE) { + const gchar *caps_str = NULL; + + /* If the half-aspect flag is set, applying it into the PAR of the + * resulting caps now seems safe, and helps with automatic behaviour + * in elements that aren't explicitly multiview aware */ + if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) & + GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) { + GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &= + ~GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT; + switch (GST_VIDEO_INFO_MULTIVIEW_MODE (info)) { + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: + case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: + par_n *= 2; /* double the width / half the height */ + break; + case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: + par_d *= 2; /* half the width / double the height */ + break; + default: + break; + } + } + + caps_str = + gst_video_multiview_mode_to_caps_string (GST_VIDEO_INFO_MULTIVIEW_MODE + (info)); + if (caps_str != NULL) { + gst_caps_set_simple (caps, "multiview-mode", G_TYPE_STRING, + caps_str, "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, + GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), GST_FLAG_SET_MASK_EXACT, NULL); + } + } + + gst_caps_set_simple (caps, "pixel-aspect-ratio", + GST_TYPE_FRACTION, par_n, par_d, NULL); if (info->chroma_site != GST_VIDEO_CHROMA_SITE_UNKNOWN) gst_caps_set_simple (caps, "chroma-site", G_TYPE_STRING, @@ -373,7 +589,7 @@ static int fill_planes (GstVideoInfo * info) { - gsize width, height; + gsize width, height, cr_h; width = (gsize) info->width; height = (gsize) info->height; @@ -467,10 +683,11 @@ info->stride[2] = info->stride[1]; info->offset[0] = 0; info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); - info->offset[2] = info->offset[1] + - info->stride[1] * (GST_ROUND_UP_2 (height) / 2); - info->size = info->offset[2] + - info->stride[2] * (GST_ROUND_UP_2 (height) / 2); + cr_h = GST_ROUND_UP_2 (height) / 2; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->offset[2] = info->offset[1] + info->stride[1] * cr_h; + info->size = info->offset[2] + info->stride[2] * cr_h; break; case GST_VIDEO_FORMAT_Y41B: info->stride[0] = GST_ROUND_UP_4 (width); @@ -508,9 +725,13 @@ info->stride[1] = info->stride[0]; info->offset[0] = 0; info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); - info->size = info->stride[0] * GST_ROUND_UP_2 (height) * 3 / 2; + cr_h = GST_ROUND_UP_2 (height) / 2; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->size = info->offset[1] + info->stride[0] * cr_h; break; case GST_VIDEO_FORMAT_NV16: + case GST_VIDEO_FORMAT_NV61: info->stride[0] = GST_ROUND_UP_4 (width); info->stride[1] = info->stride[0]; info->offset[0] = 0; @@ -531,10 +752,11 @@ info->stride[3] = info->stride[0]; info->offset[0] = 0; info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); - info->offset[2] = info->offset[1] + - info->stride[1] * (GST_ROUND_UP_2 (height) / 2); - info->offset[3] = info->offset[2] + - info->stride[2] * (GST_ROUND_UP_2 (height) / 2); + cr_h = GST_ROUND_UP_2 (height) / 2; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->offset[2] = info->offset[1] + info->stride[1] * cr_h; + info->offset[3] = info->offset[2] + info->stride[2] * cr_h; info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height); break; case GST_VIDEO_FORMAT_YUV9: @@ -544,10 +766,11 @@ info->stride[2] = info->stride[1]; info->offset[0] = 0; info->offset[1] = info->stride[0] * height; - info->offset[2] = info->offset[1] + - info->stride[1] * (GST_ROUND_UP_4 (height) / 4); - info->size = info->offset[2] + - info->stride[2] * (GST_ROUND_UP_4 (height) / 4); + cr_h = GST_ROUND_UP_4 (height) / 4; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->offset[2] = info->offset[1] + info->stride[1] * cr_h; + info->size = info->offset[2] + info->stride[2] * cr_h; break; case GST_VIDEO_FORMAT_I420_10LE: case GST_VIDEO_FORMAT_I420_10BE: @@ -556,10 +779,11 @@ info->stride[2] = info->stride[1]; info->offset[0] = 0; info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); - info->offset[2] = info->offset[1] + - info->stride[1] * (GST_ROUND_UP_2 (height) / 2); - info->size = info->offset[2] + - info->stride[2] * (GST_ROUND_UP_2 (height) / 2); + cr_h = GST_ROUND_UP_2 (height) / 2; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->offset[2] = info->offset[1] + info->stride[1] * cr_h; + info->size = info->offset[2] + info->stride[2] * cr_h; break; case GST_VIDEO_FORMAT_I422_10LE: case GST_VIDEO_FORMAT_I422_10BE: @@ -596,6 +820,48 @@ info->size = info->offset[1] + GST_ROUND_UP_128 (width) * GST_ROUND_UP_64 (height) / 2; break; + case GST_VIDEO_FORMAT_A420_10LE: + case GST_VIDEO_FORMAT_A420_10BE: + info->stride[0] = GST_ROUND_UP_4 (width * 2); + info->stride[1] = GST_ROUND_UP_4 (width); + info->stride[2] = info->stride[1]; + info->stride[3] = info->stride[0]; + info->offset[0] = 0; + info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); + cr_h = GST_ROUND_UP_2 (height) / 2; + if (GST_VIDEO_INFO_IS_INTERLACED (info)) + cr_h = GST_ROUND_UP_2 (cr_h); + info->offset[2] = info->offset[1] + info->stride[1] * cr_h; + info->offset[3] = info->offset[2] + info->stride[2] * cr_h; + info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height); + break; + case GST_VIDEO_FORMAT_A422_10LE: + case GST_VIDEO_FORMAT_A422_10BE: + info->stride[0] = GST_ROUND_UP_4 (width * 2); + info->stride[1] = GST_ROUND_UP_4 (width); + info->stride[2] = info->stride[1]; + info->stride[3] = info->stride[0]; + info->offset[0] = 0; + info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); + info->offset[2] = info->offset[1] + + info->stride[1] * GST_ROUND_UP_2 (height); + info->offset[3] = + info->offset[2] + info->stride[2] * GST_ROUND_UP_2 (height); + info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height); + break; + case GST_VIDEO_FORMAT_A444_10LE: + case GST_VIDEO_FORMAT_A444_10BE: + info->stride[0] = GST_ROUND_UP_4 (width * 2); + info->stride[1] = info->stride[0]; + info->stride[2] = info->stride[0]; + info->stride[3] = info->stride[0]; + info->offset[0] = 0; + info->offset[1] = info->stride[0] * height; + info->offset[2] = info->offset[1] * 2; + info->offset[3] = info->offset[1] * 3; + info->size = info->stride[0] * height * 4; + break; + case GST_VIDEO_FORMAT_ENCODED: break; case GST_VIDEO_FORMAT_UNKNOWN: diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-info.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-info.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-info.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-info.h 2015-10-22 08:01:34.000000000 +0000 @@ -55,6 +55,162 @@ GST_VIDEO_INTERLACE_MODE_FIELDS } GstVideoInterlaceMode; +const gchar * gst_video_interlace_mode_to_string (GstVideoInterlaceMode mode); +GstVideoInterlaceMode gst_video_interlace_mode_from_string (const gchar * mode); + +/** + * GstVideoMultiviewMode: + * @GST_VIDEO_MULTIVIEW_MODE_NONE: A special value indicating + * no multiview information. Used in GstVideoInfo and other places to + * indicate that no specific multiview handling has been requested or + * provided. This value is never carried on caps. + * @GST_VIDEO_MULTIVIEW_MODE_MONO: All frames are monoscopic. + * @GST_VIDEO_MULTIVIEW_MODE_LEFT: All frames represent a left-eye view. + * @GST_VIDEO_MULTIVIEW_MODE_RIGHT: All frames represent a right-eye view. + * @GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: Left and right eye views are + * provided in the left and right half of the frame respectively. + * @GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: Left and right eye + * views are provided in the left and right half of the frame, but + * have been sampled using quincunx method, with half-pixel offset + * between the 2 views. + * @GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: Alternating vertical + * columns of pixels represent the left and right eye view respectively. + * @GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: Alternating horizontal + * rows of pixels represent the left and right eye view respectively. + * @GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: The top half of the frame + * contains the left eye, and the bottom half the right eye. + * @GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: Pixels are arranged with + * alternating pixels representing left and right eye views in a + * checkerboard fashion. + * @GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME: Left and right eye views + * are provided in separate frames alternately. + * @GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME: Multiple + * independent views are provided in separate frames in sequence. + * This method only applies to raw video buffers at the moment. + * Specific view identification is via the #GstVideoMultiviewMeta + * and #GstVideoMeta(s) on raw video buffers. + * @GST_VIDEO_MULTIVIEW_MODE_SEPARATED: Multiple views are + * provided as separate #GstMemory framebuffers attached to each + * #GstBuffer, described by the #GstVideoMultiviewMeta + * and #GstVideoMeta(s) + * + * All possible stereoscopic 3D and multiview representations. + * In conjunction with #GstVideoMultiviewFlags, describes how + * multiview content is being transported in the stream. + */ +typedef enum { + GST_VIDEO_MULTIVIEW_MODE_NONE = -1, + GST_VIDEO_MULTIVIEW_MODE_MONO = 0, + /* Single view modes */ + GST_VIDEO_MULTIVIEW_MODE_LEFT, + GST_VIDEO_MULTIVIEW_MODE_RIGHT, + /* Stereo view modes */ + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, + GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, + GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD, + /* Padding for new frame packing modes */ + + GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME = 32, + /* Multivew mode(s) */ + GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME, + GST_VIDEO_MULTIVIEW_MODE_SEPARATED + /* future expansion for annotated modes */ +} GstVideoMultiviewMode; + +/** + * GstVideoMultiviewFramePacking: + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE: A special value indicating + * no frame packing info. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO: All frames are monoscopic. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT: All frames represent a left-eye view. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT: All frames represent a right-eye view. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE: Left and right eye views are + * provided in the left and right half of the frame respectively. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX: Left and right eye + * views are provided in the left and right half of the frame, but + * have been sampled using quincunx method, with half-pixel offset + * between the 2 views. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED: Alternating vertical + * columns of pixels represent the left and right eye view respectively. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED: Alternating horizontal + * rows of pixels represent the left and right eye view respectively. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM: The top half of the frame + * contains the left eye, and the bottom half the right eye. + * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD: Pixels are arranged with + * alternating pixels representing left and right eye views in a + * checkerboard fashion. + * + * #GstVideoMultiviewFramePacking represents the subset of #GstVideoMultiviewMode + * values that can be applied to any video frame without needing extra metadata. + * It can be used by elements that provide a property to override the + * multiview interpretation of a video stream when the video doesn't contain + * any markers. + * + * This enum is used (for example) on playbin, to re-interpret a played + * video stream as a stereoscopic video. The individual enum values are + * equivalent to and have the same value as the matching #GstVideoMultiviewMode. + * + */ +typedef enum { + GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE = GST_VIDEO_MULTIVIEW_MODE_NONE, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO = GST_VIDEO_MULTIVIEW_MODE_MONO, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT = GST_VIDEO_MULTIVIEW_MODE_LEFT, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT = GST_VIDEO_MULTIVIEW_MODE_RIGHT, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED = GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED = GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, + GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD = GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD +} GstVideoMultiviewFramePacking; + +#define GST_VIDEO_MULTIVIEW_MAX_FRAME_PACKING GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD + +/** + * GstVideoMultiviewFlags: + * @GST_VIDEO_MULTIVIEW_FLAGS_NONE: No flags + * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST: For stereo streams, the + * normal arrangement of left and right views is reversed. + * @GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED: The left view is vertically + * mirrored. + * @GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED: The left view is horizontally + * mirrored. + * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED: The right view is + * vertically mirrored. + * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED: The right view is + * horizontally mirrored. + * @GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT: For frame-packed + * multiview modes, indicates that the individual + * views have been encoded with half the true width or height + * and should be scaled back up for display. This flag + * is used for overriding input layout interpretation + * by adjusting pixel-aspect-ratio. + * For side-by-side, column interleaved or checkerboard packings, the + * pixel width will be doubled. For row interleaved and top-bottom + * encodings, pixel height will be doubled. + * @GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO: The video stream contains both + * mono and multiview portions, signalled on each buffer by the + * absence or presence of the @GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW + * buffer flag. + * + * GstVideoMultiviewFlags are used to indicate extra properties of a + * stereo/multiview stream beyond the frame layout and buffer mapping + * that is conveyed in the #GstMultiviewMode. + */ +typedef enum { + GST_VIDEO_MULTIVIEW_FLAGS_NONE = 0, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST = (1 << 0), + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED = (1 << 1), + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED = (1 << 2), + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED = (1 << 3), + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED = (1 << 4), + GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT = (1 << 14), + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO = (1 << 15) +} GstVideoMultiviewFlags; + /** * GstVideoFlags: * @GST_VIDEO_FLAG_NONE: no flags @@ -88,6 +244,8 @@ * @fps_d: the framerate demnominator * @offset: offsets of the planes * @stride: strides of the planes + * @multiview_mode: delivery mode for multiple views. (Since 1.6) + * @multiview_flags: flags for multiple views configuration (Since 1.6) * * Information describing image properties. This information can be filled * in from GstCaps with gst_video_info_from_caps(). The information is also used @@ -117,10 +275,21 @@ gsize offset[GST_VIDEO_MAX_PLANES]; gint stride[GST_VIDEO_MAX_PLANES]; - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; + /* Union preserves padded struct size for backwards compat + * Consumer code should use the accessor macros for fields */ + union { + struct { + GstVideoMultiviewMode multiview_mode; + GstVideoMultiviewFlags multiview_flags; + } abi; + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; + } ABI; }; +#define GST_TYPE_VIDEO_INFO (gst_video_info_get_type ()) +GType gst_video_info_get_type (void); + /* general info */ #define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo)) #define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo)) @@ -141,6 +310,12 @@ #define GST_VIDEO_INFO_FPS_N(i) ((i)->fps_n) #define GST_VIDEO_INFO_FPS_D(i) ((i)->fps_d) +#define GST_VIDEO_INFO_COLORIMETRY(i) ((i)->colorimetry) +#define GST_VIDEO_INFO_CHROMA_SITE(i) ((i)->chroma_site) + +#define GST_VIDEO_INFO_MULTIVIEW_MODE(i) ((i)->ABI.abi.multiview_mode) +#define GST_VIDEO_INFO_MULTIVIEW_FLAGS(i) ((i)->ABI.abi.multiview_flags) + /* dealing with GstVideoInfo flags */ #define GST_VIDEO_INFO_FLAG_IS_SET(i,flag) ((GST_VIDEO_INFO_FLAGS(i) & (flag)) == (flag)) #define GST_VIDEO_INFO_FLAG_SET(i,flag) (GST_VIDEO_INFO_FLAGS(i) |= (flag)) @@ -163,26 +338,29 @@ #define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c)) #define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c)) -void gst_video_info_init (GstVideoInfo *info); - -void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, - guint width, guint height); - -gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps); - -GstCaps * gst_video_info_to_caps (GstVideoInfo *info); - -gboolean gst_video_info_convert (GstVideoInfo *info, - GstFormat src_format, - gint64 src_value, - GstFormat dest_format, - gint64 *dest_value); -gboolean gst_video_info_is_equal (const GstVideoInfo *info, - const GstVideoInfo *other); +GstVideoInfo * gst_video_info_new (void); +void gst_video_info_init (GstVideoInfo *info); +GstVideoInfo * gst_video_info_copy (const GstVideoInfo *info); +void gst_video_info_free (GstVideoInfo *info); + +void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, + guint width, guint height); + +gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps); + +GstCaps * gst_video_info_to_caps (GstVideoInfo *info); + +gboolean gst_video_info_convert (GstVideoInfo *info, + GstFormat src_format, + gint64 src_value, + GstFormat dest_format, + gint64 *dest_value); +gboolean gst_video_info_is_equal (const GstVideoInfo *info, + const GstVideoInfo *other); #include -void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align); +void gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align); G_END_DECLS diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-multiview.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-multiview.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-multiview.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-multiview.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,493 @@ +/* GStreamer + * Copyright (C) <2015> Jan Schmidt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "video.h" + +GType +gst_video_multiview_flagset_get_type (void) +{ + static volatile GType type = 0; + + if (g_once_init_enter (&type)) { + GType _type = gst_flagset_register (GST_TYPE_VIDEO_MULTIVIEW_FLAGS); + g_once_init_leave (&type, _type); + } + return type; +} + + +/* Caps mnemonics for the various multiview representations */ + +static const struct mview_map_t +{ + const gchar *caps_repr; + GstVideoMultiviewMode mode; +} gst_multiview_modes[] = { + { + "mono", GST_VIDEO_MULTIVIEW_MODE_MONO}, { + "left", GST_VIDEO_MULTIVIEW_MODE_LEFT}, { + "right", GST_VIDEO_MULTIVIEW_MODE_RIGHT}, { + "side-by-side", GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE}, { + "side-by-side-quincunx", GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX}, { + "column-interleaved", GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED}, { + "row-interleaved", GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED}, { + "top-bottom", GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM}, { + "checkerboard", GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD}, { + "frame-by-frame", GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME}, { + "multiview-frame-by-frame", + GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME}, { + "separated", GST_VIDEO_MULTIVIEW_MODE_SEPARATED} +}; + +/** + * gst_video_multiview_mode_to_caps_string: + * @mview_mode: A #GstVideoMultiviewMode value + * + * Returns: The caps string representation of the mode, or NULL if invalid. + * + * Given a #GstVideoMultiviewMode returns the multiview-mode caps string + * for insertion into a caps structure + * + * Since: 1.6 + */ +const gchar * +gst_video_multiview_mode_to_caps_string (GstVideoMultiviewMode mview_mode) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (gst_multiview_modes); i++) { + if (gst_multiview_modes[i].mode == mview_mode) { + return gst_multiview_modes[i].caps_repr; + } + } + + return NULL; +} + +/** + * gst_video_multiview_mode_from_caps_string: + * @caps_mview_mode: multiview-mode field string from caps + * + * Returns: The #GstVideoMultiviewMode value + * + * Given a string from a caps multiview-mode field, + * output the corresponding #GstVideoMultiviewMode + * or #GST_VIDEO_MULTIVIEW_MODE_NONE + * + * Since: 1.6 + */ +GstVideoMultiviewMode +gst_video_multiview_mode_from_caps_string (const gchar * caps_mview_mode) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (gst_multiview_modes); i++) { + if (g_str_equal (gst_multiview_modes[i].caps_repr, caps_mview_mode)) { + return gst_multiview_modes[i].mode; + } + } + + GST_ERROR ("Invalid multiview info %s", caps_mview_mode); + g_warning ("Invalid multiview info %s", caps_mview_mode); + + return GST_VIDEO_MULTIVIEW_MODE_NONE; +} + +/* Array of mono, unpacked, double-height and double-width modes */ +static GValue mode_values[5]; + +static void +init_mview_mode_vals (void) +{ + static gsize mview_mode_vals_init = 0; + + if (g_once_init_enter (&mview_mode_vals_init)) { + GValue item = { 0, }; + GValue *list; + + g_value_init (&item, G_TYPE_STRING); + + /* Mono modes */ + list = mode_values; + g_value_init (list, GST_TYPE_LIST); + g_value_set_static_string (&item, "mono"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "left"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "right"); + gst_value_list_append_value (list, &item); + + /* Unpacked modes - ones split across buffers or memories */ + list = mode_values + 1; + g_value_init (list, GST_TYPE_LIST); + g_value_set_static_string (&item, "separated"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "frame-by-frame"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "multiview-frame-by-frame"); + gst_value_list_append_value (list, &item); + + /* Double height modes */ + list = mode_values + 2; + g_value_init (list, GST_TYPE_LIST); + g_value_set_static_string (&item, "top-bottom"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "row-interleaved"); + gst_value_list_append_value (list, &item); + + /* Double width modes */ + list = mode_values + 3; + g_value_init (list, GST_TYPE_LIST); + g_value_set_static_string (&item, "side-by-side"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "side-by-side-quincunx"); + gst_value_list_append_value (list, &item); + g_value_set_static_string (&item, "column-interleaved"); + gst_value_list_append_value (list, &item); + + /* Double size (both width & height) modes */ + list = mode_values + 4; + g_value_init (list, GST_TYPE_LIST); + g_value_set_static_string (&item, "checkerboard"); + gst_value_list_append_value (list, &item); + + g_value_unset (&item); + g_once_init_leave (&mview_mode_vals_init, 1); + } +} + +/** + * gst_video_multiview_get_mono_modes: + * + * Returns: A const #GValue containing a list of mono video modes + * + * Utility function that returns a #GValue with a GstList of mono video + * modes (mono/left/right) for use in caps negotiations. + * + * Since: 1.6 + */ +const GValue * +gst_video_multiview_get_mono_modes (void) +{ + init_mview_mode_vals (); + return mode_values; +} + +/** + * gst_video_multiview_get_unpacked_modes: + * + * Returns: A const #GValue containing a list of 'unpacked' stereo video modes + * + * Utility function that returns a #GValue with a GstList of unpacked + * stereo video modes (separated/frame-by-frame/frame-by-frame-multiview) + * for use in caps negotiations. + * + * Since: 1.6 + */ +const GValue * +gst_video_multiview_get_unpacked_modes (void) +{ + init_mview_mode_vals (); + return mode_values + 1; +} + +/** + * gst_video_multiview_get_doubled_height_modes: + * + * Returns: A const #GValue containing a list of stereo video modes + * + * Utility function that returns a #GValue with a GstList of packed stereo + * video modes with double the height of a single view for use in + * caps negotiations. Currently this is top-bottom and row-interleaved. + * + * Since: 1.6 + */ +const GValue * +gst_video_multiview_get_doubled_height_modes (void) +{ + init_mview_mode_vals (); + return mode_values + 2; +} + +/** + * gst_video_multiview_get_doubled_width_modes: + * + * Returns: A const #GValue containing a list of stereo video modes + * + * Utility function that returns a #GValue with a GstList of packed stereo + * video modes with double the width of a single view for use in + * caps negotiations. Currently this is side-by-side, side-by-side-quincunx + * and column-interleaved. + * + * Since: 1.6 + */ +const GValue * +gst_video_multiview_get_doubled_width_modes (void) +{ + init_mview_mode_vals (); + return mode_values + 3; +} + +/** + * gst_video_multiview_get_doubled_size_modes: + * + * Returns: A const #GValue containing a list of stereo video modes + * + * Utility function that returns a #GValue with a GstList of packed + * stereo video modes that have double the width/height of a single + * view for use in caps negotiation. Currently this is just + * 'checkerboard' layout. + * + * Since: 1.6 + */ +const GValue * +gst_video_multiview_get_doubled_size_modes (void) +{ + init_mview_mode_vals (); + return mode_values + 4; +} + +static void +gst_video_multiview_separated_video_info_from_packed (GstVideoInfo * info) +{ + GstVideoMultiviewMode mview_mode; + + mview_mode = GST_VIDEO_INFO_MULTIVIEW_MODE (info); + + /* Normalise the half-aspect flag by adjusting PAR */ + switch (mview_mode) { + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: + case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: + info->width /= 2; + info->views *= 2; + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED; + if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) & + GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) + info->par_n *= 2; + break; + case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: + info->height /= 2; + info->views *= 2; + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED; + if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) & + GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) + info->par_d *= 2; + break; + default: + /* Mono/left/right/frame-by-frame/already separated */ + break; + } + GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &= + ~GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT; +} + +static void +gst_video_multiview_separated_video_info_to_packed (GstVideoInfo * info, + GstVideoMultiviewMode packed_mview_mode, + GstVideoMultiviewFlags packed_mview_flags) +{ + /* Convert single-frame info to a packed mode */ + GST_VIDEO_INFO_MULTIVIEW_MODE (info) = packed_mview_mode; + GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) = packed_mview_flags; + + switch (packed_mview_mode) { + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: + case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: + info->width *= 2; + info->views /= 2; + if (packed_mview_flags & GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) + info->par_d *= 2; + break; + case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: + case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: + info->height *= 2; + info->views /= 2; + if (packed_mview_flags & GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) + info->par_n *= 2; + break; + default: + break; + } +} + +/** + * gst_video_multiview_video_info_change_mode: + * @info: A #GstVideoInfo structure to operate on + * @out_mview_mode: A #GstVideoMultiviewMode value + * @out_mview_flags: A set of #GstVideoMultiviewFlags + * + * Utility function that transforms the width/height/PAR + * and multiview mode and flags of a #GstVideoInfo into + * the requested mode. + * + * Since: 1.6 + */ +void +gst_video_multiview_video_info_change_mode (GstVideoInfo * info, + GstVideoMultiviewMode out_mview_mode, + GstVideoMultiviewFlags out_mview_flags) +{ + gst_video_multiview_separated_video_info_from_packed (info); + gst_video_multiview_separated_video_info_to_packed (info, out_mview_mode, + out_mview_flags); +} + +/** + * gst_video_multiview_guess_half_aspect: + * @mv_mode: A #GstVideoMultiviewMode + * @width: Video frame width in pixels + * @height: Video frame height in pixels + * @par_n: Numerator of the video pixel-aspect-ratio + * @par_d: Denominator of the video pixel-aspect-ratio + * + * Returns: A boolean indicating whether the + * #GST_VIDEO_MULTIVIEW_FLAG_HALF_ASPECT flag should be set. + * + * Utility function that heuristically guess whether a + * frame-packed stereoscopic video contains half width/height + * encoded views, or full-frame views by looking at the + * overall display aspect ratio. + * + * Since: 1.6 + */ +gboolean +gst_video_multiview_guess_half_aspect (GstVideoMultiviewMode mv_mode, + guint width, guint height, guint par_n, guint par_d) +{ + switch (mv_mode) { + case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: + case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: + /* If the video is wider than it is tall, assume half aspect */ + if (height * par_d <= width * par_n) + return TRUE; + break; + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: + case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: + case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: + /* If the video DAR is less than 2.39:1, assume half-aspect */ + if (width * par_n < 2.39 * height * par_d) + return TRUE; + break; + default: + break; + } + return FALSE; +} + +#if 0 /* Multiview meta disabled for now */ +GType +gst_video_multiview_meta_api_get_type (void) +{ + static volatile GType type = 0; + static const gchar *tags[] = + { GST_META_TAG_VIDEO_STR, GST_META_TAG_MEMORY_STR, + NULL + }; + + if (g_once_init_enter (&type)) { + GType _type = gst_meta_api_type_register ("GstVideoMultiviewMetaAPI", tags); + g_once_init_leave (&type, _type); + } + return type; +} + +static void +gst_video_multiview_meta_free (GstVideoMultiviewMeta * mview_meta, + GstBuffer * buffer) +{ + g_free (mview_meta->view_info); +} + +/* video multiview metadata */ +const GstMetaInfo * +gst_video_multiview_meta_get_info (void) +{ + static const GstMetaInfo *video_meta_info = NULL; + + if (g_once_init_enter (&video_meta_info)) { + const GstMetaInfo *meta = + gst_meta_register (GST_VIDEO_MULTIVIEW_META_API_TYPE, + "GstVideoMultiviewMeta", + sizeof (GstVideoMultiviewMeta), + (GstMetaInitFunction) NULL, + (GstMetaFreeFunction) gst_video_multiview_meta_free, + NULL); + g_once_init_leave (&video_meta_info, meta); + } + + return video_meta_info; +} + + +GstVideoMultiviewMeta * +gst_buffer_add_video_multiview_meta (GstBuffer * buffer, guint n_views) +{ + GstVideoMultiviewMeta *meta; + + meta = + (GstVideoMultiviewMeta *) gst_buffer_add_meta (buffer, + GST_VIDEO_MULTIVIEW_META_INFO, NULL); + + if (!meta) + return NULL; + + meta->view_info = g_new0 (GstVideoMultiviewViewInfo, n_views); + meta->n_views = n_views; + + return meta; +} + +void +gst_video_multiview_meta_set_n_views (GstVideoMultiviewMeta * mview_meta, + guint n_views) +{ + guint i; + + mview_meta->view_info = + g_renew (GstVideoMultiviewViewInfo, mview_meta->view_info, n_views); + + if (mview_meta->view_info == NULL) { + if (n_views > 0) + g_warning ("Failed to allocate GstVideoMultiview data"); + mview_meta->n_views = 0; + return; + } + + /* Make sure new entries are zero */ + for (i = mview_meta->n_views; i < n_views; i++) { + GstVideoMultiviewViewInfo *info = mview_meta->view_info + i; + + info->meta_id = 0; + info->view_label = GST_VIDEO_MULTIVIEW_VIEW_UNKNOWN; + } + mview_meta->n_views = n_views; +} + +#endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-multiview.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-multiview.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-multiview.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-multiview.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,86 @@ +/* GStreamer + * Copyright (C) <2015> Jan Schmidt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_MULTIVIEW_H__ +#define __GST_VIDEO_MULTIVIEW_H__ + +#include + +G_BEGIN_DECLS + +#define GST_TYPE_VIDEO_MULTIVIEW_FLAGSET (gst_video_multiview_flagset_get_type()) +GType gst_video_multiview_flagset_get_type (void); + +const gchar * gst_video_multiview_mode_to_caps_string (GstVideoMultiviewMode mview_mode); +GstVideoMultiviewMode gst_video_multiview_mode_from_caps_string (const gchar * caps_mview_mode); + +const GValue *gst_video_multiview_get_mono_modes(void); +const GValue *gst_video_multiview_get_unpacked_modes(void); +const GValue *gst_video_multiview_get_doubled_height_modes(void); +const GValue *gst_video_multiview_get_doubled_width_modes(void); +const GValue *gst_video_multiview_get_doubled_size_modes(void); + +void gst_video_multiview_video_info_change_mode (GstVideoInfo *info, + GstVideoMultiviewMode out_mview_mode, GstVideoMultiviewFlags out_mview_flags); +gboolean gst_video_multiview_guess_half_aspect (GstVideoMultiviewMode mv_mode, + guint width, guint height, guint par_n, guint par_d); + + +#if 0 /* Place-holder for later MVC support */ +#define GST_VIDEO_MULTIVIEW_META_API_TYPE (gst_video_multiview_meta_api_get_type()) +#define GST_VIDEO_MULTIVIEW_META_INFO (gst_video_multiview_meta_get_info()) + +typedef struct _GstVideoMultiviewMeta GstVideoMultiviewMeta; +typedef struct _GstVideoMultiviewViewInfo GstVideoMultiviewViewInfo; + +GType gst_video_multiview_meta_api_get_type (void); +const GstMetaInfo * gst_video_multiview_meta_get_info (void); + +GstVideoMultiviewMeta * gst_buffer_add_video_multiview_meta (GstBuffer *buffer, guint n_views); +#define gst_buffer_get_video_multiview_meta(b) ((GstVideoMultiviewMeta *)gst_buffer_get_meta((b),GST_VIDEO_MULTIVIEW_META_API_TYPE)) + +void gst_video_multiview_meta_set_n_views (GstVideoMultiviewMeta *mview_meta, guint n_views); + +typedef enum { + GST_VIDEO_MULTIVIEW_VIEW_UNKNOWN = 0, + GST_VIDEO_MULTIVIEW_VIEW_MONO = 1, + GST_VIDEO_MULTIVIEW_VIEW_LEFT = 2, + GST_VIDEO_MULTIVIEW_VIEW_RIGHT = 3 +} GstVideoMultiviewViewLabel; + +struct _GstVideoMultiviewViewInfo { + GstVideoMultiviewViewLabel view_label; + + guint meta_id; /* id of the GstVideoMeta for this view */ + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + +struct _GstVideoMultiviewMeta { + GstMeta meta; + + guint n_views; + GstVideoMultiviewViewInfo *view_info; +}; +#endif + +G_END_DECLS + +#endif diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc-dist.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc-dist.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc-dist.c 2014-09-24 08:19:13.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc-dist.c 2015-10-30 14:21:44.000000000 +0000 @@ -104,6 +104,8 @@ const guint8 * ORC_RESTRICT s3, int n); void video_orc_pack_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, + int n); void video_orc_unpack_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); void video_orc_pack_YUY2 (guint8 * ORC_RESTRICT d1, @@ -163,11 +165,297 @@ void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n); +void video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, + int n, int m); +void video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n); +void video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n); +void video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, int n); +void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, int n); +void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, int p1, int n); +void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, + guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, int n); +void video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m); +void video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m); +void video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m); +void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m); +void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, + guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, int n); +void video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m); +void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m); +void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m); +void video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m); +void video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m); +void video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m); +void video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, + int n); +void video_orc_matrix8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, + orc_int64 p4, int n); +void _custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, + orc_int64 p4, int n); +void video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n); +void video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n); +void video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n); +void video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1, + int n); +void video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n); +void video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n); +void video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n); +void video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, + int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n); +void video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, + int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n); +void video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n); +void video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, + const gint16 * ORC_RESTRICT s7, int n); +void video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1, + const gint16 * ORC_RESTRICT s1, int n); +void video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, + int d1_stride, const guint16 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n); +void video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n); +void video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n); +void video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n); +void video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n); +void video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); +void video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, int n); +void video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, + const guint16 * ORC_RESTRICT s2, int n); +void video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n); +void video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); +void video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n); +void video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, + int n); +void video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, orc_int64 p1, int n); +void video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n); +void video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n); +void video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n); +void video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n); /* begin Orc C target preamble */ @@ -259,8 +547,9 @@ var42 = var41.i; /* 3: splatbl */ var43.i = - ((var42 & 0xff) << 24) | ((var42 & 0xff) << 16) | ((var42 & 0xff) << 8) - | (var42 & 0xff); + ((((orc_uint32) var42) & 0xff) << 24) | ((((orc_uint32) var42) & 0xff) + << 16) | ((((orc_uint32) var42) & 0xff) << 8) | (((orc_uint32) var42) & + 0xff); /* 4: convubw */ var44.x4[0] = (orc_uint8) var43.x4[0]; var44.x4[1] = (orc_uint8) var43.x4[1]; @@ -368,8 +657,9 @@ var42 = var41.i; /* 3: splatbl */ var43.i = - ((var42 & 0xff) << 24) | ((var42 & 0xff) << 16) | ((var42 & 0xff) << 8) - | (var42 & 0xff); + ((((orc_uint32) var42) & 0xff) << 24) | ((((orc_uint32) var42) & 0xff) + << 16) | ((((orc_uint32) var42) & 0xff) << 8) | (((orc_uint32) var42) & + 0xff); /* 4: convubw */ var44.x4[0] = (orc_uint8) var43.x4[0]; var44.x4[1] = (orc_uint8) var43.x4[1]; @@ -451,7 +741,7 @@ static const orc_uint8 bc[] = { 1, 9, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 98, 108, 101, 110, 100, 95, 108, 105, 116, 116, 108, 101, 11, 4, 4, 12, 4, 4, 14, - 4, 255, 0, 0, 0, 14, 4, 8, 0, 0, 0, 20, 4, 20, 2, 20, + 4, 255, 0, 0, 0, 14, 2, 8, 0, 0, 0, 20, 4, 20, 2, 20, 1, 20, 4, 20, 8, 20, 8, 20, 8, 113, 32, 4, 163, 33, 32, 157, 34, 33, 152, 35, 34, 21, 2, 150, 38, 35, 21, 2, 95, 38, 38, 17, 21, 2, 150, 37, 32, 113, 32, 0, 21, 2, 150, 36, 32, 21, 2, 98, @@ -468,7 +758,7 @@ orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); orc_program_add_constant (p, 4, 0x000000ff, "c1"); - orc_program_add_constant (p, 4, 0x00000008, "c2"); + orc_program_add_constant (p, 2, 0x00000008, "c2"); orc_program_add_temporary (p, 4, "t1"); orc_program_add_temporary (p, 2, "t2"); orc_program_add_temporary (p, 1, "t3"); @@ -579,8 +869,9 @@ var44 = var43.i; /* 4: splatbl */ var45.i = - ((var44 & 0xff) << 24) | ((var44 & 0xff) << 16) | ((var44 & 0xff) << 8) - | (var44 & 0xff); + ((((orc_uint32) var44) & 0xff) << 24) | ((((orc_uint32) var44) & 0xff) + << 16) | ((((orc_uint32) var44) & 0xff) << 8) | (((orc_uint32) var44) & + 0xff); /* 5: convubw */ var46.x4[0] = (orc_uint8) var45.x4[0]; var46.x4[1] = (orc_uint8) var45.x4[1]; @@ -691,8 +982,9 @@ var44 = var43.i; /* 4: splatbl */ var45.i = - ((var44 & 0xff) << 24) | ((var44 & 0xff) << 16) | ((var44 & 0xff) << 8) - | (var44 & 0xff); + ((((orc_uint32) var44) & 0xff) << 24) | ((((orc_uint32) var44) & 0xff) + << 16) | ((((orc_uint32) var44) & 0xff) << 8) | (((orc_uint32) var44) & + 0xff); /* 5: convubw */ var46.x4[0] = (orc_uint8) var45.x4[0]; var46.x4[1] = (orc_uint8) var45.x4[1]; @@ -774,7 +1066,7 @@ static const orc_uint8 bc[] = { 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 98, 108, 101, 110, 100, 95, 98, 105, 103, 11, 4, 4, 12, 4, 4, 14, 4, 0, 0, - 0, 255, 14, 4, 24, 0, 0, 0, 14, 4, 8, 0, 0, 0, 20, 4, + 0, 255, 14, 4, 24, 0, 0, 0, 14, 2, 8, 0, 0, 0, 20, 4, 20, 4, 20, 2, 20, 1, 20, 4, 20, 8, 20, 8, 20, 8, 113, 32, 4, 126, 33, 32, 17, 163, 34, 33, 157, 35, 34, 152, 36, 35, 21, 2, 150, 39, 36, 21, 2, 95, 39, 39, 18, 21, 2, 150, 38, 32, 113, 32, @@ -792,7 +1084,7 @@ orc_program_add_source (p, 4, "s1"); orc_program_add_constant (p, 4, 0xff000000, "c1"); orc_program_add_constant (p, 4, 0x00000018, "c2"); - orc_program_add_constant (p, 4, 0x00000008, "c3"); + orc_program_add_constant (p, 2, 0x00000008, "c3"); orc_program_add_temporary (p, 4, "t1"); orc_program_add_temporary (p, 4, "t2"); orc_program_add_temporary (p, 2, "t3"); @@ -1307,6 +1599,137 @@ #endif +/* video_orc_pack_Y */ +#ifdef DISABLE_ORC +void +video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, + int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_int8 var34; + orc_union16 var35; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: select0lw */ + { + orc_union32 _src; + _src.i = var33.i; + var35.i = _src.x2[0]; + } + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var35.i; + var34 = _src.x2[1]; + } + /* 3: storeb */ + ptr0[i] = var34; + } + +} + +#else +static void +_backup_video_orc_pack_Y (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_int8 var34; + orc_union16 var35; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: select0lw */ + { + orc_union32 _src; + _src.i = var33.i; + var35.i = _src.x2[0]; + } + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var35.i; + var34 = _src.x2[1]; + } + /* 3: storeb */ + ptr0[i] = var34; + } + +} + +void +video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 16, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 89, 11, 1, 1, 12, 4, 4, 20, 2, 190, 32, 4, 189, 0, + 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_Y); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_Y"); + orc_program_set_backup_function (p, _backup_video_orc_pack_Y); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + /* video_orc_unpack_YUY2 */ #ifdef DISABLE_ORC void @@ -4230,16 +4653,10 @@ int i; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; ptr0 = (orc_union32 *) d1; ptr4 = (orc_union32 *) s1; @@ -4247,51 +4664,15 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44; - _dest.x2[1] = var47; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var46; - _dest.x2[1] = var45; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var49.i; - _dest.x2[1] = var48.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var35 = ptr4[i]; + /* 1: shrul */ + var36.i = ((orc_uint32) var35.i) >> 8; + /* 2: shll */ + var37.i = ((orc_uint32) var35.i) << 24; + /* 3: orl */ + var34.i = var37.i | var36.i; + /* 4: storel */ + ptr0[i] = var34; } } @@ -4304,16 +4685,10 @@ int n = ex->n; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; ptr0 = (orc_union32 *) ex->arrays[0]; ptr4 = (orc_union32 *) ex->arrays[4]; @@ -4321,51 +4696,15 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44; - _dest.x2[1] = var47; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var46; - _dest.x2[1] = var45; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var49.i; - _dest.x2[1] = var48.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var35 = ptr4[i]; + /* 1: shrul */ + var36.i = ((orc_uint32) var35.i) >> 8; + /* 2: shll */ + var37.i = ((orc_uint32) var35.i) << 24; + /* 3: orl */ + var34.i = var37.i | var36.i; + /* 4: storel */ + ptr0[i] = var34; } } @@ -4387,10 +4726,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, - 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, - 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4, - 199, 35, 34, 39, 199, 33, 32, 38, 196, 37, 35, 32, 196, 36, 33, 34, - 195, 0, 36, 37, 2, 0, + 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 4, 8, 0, + 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 113, 33, 4, 126, + 32, 33, 16, 124, 33, 33, 17, 123, 0, 33, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_video_orc_pack_RGBA); @@ -4400,26 +4738,18 @@ orc_program_set_backup_function (p, _backup_video_orc_pack_RGBA); orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); + orc_program_add_constant (p, 4, 0x00000008, "c1"); + orc_program_add_constant (p, 4, 0x00000018, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8, + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7, + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T1, + orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1); #endif @@ -4452,16 +4782,10 @@ int i; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; ptr0 = (orc_union32 *) d1; ptr4 = (orc_union32 *) s1; @@ -4469,51 +4793,15 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var46; - _dest.x2[1] = var45; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44; - _dest.x2[1] = var47; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var35 = ptr4[i]; + /* 1: shll */ + var36.i = ((orc_uint32) var35.i) << 8; + /* 2: shrul */ + var37.i = ((orc_uint32) var35.i) >> 24; + /* 3: orl */ + var34.i = var37.i | var36.i; + /* 4: storel */ + ptr0[i] = var34; } } @@ -4526,16 +4814,10 @@ int n = ex->n; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; ptr0 = (orc_union32 *) ex->arrays[0]; ptr4 = (orc_union32 *) ex->arrays[4]; @@ -4543,51 +4825,15 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var46; - _dest.x2[1] = var45; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var44; - _dest.x2[1] = var47; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var35 = ptr4[i]; + /* 1: shll */ + var36.i = ((orc_uint32) var35.i) << 8; + /* 2: shrul */ + var37.i = ((orc_uint32) var35.i) >> 24; + /* 3: orl */ + var34.i = var37.i | var36.i; + /* 4: storel */ + ptr0[i] = var34; } } @@ -4609,10 +4855,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 21, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, - 97, 99, 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1, - 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 37, - 36, 4, 199, 34, 33, 36, 199, 32, 35, 37, 196, 38, 32, 33, 196, 39, - 34, 35, 195, 0, 38, 39, 2, 0, + 97, 99, 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 4, + 8, 0, 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 113, 33, + 4, 124, 32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_video_orc_unpack_RGBA); @@ -4622,26 +4867,18 @@ orc_program_set_backup_function (p, _backup_video_orc_unpack_RGBA); orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); + orc_program_add_constant (p, 4, 0x00000008, "c1"); + orc_program_add_constant (p, 4, 0x00000018, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T5, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T6, + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2, + orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4, + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8, + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1); #endif @@ -4674,16 +4911,11 @@ int i; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; ptr0 = (orc_union32 *) d1; ptr4 = (orc_union32 *) s1; @@ -4691,51 +4923,17 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var47; - _dest.x2[1] = var44; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var45; - _dest.x2[1] = var46; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var34 = ptr4[i]; + /* 1: swapl */ + var36.i = ORC_SWAP_L (var34.i); + /* 2: shll */ + var37.i = ((orc_uint32) var36.i) << 8; + /* 3: shrul */ + var38.i = ((orc_uint32) var36.i) >> 24; + /* 4: orl */ + var35.i = var38.i | var37.i; + /* 5: storel */ + ptr0[i] = var35; } } @@ -4748,16 +4946,11 @@ int n = ex->n; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; ptr0 = (orc_union32 *) ex->arrays[0]; ptr4 = (orc_union32 *) ex->arrays[4]; @@ -4765,51 +4958,17 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var47; - _dest.x2[1] = var44; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var45; - _dest.x2[1] = var46; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var34 = ptr4[i]; + /* 1: swapl */ + var36.i = ORC_SWAP_L (var34.i); + /* 2: shll */ + var37.i = ((orc_uint32) var36.i) << 8; + /* 3: shrul */ + var38.i = ((orc_uint32) var36.i) >> 24; + /* 4: orl */ + var35.i = var38.i | var37.i; + /* 5: storel */ + ptr0[i] = var35; } } @@ -4831,10 +4990,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 21, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, - 97, 99, 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1, - 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 36, - 37, 4, 199, 33, 34, 36, 199, 35, 32, 37, 196, 38, 32, 33, 196, 39, - 34, 35, 195, 0, 38, 39, 2, 0, + 97, 99, 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 4, + 8, 0, 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 184, 33, + 4, 124, 32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_video_orc_unpack_ABGR); @@ -4844,26 +5002,18 @@ orc_program_set_backup_function (p, _backup_video_orc_unpack_ABGR); orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); + orc_program_add_constant (p, 4, 0x00000008, "c1"); + orc_program_add_constant (p, 4, 0x00000018, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_S1, - ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5, + orc_program_append_2 (p, "swapl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T6, + orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2, + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8, + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1); #endif @@ -4896,16 +5046,11 @@ int i; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; ptr0 = (orc_union32 *) d1; ptr4 = (orc_union32 *) s1; @@ -4913,51 +5058,17 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var47; - _dest.x2[1] = var44; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var45; - _dest.x2[1] = var46; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var34 = ptr4[i]; + /* 1: swapl */ + var36.i = ORC_SWAP_L (var34.i); + /* 2: shll */ + var37.i = ((orc_uint32) var36.i) << 8; + /* 3: shrul */ + var38.i = ((orc_uint32) var36.i) >> 24; + /* 4: orl */ + var35.i = var38.i | var37.i; + /* 5: storel */ + ptr0[i] = var35; } } @@ -4970,16 +5081,11 @@ int n = ex->n; orc_union32 *ORC_RESTRICT ptr0; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var40; - orc_union32 var41; - orc_union16 var42; - orc_union16 var43; - orc_int8 var44; - orc_int8 var45; - orc_int8 var46; - orc_int8 var47; - orc_union16 var48; - orc_union16 var49; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; ptr0 = (orc_union32 *) ex->arrays[0]; ptr4 = (orc_union32 *) ex->arrays[4]; @@ -4987,51 +5093,17 @@ for (i = 0; i < n; i++) { /* 0: loadl */ - var40 = ptr4[i]; - /* 1: splitlw */ - { - orc_union32 _src; - _src.i = var40.i; - var42.i = _src.x2[1]; - var43.i = _src.x2[0]; - } - /* 2: splitwb */ - { - orc_union16 _src; - _src.i = var42.i; - var44 = _src.x2[1]; - var45 = _src.x2[0]; - } - /* 3: splitwb */ - { - orc_union16 _src; - _src.i = var43.i; - var46 = _src.x2[1]; - var47 = _src.x2[0]; - } - /* 4: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var47; - _dest.x2[1] = var44; - var48.i = _dest.i; - } - /* 5: mergebw */ - { - orc_union16 _dest; - _dest.x2[0] = var45; - _dest.x2[1] = var46; - var49.i = _dest.i; - } - /* 6: mergewl */ - { - orc_union32 _dest; - _dest.x2[0] = var48.i; - _dest.x2[1] = var49.i; - var41.i = _dest.i; - } - /* 7: storel */ - ptr0[i] = var41; + var34 = ptr4[i]; + /* 1: swapl */ + var36.i = ORC_SWAP_L (var34.i); + /* 2: shll */ + var37.i = ((orc_uint32) var36.i) << 8; + /* 3: shrul */ + var38.i = ((orc_uint32) var36.i) >> 24; + /* 4: orl */ + var35.i = var38.i | var37.i; + /* 5: storel */ + ptr0[i] = var35; } } @@ -5053,10 +5125,9 @@ #if 1 static const orc_uint8 bc[] = { 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, - 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, - 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4, - 199, 35, 34, 39, 199, 33, 32, 38, 196, 37, 32, 35, 196, 36, 34, 33, - 195, 0, 37, 36, 2, 0, + 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 4, 8, 0, + 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 184, 33, 4, 124, + 32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); orc_program_set_backup_function (p, _backup_video_orc_pack_ABGR); @@ -5066,26 +5137,18 @@ orc_program_set_backup_function (p, _backup_video_orc_pack_ABGR); orc_program_add_destination (p, 4, "d1"); orc_program_add_source (p, 4, "s1"); - orc_program_add_temporary (p, 1, "t1"); - orc_program_add_temporary (p, 1, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); - orc_program_add_temporary (p, 2, "t5"); - orc_program_add_temporary (p, 2, "t6"); - orc_program_add_temporary (p, 2, "t7"); - orc_program_add_temporary (p, 2, "t8"); + orc_program_add_constant (p, 4, 0x00000008, "c1"); + orc_program_add_constant (p, 4, 0x00000018, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); - orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1, + orc_program_append_2 (p, "swapl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8, + orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_D1); - orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7, + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T4, - ORC_VAR_D1); - orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T2, - ORC_VAR_D1); - orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_T5, + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1); #endif @@ -6712,88 +6775,106 @@ #endif -/* video_orc_resample_bilinear_u32 */ +/* video_orc_pack_AY */ #ifdef DISABLE_ORC void -video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, int n) { int i; - orc_union32 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; + orc_union32 var33; + orc_int8 var34; + orc_int8 var35; + orc_union16 var36; - ptr0 = (orc_union32 *) d1; + ptr0 = (orc_int8 *) d1; + ptr1 = (orc_int8 *) d2; ptr4 = (orc_union32 *) s1; for (i = 0; i < n; i++) { - /* 0: ldreslinl */ + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: select0lw */ { - int tmp = p1 + i * p2; - orc_union32 a = ptr4[tmp >> 16]; - orc_union32 b = ptr4[(tmp >> 16) + 1]; - var32.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + orc_union32 _src; + _src.i = var33.i; + var36.i = _src.x2[0]; } - /* 1: storel */ - ptr0[i] = var32; + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var36.i; + var34 = _src.x2[1]; + } + /* 3: storeb */ + ptr0[i] = var34; + /* 4: select0wb */ + { + orc_union16 _src; + _src.i = var36.i; + var35 = _src.x2[0]; + } + /* 5: storeb */ + ptr1[i] = var35; } } #else static void -_backup_video_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex) +_backup_video_orc_pack_AY (OrcExecutor * ORC_RESTRICT ex) { int i; int n = ex->n; - orc_union32 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; const orc_union32 *ORC_RESTRICT ptr4; - orc_union32 var32; + orc_union32 var33; + orc_int8 var34; + orc_int8 var35; + orc_union16 var36; - ptr0 = (orc_union32 *) ex->arrays[0]; + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr1 = (orc_int8 *) ex->arrays[1]; ptr4 = (orc_union32 *) ex->arrays[4]; for (i = 0; i < n; i++) { - /* 0: ldreslinl */ + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: select0lw */ { - int tmp = ex->params[24] + i * ex->params[25]; - orc_union32 a = ptr4[tmp >> 16]; - orc_union32 b = ptr4[(tmp >> 16) + 1]; - var32.x4[0] = - ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[1] = - ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[2] = - ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; - var32.x4[3] = - ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + - (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + orc_union32 _src; + _src.i = var33.i; + var36.i = _src.x2[0]; } - /* 1: storel */ - ptr0[i] = var32; + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var36.i; + var34 = _src.x2[1]; + } + /* 3: storeb */ + ptr0[i] = var34; + /* 4: select0wb */ + { + orc_union16 _src; + _src.i = var36.i; + var35 = _src.x2[0]; + } + /* 5: storeb */ + ptr1[i] = var35; } } void -video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, - const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, int n) { OrcExecutor _ex, *ex = &_ex; static volatile int p_inited = 0; @@ -6807,27 +6888,27 @@ #if 1 static const orc_uint8 bc[] = { - 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, - 97, 109, 112, 108, 101, 95, 98, 105, 108, 105, 110, 101, 97, 114, 95, - 117, - 51, 50, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 51, 0, 4, 24, - 25, 2, 0, + 1, 9, 17, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 65, 89, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 190, + 32, 4, 189, 0, 32, 188, 1, 32, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, - _backup_video_orc_resample_bilinear_u32); + orc_program_set_backup_function (p, _backup_video_orc_pack_AY); #else p = orc_program_new (); - orc_program_set_name (p, "video_orc_resample_bilinear_u32"); - orc_program_set_backup_function (p, - _backup_video_orc_resample_bilinear_u32); - orc_program_add_destination (p, 4, "d1"); + orc_program_set_name (p, "video_orc_pack_AY"); + orc_program_set_backup_function (p, _backup_video_orc_pack_AY); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_destination (p, 1, "d2"); orc_program_add_source (p, 4, "s1"); - orc_program_add_parameter (p, 4, "p1"); - orc_program_add_parameter (p, 4, "p2"); + orc_program_add_temporary (p, 2, "t1"); - orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1, - ORC_VAR_P1, ORC_VAR_P2); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D2, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); #endif orc_program_compile (p); @@ -6842,9 +6923,8 @@ ex->n = n; ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->params[ORC_VAR_P1] = p1; - ex->params[ORC_VAR_P2] = p2; func = c->exec; func (ex); @@ -6852,136 +6932,226 @@ #endif -/* video_orc_merge_linear_u8 */ +/* video_orc_unpack_RGB15_le */ #ifdef DISABLE_ORC void -video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, - const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, - int p1, int n) +video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) { int i; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var36; - orc_int8 var37; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else orc_union16 var38; +#endif #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) volatile orc_union16 var39; #else orc_union16 var39; #endif - orc_int8 var40; - orc_int8 var41; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else orc_union16 var43; - orc_union16 var44; +#endif + orc_union32 var44; orc_union16 var45; orc_union16 var46; - orc_int8 var47; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; - ptr0 = (orc_int8 *) d1; - ptr4 = (orc_int8 *) s1; - ptr5 = (orc_int8 *) s2; + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; - /* 6: loadpw */ - var38.i = p1; + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ /* 8: loadpw */ - var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ for (i = 0; i < n; i++) { - /* 0: loadb */ - var41 = ptr4[i]; - /* 1: loadb */ - var36 = ptr4[i]; - /* 2: convubw */ - var42.i = (orc_uint8) var36; - /* 3: loadb */ - var37 = ptr5[i]; - /* 4: convubw */ - var43.i = (orc_uint8) var37; - /* 5: subw */ - var44.i = var43.i - var42.i; - /* 7: mullw */ - var45.i = (var44.i * var38.i) & 0xffff; - /* 9: addw */ - var46.i = var45.i + var39.i; - /* 10: convhwb */ - var47 = ((orc_uint16) var46.i) >> 8; - /* 11: addb */ - var40 = var47 + var41; - /* 12: storeb */ - ptr0[i] = var40; + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; } } #else static void -_backup_video_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex) +_backup_video_orc_unpack_RGB15_le (OrcExecutor * ORC_RESTRICT ex) { int i; int n = ex->n; - orc_int8 *ORC_RESTRICT ptr0; - const orc_int8 *ORC_RESTRICT ptr4; - const orc_int8 *ORC_RESTRICT ptr5; - orc_int8 var36; - orc_int8 var37; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else orc_union16 var38; +#endif #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) volatile orc_union16 var39; #else orc_union16 var39; #endif - orc_int8 var40; - orc_int8 var41; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else orc_union16 var43; - orc_union16 var44; +#endif + orc_union32 var44; orc_union16 var45; orc_union16 var46; - orc_int8 var47; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; - ptr0 = (orc_int8 *) ex->arrays[0]; - ptr4 = (orc_int8 *) ex->arrays[4]; - ptr5 = (orc_int8 *) ex->arrays[5]; + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; - /* 6: loadpw */ - var38.i = ex->params[24]; + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ /* 8: loadpw */ - var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ for (i = 0; i < n; i++) { - /* 0: loadb */ - var41 = ptr4[i]; - /* 1: loadb */ - var36 = ptr4[i]; - /* 2: convubw */ - var42.i = (orc_uint8) var36; - /* 3: loadb */ - var37 = ptr5[i]; - /* 4: convubw */ - var43.i = (orc_uint8) var37; - /* 5: subw */ - var44.i = var43.i - var42.i; - /* 7: mullw */ - var45.i = (var44.i * var38.i) & 0xffff; - /* 9: addw */ - var46.i = var45.i + var39.i; - /* 10: convhwb */ - var47 = ((orc_uint16) var46.i) >> 8; - /* 11: addb */ - var40 = var47 + var41; - /* 12: storeb */ - ptr0[i] = var40; + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; } } void -video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, - const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, - int p1, int n) +video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) { OrcExecutor _ex, *ex = &_ex; static volatile int p_inited = 0; @@ -6995,44 +7165,62 @@ #if 1 static const orc_uint8 bc[] = { - 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101, 114, - 103, 101, 95, 108, 105, 110, 101, 97, 114, 95, 117, 56, 11, 1, 1, 12, - 1, 1, 12, 1, 1, 14, 4, 128, 0, 0, 0, 16, 1, 20, 2, 20, - 2, 20, 1, 20, 1, 43, 34, 4, 150, 32, 4, 150, 33, 5, 98, 33, - 33, 32, 89, 33, 33, 24, 70, 33, 33, 16, 158, 35, 33, 33, 0, 35, - 34, 2, 0, + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 11, 4, 4, 12, + 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, + 31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, + 14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, + 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, + 4, 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 93, 35, 35, + 19, 90, 33, 33, 20, 90, 34, 34, 21, 90, 35, 35, 21, 195, 36, 22, + 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, }; p = orc_program_new_from_static_bytecode (bc); - orc_program_set_backup_function (p, _backup_video_orc_merge_linear_u8); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_le); #else p = orc_program_new (); - orc_program_set_name (p, "video_orc_merge_linear_u8"); - orc_program_set_backup_function (p, _backup_video_orc_merge_linear_u8); - orc_program_add_destination (p, 1, "d1"); - orc_program_add_source (p, 1, "s1"); - orc_program_add_source (p, 1, "s2"); - orc_program_add_constant (p, 4, 0x00000080, "c1"); - orc_program_add_parameter (p, 1, "p1"); + orc_program_set_name (p, "video_orc_unpack_RGB15_le"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_le); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); orc_program_add_temporary (p, 2, "t1"); orc_program_add_temporary (p, 2, "t2"); - orc_program_add_temporary (p, 1, "t3"); - orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); - orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1, + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_D1); - orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, ORC_VAR_D1); - orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1, + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, ORC_VAR_D1); - orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1, + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, ORC_VAR_D1); - orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, ORC_VAR_D1); - orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, ORC_VAR_D1); - orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3, + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_D1); #endif @@ -7049,8 +7237,24005 @@ ex->n = n; ex->arrays[ORC_VAR_D1] = d1; ex->arrays[ORC_VAR_S1] = (void *) s1; - ex->arrays[ORC_VAR_S2] = (void *) s2; - ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_RGB15_be */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var53.i) << 8; + /* 17: orl */ + var44.i = var55.i | var54.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB15_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var53.i) << 8; + /* 17: orl */ + var44.i = var55.i | var54.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +void +video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 11, 4, 4, 12, + 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, + 31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, + 14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, + 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, + 4, 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 93, 35, 35, + 19, 90, 33, 33, 20, 90, 34, 34, 21, 90, 35, 35, 21, 195, 36, 22, + 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB15_be"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_be); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_RGB15_le_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB15_le_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 95, 116, 114, 117, + 110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, + 224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, + 14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, + 20, 4, 20, 4, 82, 32, 4, 73, 33, 32, 16, 73, 34, 32, 17, 73, + 35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, 35, 21, 195, + 36, 22, 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_RGB15_le_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB15_le_trunc"); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_RGB15_le_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_RGB15_be_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var50.i) << 8; + /* 14: orl */ + var42.i = var52.i | var51.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB15_be_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var50.i) << 8; + /* 14: orl */ + var42.i = var52.i | var51.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 95, 116, 114, 117, + 110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, + 224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, + 14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, + 20, 4, 20, 4, 82, 32, 4, 73, 33, 32, 16, 73, 34, 32, 17, 73, + 35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, 35, 21, 195, + 36, 22, 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_RGB15_be_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB15_be_trunc"); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_RGB15_be_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_RGB15_le */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 1; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 27; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB15_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 1; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 27; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0, + 0, 248, 14, 4, 1, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4, + 27, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, + 19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 190, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB15_le"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_le); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00f80000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x00000001, "c4"); + orc_program_add_constant (p, 4, 0x0000000e, "c5"); + orc_program_add_constant (p, 4, 0x0000001b, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_RGB15_be */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 9; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 6; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 3; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB15_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 9; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 6; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 3; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 0, 248, 0, 14, 4, 0, 248, 0, 0, 14, 4, 248, 0, + 0, 0, 14, 4, 9, 0, 0, 0, 14, 4, 6, 0, 0, 0, 14, 4, + 3, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, + 19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 191, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB15_be"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_be); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00f80000, "c1"); + orc_program_add_constant (p, 4, 0x0000f800, "c2"); + orc_program_add_constant (p, 4, 0x000000f8, "c3"); + orc_program_add_constant (p, 4, 0x00000009, "c4"); + orc_program_add_constant (p, 4, 0x00000006, "c5"); + orc_program_add_constant (p, 4, 0x00000003, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR15_le */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +void +video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 11, 4, 4, 12, + 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, + 31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, + 14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, + 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, + 4, 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 93, 33, 33, + 19, 90, 35, 35, 20, 90, 34, 34, 21, 90, 33, 33, 21, 195, 36, 22, + 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15_le"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_le); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR15_be */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var53.i) << 8; + /* 17: orl */ + var44.i = var55.i | var54.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var53.i) << 8; + /* 17: orl */ + var44.i = var55.i | var54.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +void +video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 11, 4, 4, 12, + 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, + 31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, + 14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, + 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, + 4, 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 93, 33, 33, + 19, 90, 35, 35, 20, 90, 34, 34, 21, 90, 33, 33, 21, 195, 36, 22, + 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15_be"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_be); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR15_le_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15_le_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 95, 116, 114, 117, + 110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, + 224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, + 14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, + 20, 4, 20, 4, 82, 32, 4, 73, 35, 32, 16, 73, 34, 32, 17, 73, + 33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, 33, 21, 195, + 36, 22, 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_BGR15_le_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15_le_trunc"); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_BGR15_le_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR15_be_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var50.i) << 8; + /* 14: orl */ + var42.i = var52.i | var51.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15_be_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var50.i) << 8; + /* 14: orl */ + var42.i = var52.i | var51.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 95, 116, 114, 117, + 110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, + 224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, + 14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, + 20, 4, 20, 4, 82, 32, 4, 73, 35, 32, 16, 73, 34, 32, 17, 73, + 33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, 33, 21, 195, + 36, 22, 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_BGR15_be_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15_be_trunc"); + orc_program_set_backup_function (p, + _backup_video_orc_unpack_BGR15_be_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_BGR15_le */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var44.i) >> 17; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 11; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR15_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var44.i) >> 17; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 11; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0, + 0, 248, 14, 4, 17, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4, + 11, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 35, 35, + 19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 190, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR15_le"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_le); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00f80000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x00000011, "c4"); + orc_program_add_constant (p, 4, 0x0000000e, "c5"); + orc_program_add_constant (p, 4, 0x0000000b, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_BGR15_be */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shll */ + var45.i = ((orc_uint32) var44.i) << 7; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 6; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 19; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR15_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shll */ + var45.i = ((orc_uint32) var44.i) << 7; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 6; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 19; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 0, 248, 0, 14, 4, 0, 248, 0, 0, 14, 4, 248, 0, + 0, 0, 14, 4, 7, 0, 0, 0, 14, 4, 6, 0, 0, 0, 14, 4, + 19, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 124, 35, 35, + 19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 191, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR15_be"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_be); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00f80000, "c1"); + orc_program_add_constant (p, 4, 0x0000f800, "c2"); + orc_program_add_constant (p, 4, 0x000000f8, "c3"); + orc_program_add_constant (p, 4, 0x00000007, "c4"); + orc_program_add_constant (p, 4, 0x00000006, "c5"); + orc_program_add_constant (p, 4, 0x00000013, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_RGB16 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var52.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var54.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var52.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var54.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +void +video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 54, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, + 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 95, 33, 33, 19, + 93, 35, 35, 20, 90, 33, 33, 21, 90, 34, 34, 22, 90, 35, 35, 21, + 195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0, + 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB16"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000006, "c4"); + orc_program_add_constant (p, 2, 0x00000005, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x00002080, "c7"); + orc_program_add_constant (p, 2, 0x000000ff, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_RGB16_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var48.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var50.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB16_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var48.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var50.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +void +video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 54, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3, + 0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, + 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 33, 32, 16, 73, 34, + 32, 17, 73, 35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, + 35, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, + 160, 0, 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB16_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000008, "c4"); + orc_program_add_constant (p, 2, 0x00000003, "c5"); + orc_program_add_constant (p, 2, 0x000000ff, "c6"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_RGB16_le */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var43.i) >> 13; + /* 8: shrul */ + var46.i = ((orc_uint32) var44.i) >> 27; + /* 9: orl */ + var47.i = var42.i | var45.i; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: select0lw */ + { + orc_union32 _src; + _src.i = var48.i; + var40.i = _src.x2[0]; + } + /* 12: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB16_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var43.i) >> 13; + /* 8: shrul */ + var46.i = ((orc_uint32) var44.i) >> 27; + /* 9: orl */ + var47.i = var42.i | var45.i; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: select0lw */ + { + orc_union32 _src; + _src.i = var48.i; + var40.i = _src.x2[0]; + } + /* 12: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 54, 95, 108, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0, + 0, 248, 14, 4, 13, 0, 0, 0, 14, 4, 27, 0, 0, 0, 20, 4, + 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, 32, 16, 106, + 34, 32, 17, 106, 35, 32, 18, 126, 34, 34, 19, 126, 35, 35, 20, 123, + 36, 33, 34, 123, 36, 36, 35, 190, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB16_le"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_le); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00fc0000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x0000000d, "c4"); + orc_program_add_constant (p, 4, 0x0000001b, "c5"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_RGB16_be */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000fc00; /* 64512 or 3.18732e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 8; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 5; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 3; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB16_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000fc00; /* 64512 or 3.18732e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 8; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 5; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 3; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 54, 95, 98, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 0, 248, 0, 14, 4, 0, 252, 0, 0, 14, 4, 248, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 14, 4, 5, 0, 0, 0, 14, 4, + 3, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, + 19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 191, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB16_be"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_be); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00f80000, "c1"); + orc_program_add_constant (p, 4, 0x0000fc00, "c2"); + orc_program_add_constant (p, 4, 0x000000f8, "c3"); + orc_program_add_constant (p, 4, 0x00000008, "c4"); + orc_program_add_constant (p, 4, 0x00000005, "c5"); + orc_program_add_constant (p, 4, 0x00000003, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR16 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var54.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var52.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var54.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var52.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +void +video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 54, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, + 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 95, 35, 35, 19, + 93, 33, 33, 20, 90, 35, 35, 21, 90, 34, 34, 22, 90, 33, 33, 21, + 195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0, + 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR16"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000006, "c4"); + orc_program_add_constant (p, 2, 0x00000005, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x00002080, "c7"); + orc_program_add_constant (p, 2, 0x000000ff, "c8"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_unpack_BGR16_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var50.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var48.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR16_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var50.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var48.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +void +video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 54, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3, + 0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, + 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 35, 32, 16, 73, 34, + 32, 17, 73, 33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, + 33, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, + 160, 0, 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR16_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000008, "c4"); + orc_program_add_constant (p, 2, 0x00000003, "c5"); + orc_program_add_constant (p, 2, 0x000000ff, "c6"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_BGR16_le */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 11; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 13; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 16; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR16_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 11; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 13; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 16; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 54, 95, 108, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0, + 0, 248, 14, 4, 11, 0, 0, 0, 14, 4, 13, 0, 0, 0, 14, 4, + 16, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, + 19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 190, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR16_le"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_le); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00fc0000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x0000000b, "c4"); + orc_program_add_constant (p, 4, 0x0000000d, "c5"); + orc_program_add_constant (p, 4, 0x00000010, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_pack_BGR16_be */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000fc00; /* 64512 or 3.18732e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shll */ + var45.i = ((orc_uint32) var44.i) << 8; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 5; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 19; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR16_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 3: loadpl */ + var38.i = (int) 0x0000fc00; /* 64512 or 3.18732e-319f */ + /* 5: loadpl */ + var39.i = (int) 0x000000f8; /* 248 or 1.22528e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shll */ + var45.i = ((orc_uint32) var44.i) << 8; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 5; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 19; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select1lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[1]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 54, 95, 98, 101, 11, 2, 2, 12, 4, 4, + 14, 4, 0, 0, 248, 0, 14, 4, 0, 252, 0, 0, 14, 4, 248, 0, + 0, 0, 14, 4, 8, 0, 0, 0, 14, 4, 5, 0, 0, 0, 14, 4, + 19, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, + 4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 124, 35, 35, + 19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36, + 35, 191, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR16_be"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_be); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00f80000, "c1"); + orc_program_add_constant (p, 4, 0x0000fc00, "c2"); + orc_program_add_constant (p, 4, 0x000000f8, "c3"); + orc_program_add_constant (p, 4, 0x00000008, "c4"); + orc_program_add_constant (p, 4, 0x00000005, "c5"); + orc_program_add_constant (p, 4, 0x00000013, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_bilinear_u32 */ +#ifdef DISABLE_ORC +void +video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinl */ + { + int tmp = p1 + i * p2; + orc_union32 a = ptr4[tmp >> 16]; + orc_union32 b = ptr4[(tmp >> 16) + 1]; + var32.x4[0] = + ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[1] = + ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[2] = + ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[3] = + ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storel */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinl */ + { + int tmp = ex->params[24] + i * ex->params[25]; + orc_union32 a = ptr4[tmp >> 16]; + orc_union32 b = ptr4[(tmp >> 16) + 1]; + var32.x4[0] = + ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[1] = + ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[2] = + ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[3] = + ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storel */ + ptr0[i] = var32; + } + +} + +void +video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 98, 105, 108, 105, 110, 101, 97, 114, 95, + 117, + 51, 50, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 51, 0, 4, 24, + 25, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_bilinear_u32); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_bilinear_u32"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_bilinear_u32); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_parameter (p, 4, "p2"); + + orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_P1, ORC_VAR_P2); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_merge_linear_u8 */ +#ifdef DISABLE_ORC +void +video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, + const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, + int p1, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif + orc_int8 var40; + orc_int8 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_int8 var47; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + + /* 6: loadpw */ + var38.i = p1; + /* 8: loadpw */ + var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var41 = ptr4[i]; + /* 1: loadb */ + var36 = ptr4[i]; + /* 2: convubw */ + var42.i = (orc_uint8) var36; + /* 3: loadb */ + var37 = ptr5[i]; + /* 4: convubw */ + var43.i = (orc_uint8) var37; + /* 5: subw */ + var44.i = var43.i - var42.i; + /* 7: mullw */ + var45.i = (var44.i * var38.i) & 0xffff; + /* 9: addw */ + var46.i = var45.i + var39.i; + /* 10: convhwb */ + var47 = ((orc_uint16) var46.i) >> 8; + /* 11: addb */ + var40 = var47 + var41; + /* 12: storeb */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif + orc_int8 var40; + orc_int8 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_int8 var47; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + + /* 6: loadpw */ + var38.i = ex->params[24]; + /* 8: loadpw */ + var39.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var41 = ptr4[i]; + /* 1: loadb */ + var36 = ptr4[i]; + /* 2: convubw */ + var42.i = (orc_uint8) var36; + /* 3: loadb */ + var37 = ptr5[i]; + /* 4: convubw */ + var43.i = (orc_uint8) var37; + /* 5: subw */ + var44.i = var43.i - var42.i; + /* 7: mullw */ + var45.i = (var44.i * var38.i) & 0xffff; + /* 9: addw */ + var46.i = var45.i + var39.i; + /* 10: convhwb */ + var47 = ((orc_uint16) var46.i) >> 8; + /* 11: addb */ + var40 = var47 + var41; + /* 12: storeb */ + ptr0[i] = var40; + } + +} + +void +video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, + const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, + int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101, 114, + 103, 101, 95, 108, 105, 110, 101, 97, 114, 95, 117, 56, 11, 1, 1, 12, + 1, 1, 12, 1, 1, 14, 2, 128, 0, 0, 0, 16, 1, 20, 2, 20, + 2, 20, 1, 20, 1, 43, 34, 4, 150, 32, 4, 150, 33, 5, 98, 33, + 33, 32, 89, 33, 33, 24, 70, 33, 33, 16, 158, 35, 33, 33, 0, 35, + 34, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_merge_linear_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_merge_linear_u8"); + orc_program_set_backup_function (p, _backup_video_orc_merge_linear_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_constant (p, 2, 0x00000080, "c1"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + + orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_memset_2d */ +#ifdef DISABLE_ORC +void +video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n, + int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 var32; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + + /* 0: loadpb */ + var32 = p1; + + for (i = 0; i < n; i++) { + /* 1: storeb */ + ptr0[i] = var32; + } + } + +} + +#else +static void +_backup_video_orc_memset_2d (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 var32; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + + /* 0: loadpb */ + var32 = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 1: storeb */ + ptr0[i] = var32; + } + } + +} + +void +video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n, + int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101, + 109, 115, 101, 116, 95, 50, 100, 11, 1, 1, 16, 1, 64, 0, 24, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_memset_2d); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_memset_2d"); + orc_program_set_backup_function (p, _backup_video_orc_memset_2d); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_parameter (p, 1, "p1"); + + orc_program_append_2 (p, "storeb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_memcpy_2d */ +#ifdef DISABLE_ORC +void +video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: copyb */ + var33 = var32; + /* 2: storeb */ + ptr0[i] = var33; + } + } + +} + +#else +static void +_backup_video_orc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: copyb */ + var33 = var32; + /* 2: storeb */ + ptr0[i] = var33; + } + } + +} + +void +video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101, + 109, 99, 112, 121, 95, 50, 100, 11, 1, 1, 12, 1, 1, 42, 0, 4, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_memcpy_2d); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_memcpy_2d"); + orc_program_set_backup_function (p, _backup_video_orc_memcpy_2d); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + + orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_u16_to_u8 */ +#ifdef DISABLE_ORC +void +video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var32; + orc_int8 var33; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_union16 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var32 = ptr4[i]; + /* 1: convhwb */ + var33 = ((orc_uint16) var32.i) >> 8; + /* 2: storeb */ + ptr0[i] = var33; + } + +} + +#else +static void +_backup_video_orc_convert_u16_to_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var32; + orc_int8 var33; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var32 = ptr4[i]; + /* 1: convhwb */ + var33 = ((orc_uint16) var32.i) >> 8; + /* 2: storeb */ + ptr0[i] = var33; + } + +} + +void +video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 117, 49, 54, 95, 116, 111, 95, 117, 56, 11, 1, + 1, 12, 2, 2, 158, 0, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_u16_to_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_u16_to_u8"); + orc_program_set_backup_function (p, _backup_video_orc_convert_u16_to_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 2, "s1"); + + orc_program_append_2 (p, "convhwb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_u8_to_u16 */ +#ifdef DISABLE_ORC +void +video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_union16 var34; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: loadb */ + var33 = ptr4[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var32; + _dest.x2[1] = var33; + var34.i = _dest.i; + } + /* 3: storew */ + ptr0[i] = var34; + } + +} + +#else +static void +_backup_video_orc_convert_u8_to_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_union16 var34; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: loadb */ + var33 = ptr4[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var32; + _dest.x2[1] = var33; + var34.i = _dest.i; + } + /* 3: storew */ + ptr0[i] = var34; + } + +} + +void +video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 117, 56, 95, 116, 111, 95, 117, 49, 54, 11, 2, + 2, 12, 1, 1, 196, 0, 4, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_u8_to_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_u8_to_u16"); + orc_program_set_backup_function (p, _backup_video_orc_convert_u8_to_u16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_splat_u16 */ +#ifdef DISABLE_ORC +void +video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 var32; + + ptr0 = (orc_union16 *) d1; + + /* 0: loadpw */ + var32.i = p1; + + for (i = 0; i < n; i++) { + /* 1: storew */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 var32; + + ptr0 = (orc_union16 *) ex->arrays[0]; + + /* 0: loadpw */ + var32.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 1: storew */ + ptr0[i] = var32; + } + +} + +void +video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108, + 97, 116, 95, 117, 49, 54, 11, 2, 2, 16, 2, 97, 0, 24, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_splat_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_splat_u16"); + orc_program_set_backup_function (p, _backup_video_orc_splat_u16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_parameter (p, 2, "p1"); + + orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_splat_u32 */ +#ifdef DISABLE_ORC +void +video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 var32; + + ptr0 = (orc_union32 *) d1; + + /* 0: loadpl */ + var32.i = p1; + + for (i = 0; i < n; i++) { + /* 1: storel */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 var32; + + ptr0 = (orc_union32 *) ex->arrays[0]; + + /* 0: loadpl */ + var32.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 1: storel */ + ptr0[i] = var32; + } + +} + +void +video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108, + 97, 116, 95, 117, 51, 50, 11, 4, 4, 16, 4, 128, 0, 24, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_splat_u32); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_splat_u32"); + orc_program_set_backup_function (p, _backup_video_orc_splat_u32); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_parameter (p, 4, "p1"); + + orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_splat_u64 */ +#ifdef DISABLE_ORC +void +video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var32; + + ptr0 = (orc_union64 *) d1; + + /* 0: loadpq */ + var32.i = p1; + + for (i = 0; i < n; i++) { + /* 1: storeq */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var32; + + ptr0 = (orc_union64 *) ex->arrays[0]; + + /* 0: loadpq */ + var32.i = + (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); + + for (i = 0; i < n; i++) { + /* 1: storeq */ + ptr0[i] = var32; + } + +} + +void +video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108, + 97, 116, 95, 117, 54, 52, 11, 8, 8, 18, 8, 135, 0, 24, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_splat_u64); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_splat_u64"); + orc_program_set_backup_function (p, _backup_video_orc_splat_u64); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_parameter_int64 (p, 8, "p1"); + + orc_program_append_2 (p, "storeq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_splat2_u64 */ +#ifdef DISABLE_ORC +void +video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var33; + orc_union32 var34; + + ptr0 = (orc_union64 *) d1; + + /* 0: loadpl */ + var34.i = p1; + + for (i = 0; i < n; i++) { + /* 1: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[0]; + _dest.x2[1] = var34.x4[0]; + var33.x4[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[1]; + _dest.x2[1] = var34.x4[1]; + var33.x4[1] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[2]; + _dest.x2[1] = var34.x4[2]; + var33.x4[2] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[3]; + _dest.x2[1] = var34.x4[3]; + var33.x4[3] = _dest.i; + } + /* 2: storeq */ + ptr0[i] = var33; + } + +} + +#else +static void +_backup_video_orc_splat2_u64 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var33; + orc_union32 var34; + + ptr0 = (orc_union64 *) ex->arrays[0]; + + /* 0: loadpl */ + var34.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 1: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[0]; + _dest.x2[1] = var34.x4[0]; + var33.x4[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[1]; + _dest.x2[1] = var34.x4[1]; + var33.x4[1] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[2]; + _dest.x2[1] = var34.x4[2]; + var33.x4[2] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var34.x4[3]; + _dest.x2[1] = var34.x4[3]; + var33.x4[3] = _dest.i; + } + /* 2: storeq */ + ptr0[i] = var33; + } + +} + +void +video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108, + 97, 116, 50, 95, 117, 54, 52, 11, 8, 8, 16, 4, 20, 4, 115, 32, + 24, 21, 2, 196, 0, 32, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_splat2_u64); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_splat2_u64"); + orc_program_set_backup_function (p, _backup_video_orc_splat2_u64); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_temporary (p, 4, "t1"); + + orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_I420_UYVY */ +#ifdef DISABLE_ORC +void +video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr6[i]; + /* 1: loadb */ + var34 = ptr7[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var39.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[0]; + _dest.x2[1] = var35.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[1]; + _dest.x2[1] = var35.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + /* 6: loadw */ + var37 = ptr5[i]; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[0]; + _dest.x2[1] = var37.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[1]; + _dest.x2[1] = var37.x2[1]; + var38.x2[1] = _dest.i; + } + /* 8: storel */ + ptr1[i] = var38; + } + +} + +#else +static void +_backup_video_orc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr6[i]; + /* 1: loadb */ + var34 = ptr7[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var39.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[0]; + _dest.x2[1] = var35.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[1]; + _dest.x2[1] = var35.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + /* 6: loadw */ + var37 = ptr5[i]; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[0]; + _dest.x2[1] = var37.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var39.x2[1]; + _dest.x2[1] = var37.x2[1]; + var38.x2[1] = _dest.i; + } + /* 8: storel */ + ptr1[i] = var38; + } + +} + +void +video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 85, 89, 86, 89, 11, 4, + 4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, + 20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 32, 4, 21, 1, 196, 1, + 32, 5, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_UYVY); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_I420_UYVY"); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_UYVY); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_I420_YUY2 */ +#ifdef DISABLE_ORC +void +video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr6[i]; + /* 1: loadb */ + var34 = ptr7[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var39.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[0]; + _dest.x2[1] = var39.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[1]; + _dest.x2[1] = var39.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + /* 6: loadw */ + var37 = ptr5[i]; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var39.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var39.x2[1]; + var38.x2[1] = _dest.i; + } + /* 8: storel */ + ptr1[i] = var38; + } + +} + +#else +static void +_backup_video_orc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr6[i]; + /* 1: loadb */ + var34 = ptr7[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var39.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[0]; + _dest.x2[1] = var39.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[1]; + _dest.x2[1] = var39.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + /* 6: loadw */ + var37 = ptr5[i]; + /* 7: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var39.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var39.x2[1]; + var38.x2[1] = _dest.i; + } + /* 8: storel */ + ptr1[i] = var38; + } + +} + +void +video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 89, 85, 89, 50, 11, 4, + 4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, + 20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 4, 32, 21, 1, 196, 1, + 5, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_YUY2); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_I420_YUY2"); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_YUY2); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_I420_AYUV */ +#ifdef DISABLE_ORC +void +video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var36; + orc_int8 var37; + orc_union32 var38; + orc_int8 var39; + orc_union32 var40; + orc_int8 var41; + orc_int8 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + /* 3: loadpb */ + var36 = p1; + + for (i = 0; i < n; i++) { + /* 0: loadupdb */ + var41 = ptr6[i >> 1]; + /* 1: loadupdb */ + var42 = ptr7[i >> 1]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var41; + _dest.x2[1] = var42; + var43.i = _dest.i; + } + /* 4: loadb */ + var37 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var44.i = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var43.i; + var38.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var38; + /* 8: loadb */ + var39 = ptr5[i]; + /* 9: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var39; + var45.i = _dest.i; + } + /* 10: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var45.i; + _dest.x2[1] = var43.i; + var40.i = _dest.i; + } + /* 11: storel */ + ptr1[i] = var40; + } + +} + +#else +static void +_backup_video_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var36; + orc_int8 var37; + orc_union32 var38; + orc_int8 var39; + orc_union32 var40; + orc_int8 var41; + orc_int8 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + /* 3: loadpb */ + var36 = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadupdb */ + var41 = ptr6[i >> 1]; + /* 1: loadupdb */ + var42 = ptr7[i >> 1]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var41; + _dest.x2[1] = var42; + var43.i = _dest.i; + } + /* 4: loadb */ + var37 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var44.i = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var43.i; + var38.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var38; + /* 8: loadb */ + var39 = ptr5[i]; + /* 9: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var39; + var45.i = _dest.i; + } + /* 10: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var45.i; + _dest.x2[1] = var43.i; + var40.i = _dest.i; + } + /* 11: storel */ + ptr1[i] = var40; + } + +} + +void +video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 65, 89, 85, 86, 11, 4, + 4, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, + 16, 1, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7, + 196, 32, 34, 35, 196, 33, 24, 4, 195, 0, 33, 32, 196, 33, 24, 5, + 195, 1, 33, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_AYUV); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_I420_AYUV"); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_AYUV); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + + orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_YUY2_I420 */ +#ifdef DISABLE_ORC +void +video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + ptr0 = (orc_union16 *) d1; + ptr1 = (orc_union16 *) d2; + ptr2 = (orc_int8 *) d3; + ptr3 = (orc_int8 *) d4; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var40; + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var41.x2[0] = _src.x2[1]; + var42.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var41.x2[1] = _src.x2[1]; + var42.x2[1] = _src.x2[0]; + } + /* 5: storew */ + ptr1[i] = var42; + /* 6: avgub */ + var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1; + var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1; + /* 7: splitwb */ + { + orc_union16 _src; + _src.i = var43.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 8: storeb */ + ptr3[i] = var37; + /* 9: storeb */ + ptr2[i] = var38; + } + +} + +#else +static void +_backup_video_orc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr1 = (orc_union16 *) ex->arrays[1]; + ptr2 = (orc_int8 *) ex->arrays[2]; + ptr3 = (orc_int8 *) ex->arrays[3]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var40; + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var41.x2[0] = _src.x2[1]; + var42.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var41.x2[1] = _src.x2[1]; + var42.x2[1] = _src.x2[0]; + } + /* 5: storew */ + ptr1[i] = var42; + /* 6: avgub */ + var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1; + var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1; + /* 7: splitwb */ + { + orc_union16 _src; + _src.i = var43.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 8: storeb */ + ptr3[i] = var37; + /* 9: storeb */ + ptr2[i] = var38; + } + +} + +void +video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 73, 52, 50, 48, 11, 2, + 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, + 20, 2, 20, 2, 20, 2, 21, 1, 199, 32, 34, 4, 97, 0, 34, 21, + 1, 199, 33, 34, 5, 97, 1, 34, 21, 1, 39, 32, 32, 33, 199, 3, + 2, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_I420); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_YUY2_I420"); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_I420); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_destination (p, 1, "d4"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_D3] = d3; + ex->arrays[ORC_VAR_D4] = d4; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_UYVY_YUY2 */ +#ifdef DISABLE_ORC +void +video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + orc_union32 var33; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var32 = ptr4[i]; + /* 1: swapw */ + var33.x2[0] = ORC_SWAP_W (var32.x2[0]); + var33.x2[1] = ORC_SWAP_W (var32.x2[1]); + /* 2: storel */ + ptr0[i] = var33; + } + } + +} + +#else +static void +_backup_video_orc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + orc_union32 var33; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var32 = ptr4[i]; + /* 1: swapw */ + var33.x2[0] = ORC_SWAP_W (var32.x2[0]); + var33.x2[1] = ORC_SWAP_W (var32.x2[1]); + /* 2: storel */ + ptr0[i] = var33; + } + } + +} + +void +video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 85, 89, 50, 11, + 4, 4, 12, 4, 4, 21, 1, 183, 0, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_YUY2); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_UYVY_YUY2"); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_YUY2); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + + orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_420_422 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + orc_int8 var35; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: copyb */ + var33 = var32; + /* 2: storeb */ + ptr0[i] = var33; + /* 3: loadb */ + var34 = ptr4[i]; + /* 4: copyb */ + var35 = var34; + /* 5: storeb */ + ptr1[i] = var35; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + orc_int8 var35; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: copyb */ + var33 = var32; + /* 2: storeb */ + ptr0[i] = var33; + /* 3: loadb */ + var34 = ptr4[i]; + /* 4: copyb */ + var35 = var34; + /* 5: storeb */ + ptr1[i] = var35; + } + } + +} + +void +video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, + 52, 50, 50, 11, 1, 1, 11, 1, 1, 12, 1, 1, 42, 0, 4, 42, + 1, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_420_422); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_420_422"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_420_422); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_destination (p, 1, "d2"); + orc_program_add_source (p, 1, "s1"); + + orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_420_444 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: splatbw */ + var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); + /* 2: storew */ + ptr0[i] = var34; + /* 3: storew */ + ptr1[i] = var34; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: splatbw */ + var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); + /* 2: storew */ + ptr0[i] = var34; + /* 3: storew */ + ptr1[i] = var34; + } + } + +} + +void +video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, + int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, + 52, 52, 52, 11, 2, 2, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, + 4, 97, 0, 32, 97, 1, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_420_444); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_420_444"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_420_444); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_422_444 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: splatbw */ + var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); + /* 2: storew */ + ptr0[i] = var34; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: splatbw */ + var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff); + /* 2: storew */ + ptr0[i] = var34; + } + } + +} + +void +video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, + 52, 52, 52, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, + 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_422_444); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_422_444"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_422_444); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_444_422 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var34.i; + var36 = _src.x2[1]; + var37 = _src.x2[0]; + } + /* 2: avgub */ + var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; + /* 3: storeb */ + ptr0[i] = var35; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var34.i; + var36 = _src.x2[1]; + var37 = _src.x2[0]; + } + /* 2: avgub */ + var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1; + /* 3: storeb */ + ptr0[i] = var35; + } + } + +} + +void +video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, + 52, 50, 50, 11, 1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33, + 4, 39, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_444_422); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_444_422"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_444_422); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 1, "t2"); + + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_444_420 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var35; + orc_union16 var36; + orc_int8 var37; + orc_union16 var38; + orc_int8 var39; + orc_int8 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var35 = ptr4[i]; + /* 1: loadw */ + var36 = ptr5[i]; + /* 2: avgub */ + var38.x2[0] = + ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1; + var38.x2[1] = + ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var38.i; + var39 = _src.x2[1]; + var40 = _src.x2[0]; + } + /* 4: avgub */ + var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1; + /* 5: storeb */ + ptr0[i] = var37; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var35; + orc_union16 var36; + orc_int8 var37; + orc_union16 var38; + orc_int8 var39; + orc_int8 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var35 = ptr4[i]; + /* 1: loadw */ + var36 = ptr5[i]; + /* 2: avgub */ + var38.x2[0] = + ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1; + var38.x2[1] = + ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var38.i; + var39 = _src.x2[1]; + var40 = _src.x2[0]; + } + /* 4: avgub */ + var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1; + /* 5: storeb */ + ptr0[i] = var37; + } + } + +} + +void +video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, + 52, 50, 48, 11, 1, 1, 12, 2, 2, 12, 2, 2, 20, 2, 20, 1, + 20, 1, 21, 1, 39, 32, 4, 5, 199, 33, 34, 32, 39, 0, 33, 34, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_444_420); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_444_420"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_444_420); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_planar_chroma_422_420 */ +#ifdef DISABLE_ORC +void +video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: loadb */ + var33 = ptr5[i]; + /* 2: avgub */ + var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1; + /* 3: storeb */ + ptr0[i] = var34; + } + } + +} + +#else +static void +_backup_video_orc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: loadb */ + var33 = ptr5[i]; + /* 2: avgub */ + var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1; + /* 3: storeb */ + ptr0[i] = var34; + } + } + +} + +void +video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108, + 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, + 52, 50, 48, 11, 1, 1, 12, 1, 1, 12, 1, 1, 39, 0, 4, 5, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_422_420); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_planar_chroma_422_420"); + orc_program_set_backup_function (p, + _backup_video_orc_planar_chroma_422_420); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + + orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_YUY2_AYUV */ +#ifdef DISABLE_ORC +void +video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m) +{ + int i; + int j; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var36; + orc_union16 var37; + orc_union64 var38; + orc_union16 var39; + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 2: loadpb */ + var37.x2[0] = p1; + var37.x2[1] = p1; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var36 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 3: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var40.x2[0]; + var41.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var40.x2[1]; + var41.x2[1] = _dest.i; + } + /* 4: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var39.i; + var42.i = _dest.i; + } + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[0]; + _dest.x2[1] = var42.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[1]; + _dest.x2[1] = var42.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var36; + orc_union16 var37; + orc_union64 var38; + orc_union16 var39; + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 2: loadpb */ + var37.x2[0] = ex->params[24]; + var37.x2[1] = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var36 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 3: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var40.x2[0]; + var41.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var40.x2[1]; + var41.x2[1] = _dest.i; + } + /* 4: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var39.i; + var42.i = _dest.i; + } + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[0]; + _dest.x2[1] = var42.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[1]; + _dest.x2[1] = var42.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var38; + } + } + +} + +void +video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 65, 89, 85, 86, 11, + 8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21, + 1, 199, 33, 32, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21, + 1, 195, 0, 34, 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_YUY2_AYUV"); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_UYVY_AYUV */ +#ifdef DISABLE_ORC +void +video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m) +{ + int i; + int j; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var36; + orc_union16 var37; + orc_union64 var38; + orc_union16 var39; + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 2: loadpb */ + var37.x2[0] = p1; + var37.x2[1] = p1; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var36 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 3: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var39.x2[0]; + var41.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var39.x2[1]; + var41.x2[1] = _dest.i; + } + /* 4: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var40.i; + var42.i = _dest.i; + } + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[0]; + _dest.x2[1] = var42.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[1]; + _dest.x2[1] = var42.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var36; + orc_union16 var37; + orc_union64 var38; + orc_union16 var39; + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 2: loadpb */ + var37.x2[0] = ex->params[24]; + var37.x2[1] = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var36 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 3: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var39.x2[0]; + var41.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var39.x2[1]; + var41.x2[1] = _dest.i; + } + /* 4: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var40.i; + var42.i = _dest.i; + } + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[0]; + _dest.x2[1] = var42.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var41.x2[1]; + _dest.x2[1] = var42.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var38; + } + } + +} + +void +video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 65, 89, 85, 86, 11, + 8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21, + 1, 199, 32, 33, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21, + 1, 195, 0, 34, 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_UYVY_AYUV"); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_YUY2_Y42B */ +#ifdef DISABLE_ORC +void +video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var33.x2[0]; + var37.x2[0] = _src.x2[1]; + var34.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var33.x2[1]; + var37.x2[1] = _src.x2[1]; + var34.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var34; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 4: storeb */ + ptr2[i] = var35; + /* 5: storeb */ + ptr1[i] = var36; + } + } + +} + +#else +static void +_backup_video_orc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var33.x2[0]; + var37.x2[0] = _src.x2[1]; + var34.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var33.x2[1]; + var37.x2[1] = _src.x2[1]; + var34.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var34; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 4: storeb */ + ptr2[i] = var35; + /* 5: storeb */ + ptr1[i] = var36; + } + } + +} + +void +video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 50, 66, 11, + 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, + 32, 0, 4, 199, 2, 1, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y42B); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_YUY2_Y42B"); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y42B); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 1, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_UYVY_Y42B */ +#ifdef DISABLE_ORC +void +video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var33.x2[0]; + var34.x2[0] = _src.x2[1]; + var37.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var33.x2[1]; + var34.x2[1] = _src.x2[1]; + var37.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var34; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 4: storeb */ + ptr2[i] = var35; + /* 5: storeb */ + ptr1[i] = var36; + } + } + +} + +#else +static void +_backup_video_orc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; + orc_union16 var34; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var33.x2[0]; + var34.x2[0] = _src.x2[1]; + var37.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var33.x2[1]; + var34.x2[1] = _src.x2[1]; + var37.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var34; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var37.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 4: storeb */ + ptr2[i] = var35; + /* 5: storeb */ + ptr1[i] = var36; + } + } + +} + +void +video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 50, 66, 11, + 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, + 0, 32, 4, 199, 2, 1, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y42B); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_UYVY_Y42B"); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y42B); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 1, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_YUY2_Y444 */ +#ifdef DISABLE_ORC +void +video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_union16 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var36.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var36.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var36; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 4: splatbw */ + var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); + /* 5: storew */ + ptr1[i] = var37; + /* 6: splatbw */ + var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); + /* 7: storew */ + ptr2[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_union16 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var36.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var36.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var36; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 4: splatbw */ + var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); + /* 5: storew */ + ptr1[i] = var37; + /* 6: splatbw */ + var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); + /* 7: storew */ + ptr2[i] = var38; + } + } + +} + +void +video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 52, 52, 11, + 2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, + 1, 21, 1, 199, 32, 0, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2, + 34, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y444); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_YUY2_Y444"); + orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y444); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_destination (p, 2, "d3"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_UYVY_Y444 */ +#ifdef DISABLE_ORC +void +video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_union16 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var36.x2[0] = _src.x2[1]; + var39.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var36.x2[1] = _src.x2[1]; + var39.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var36; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 4: splatbw */ + var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); + /* 5: storew */ + ptr1[i] = var37; + /* 6: splatbw */ + var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); + /* 7: storew */ + ptr2[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_union16 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_int8 var40; + orc_int8 var41; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var36.x2[0] = _src.x2[1]; + var39.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var36.x2[1] = _src.x2[1]; + var39.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var36; + /* 3: splitwb */ + { + orc_union16 _src; + _src.i = var39.i; + var40 = _src.x2[1]; + var41 = _src.x2[0]; + } + /* 4: splatbw */ + var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff); + /* 5: storew */ + ptr1[i] = var37; + /* 6: splatbw */ + var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff); + /* 7: storew */ + ptr2[i] = var38; + } + } + +} + +void +video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 52, 52, 11, + 2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, + 1, 21, 1, 199, 0, 32, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2, + 34, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y444); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_UYVY_Y444"); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y444); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_destination (p, 2, "d3"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_UYVY_I420 */ +#ifdef DISABLE_ORC +void +video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + ptr0 = (orc_union16 *) d1; + ptr1 = (orc_union16 *) d2; + ptr2 = (orc_int8 *) d3; + ptr3 = (orc_int8 *) d4; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var39; + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var41.x2[0] = _src.x2[1]; + var42.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var41.x2[1] = _src.x2[1]; + var42.x2[1] = _src.x2[0]; + } + /* 5: storew */ + ptr1[i] = var41; + /* 6: avgub */ + var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 7: splitwb */ + { + orc_union16 _src; + _src.i = var43.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 8: storeb */ + ptr3[i] = var37; + /* 9: storeb */ + ptr2[i] = var38; + } + +} + +#else +static void +_backup_video_orc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr1 = (orc_union16 *) ex->arrays[1]; + ptr2 = (orc_int8 *) ex->arrays[2]; + ptr3 = (orc_int8 *) ex->arrays[3]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitwb */ + { + orc_union16 _src; + _src.i = var35.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var35.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: storew */ + ptr0[i] = var39; + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var36.x2[0]; + var41.x2[0] = _src.x2[1]; + var42.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var36.x2[1]; + var41.x2[1] = _src.x2[1]; + var42.x2[1] = _src.x2[0]; + } + /* 5: storew */ + ptr1[i] = var41; + /* 6: avgub */ + var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 7: splitwb */ + { + orc_union16 _src; + _src.i = var43.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 8: storeb */ + ptr3[i] = var37; + /* 9: storeb */ + ptr2[i] = var38; + } + +} + +void +video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 73, 52, 50, 48, 11, 2, + 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, + 20, 2, 20, 2, 20, 2, 21, 1, 199, 34, 32, 4, 97, 0, 34, 21, + 1, 199, 34, 33, 5, 97, 1, 34, 21, 1, 39, 32, 32, 33, 199, 3, + 2, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_I420); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_UYVY_I420"); + orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_I420); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_destination (p, 1, "d4"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_D3] = d3; + ex->arrays[ORC_VAR_D4] = d4; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_I420 */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var40; + orc_union16 var41; + orc_union64 var42; + orc_union16 var43; + orc_int8 var44; + orc_int8 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union16 var51; + orc_union16 var52; + orc_int8 var53; + orc_int8 var54; + orc_int8 var55; + orc_int8 var56; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var40 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var40.x2[0]; + var46.x2[0] = _src.x2[1]; + var47.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var40.x2[1]; + var46.x2[1] = _src.x2[1]; + var47.x2[1] = _src.x2[0]; + } + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var47.x2[0]; + var41.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var47.x2[1]; + var41.x2[1] = _src.x2[1]; + } + /* 3: storew */ + ptr0[i] = var41; + /* 4: loadq */ + var42 = ptr5[i]; + /* 5: splitlw */ + { + orc_union32 _src; + _src.i = var42.x2[0]; + var48.x2[0] = _src.x2[1]; + var49.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var42.x2[1]; + var48.x2[1] = _src.x2[1]; + var49.x2[1] = _src.x2[0]; + } + /* 6: select1wb */ + { + orc_union16 _src; + _src.i = var49.x2[0]; + var43.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var49.x2[1]; + var43.x2[1] = _src.x2[1]; + } + /* 7: storew */ + ptr1[i] = var43; + /* 8: avgub */ + var50.x4[0] = + ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1; + var50.x4[1] = + ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1; + var50.x4[2] = + ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1; + var50.x4[3] = + ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1; + /* 9: splitwb */ + { + orc_union16 _src; + _src.i = var50.x2[0]; + var51.x2[0] = _src.x2[1]; + var52.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var50.x2[1]; + var51.x2[1] = _src.x2[1]; + var52.x2[1] = _src.x2[0]; + } + /* 10: splitwb */ + { + orc_union16 _src; + _src.i = var52.i; + var53 = _src.x2[1]; + var54 = _src.x2[0]; + } + /* 11: avgub */ + var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1; + /* 12: storeb */ + ptr2[i] = var44; + /* 13: splitwb */ + { + orc_union16 _src; + _src.i = var51.i; + var55 = _src.x2[1]; + var56 = _src.x2[0]; + } + /* 14: avgub */ + var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1; + /* 15: storeb */ + ptr3[i] = var45; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_union16 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + orc_int8 *ORC_RESTRICT ptr3; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var40; + orc_union16 var41; + orc_union64 var42; + orc_union16 var43; + orc_int8 var44; + orc_int8 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union16 var51; + orc_union16 var52; + orc_int8 var53; + orc_int8 var54; + orc_int8 var55; + orc_int8 var56; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var40 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var40.x2[0]; + var46.x2[0] = _src.x2[1]; + var47.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var40.x2[1]; + var46.x2[1] = _src.x2[1]; + var47.x2[1] = _src.x2[0]; + } + /* 2: select1wb */ + { + orc_union16 _src; + _src.i = var47.x2[0]; + var41.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var47.x2[1]; + var41.x2[1] = _src.x2[1]; + } + /* 3: storew */ + ptr0[i] = var41; + /* 4: loadq */ + var42 = ptr5[i]; + /* 5: splitlw */ + { + orc_union32 _src; + _src.i = var42.x2[0]; + var48.x2[0] = _src.x2[1]; + var49.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var42.x2[1]; + var48.x2[1] = _src.x2[1]; + var49.x2[1] = _src.x2[0]; + } + /* 6: select1wb */ + { + orc_union16 _src; + _src.i = var49.x2[0]; + var43.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var49.x2[1]; + var43.x2[1] = _src.x2[1]; + } + /* 7: storew */ + ptr1[i] = var43; + /* 8: avgub */ + var50.x4[0] = + ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1; + var50.x4[1] = + ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1; + var50.x4[2] = + ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1; + var50.x4[3] = + ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1; + /* 9: splitwb */ + { + orc_union16 _src; + _src.i = var50.x2[0]; + var51.x2[0] = _src.x2[1]; + var52.x2[0] = _src.x2[0]; + } + { + orc_union16 _src; + _src.i = var50.x2[1]; + var51.x2[1] = _src.x2[1]; + var52.x2[1] = _src.x2[0]; + } + /* 10: splitwb */ + { + orc_union16 _src; + _src.i = var52.i; + var53 = _src.x2[1]; + var54 = _src.x2[0]; + } + /* 11: avgub */ + var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1; + /* 12: storeb */ + ptr2[i] = var44; + /* 13: splitwb */ + { + orc_union16 _src; + _src.i = var51.i; + var55 = _src.x2[1]; + var56 = _src.x2[0]; + } + /* 14: avgub */ + var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1; + /* 15: storeb */ + ptr3[i] = var45; + } + } + +} + +void +video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 73, 52, 50, 48, 11, + 2, 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 12, 8, + 8, 20, 4, 20, 4, 20, 4, 20, 4, 20, 2, 20, 2, 20, 1, 20, + 1, 21, 1, 198, 33, 32, 4, 21, 1, 189, 0, 32, 21, 1, 198, 34, + 32, 5, 21, 1, 189, 1, 32, 21, 2, 39, 35, 33, 34, 21, 1, 199, + 37, 36, 35, 199, 38, 39, 36, 39, 2, 38, 39, 199, 38, 39, 37, 39, + 3, 38, 39, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_I420); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_I420"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_I420); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 2, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_destination (p, 1, "d4"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_source (p, 8, "s2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 1, "t7"); + orc_program_add_temporary (p, 1, "t8"); + + orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_D4] = d4; + ex->params[ORC_VAR_D4] = d4_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_YUY2 */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var37.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 4: select1wb */ + { + orc_union16 _src; + _src.i = var40.x2[0]; + var44.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var40.x2[1]; + var44.x2[1] = _src.x2[1]; + } + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var43.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var43.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var37.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 4: select1wb */ + { + orc_union16 _src; + _src.i = var40.x2[0]; + var44.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var40.x2[1]; + var44.x2[1] = _src.x2[1]; + } + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[0]; + _dest.x2[1] = var43.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var44.x2[1]; + _dest.x2[1] = var43.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + } + } + +} + +void +video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 85, 89, 50, 11, + 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, + 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, + 1, 189, 32, 35, 21, 1, 196, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_YUY2); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_YUY2"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_YUY2); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_UYVY */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var37.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 4: select1wb */ + { + orc_union16 _src; + _src.i = var40.x2[0]; + var44.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var40.x2[1]; + var44.x2[1] = _src.x2[1]; + } + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.x2[0]; + var39.x2[0] = _src.x2[1]; + var40.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var37.x2[1]; + var39.x2[1] = _src.x2[1]; + var40.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 4: select1wb */ + { + orc_union16 _src; + _src.i = var40.x2[0]; + var44.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var40.x2[1]; + var44.x2[1] = _src.x2[1]; + } + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var38.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var38.x2[1] = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + } + } + +} + +void +video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 85, 89, 86, 89, 11, + 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, + 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, + 1, 189, 32, 35, 21, 1, 196, 0, 33, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_UYVY); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_UYVY"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_UYVY); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_Y42B */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union32 var40; + orc_union32 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var36 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var36.x2[0]; + var40.x2[0] = _src.x2[1]; + var41.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var36.x2[1]; + var40.x2[1] = _src.x2[1]; + var41.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var42.i = _src.x2[1]; + var43.i = _src.x2[0]; + } + /* 3: avgub */ + var44.x2[0] = + ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; + var44.x2[1] = + ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var44.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 5: storeb */ + ptr2[i] = var37; + /* 6: storeb */ + ptr1[i] = var38; + /* 7: select1wb */ + { + orc_union16 _src; + _src.i = var41.x2[0]; + var39.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var41.x2[1]; + var39.x2[1] = _src.x2[1]; + } + /* 8: storew */ + ptr0[i] = var39; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var36; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; + orc_union32 var40; + orc_union32 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var36 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var36.x2[0]; + var40.x2[0] = _src.x2[1]; + var41.x2[0] = _src.x2[0]; + } + { + orc_union32 _src; + _src.i = var36.x2[1]; + var40.x2[1] = _src.x2[1]; + var41.x2[1] = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var42.i = _src.x2[1]; + var43.i = _src.x2[0]; + } + /* 3: avgub */ + var44.x2[0] = + ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; + var44.x2[1] = + ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var44.i; + var37 = _src.x2[1]; + var38 = _src.x2[0]; + } + /* 5: storeb */ + ptr2[i] = var37; + /* 6: storeb */ + ptr1[i] = var38; + /* 7: select1wb */ + { + orc_union16 _src; + _src.i = var41.x2[0]; + var39.x2[0] = _src.x2[1]; + } + { + orc_union16 _src; + _src.i = var41.x2[1]; + var39.x2[1] = _src.x2[1]; + } + /* 8: storew */ + ptr0[i] = var39; + } + } + +} + +void +video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 50, 66, 11, + 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20, + 2, 20, 2, 21, 1, 198, 33, 32, 4, 198, 34, 35, 33, 21, 1, 39, + 34, 34, 35, 199, 2, 1, 34, 21, 1, 189, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y42B); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_Y42B"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y42B); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_destination (p, 1, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + + orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_Y444 */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + int i; + int j; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; + orc_union16 var39; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j); + ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var34 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var34.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: splitwb */ + { + orc_union16 _src; + _src.i = var38.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 3: storeb */ + ptr2[i] = var35; + /* 4: storeb */ + ptr1[i] = var36; + /* 5: select1wb */ + { + orc_union16 _src; + _src.i = var39.i; + var37 = _src.x2[1]; + } + /* 6: storeb */ + ptr0[i] = var37; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_int8 *ORC_RESTRICT ptr0; + orc_int8 *ORC_RESTRICT ptr1; + orc_int8 *ORC_RESTRICT ptr2; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; + orc_union16 var39; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j); + ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var34 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var34.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: splitwb */ + { + orc_union16 _src; + _src.i = var38.i; + var35 = _src.x2[1]; + var36 = _src.x2[0]; + } + /* 3: storeb */ + ptr2[i] = var35; + /* 4: storeb */ + ptr1[i] = var36; + /* 5: select1wb */ + { + orc_union16 _src; + _src.i = var39.i; + var37 = _src.x2[1]; + } + /* 6: storeb */ + ptr0[i] = var37; + } + } + +} + +void +video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, + guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, + int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 52, 52, 11, + 1, 1, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 20, 2, 198, + 33, 32, 4, 199, 2, 1, 33, 189, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y444); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_Y444"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y444); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_destination (p, 1, "d2"); + orc_program_add_destination (p, 1, "d3"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_D2] = d2; + ex->params[ORC_VAR_D2] = d2_stride; + ex->arrays[ORC_VAR_D3] = d3; + ex->params[ORC_VAR_D3] = d3_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y42B_YUY2 */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr5[i]; + /* 1: loadb */ + var34 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var37.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[0]; + _dest.x2[1] = var37.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[1]; + _dest.x2[1] = var37.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr5[i]; + /* 1: loadb */ + var34 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var37.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[0]; + _dest.x2[1] = var37.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var35.x2[1]; + _dest.x2[1] = var37.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + } + } + +} + +void +video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 89, 85, 89, 50, 11, + 4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, + 6, 21, 1, 196, 0, 4, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_YUY2); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y42B_YUY2"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_YUY2); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y42B_UYVY */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr5[i]; + /* 1: loadb */ + var34 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var37.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var35.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var35.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var33; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union16 var37; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr5[i]; + /* 1: loadb */ + var34 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var33; + _dest.x2[1] = var34; + var37.i = _dest.i; + } + /* 3: loadw */ + var35 = ptr4[i]; + /* 4: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[0]; + _dest.x2[1] = var35.x2[0]; + var36.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var37.x2[1]; + _dest.x2[1] = var35.x2[1]; + var36.x2[1] = _dest.i; + } + /* 5: storel */ + ptr0[i] = var36; + } + } + +} + +void +video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 85, 89, 86, 89, 11, + 4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, + 6, 21, 1, 196, 0, 32, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_UYVY); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y42B_UYVY"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_UYVY); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y42B_AYUV */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m) +{ + int i; + int j; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; + orc_union16 var39; + orc_union64 var40; + orc_union16 var41; + orc_union32 var42; + orc_union32 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + /* 3: loadpb */ + var38.x2[0] = p1; + var38.x2[1] = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var36 = ptr5[i]; + /* 1: loadb */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var41.i = _dest.i; + } + /* 4: loadw */ + var39 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[0]; + _dest.x2[1] = var39.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[1]; + _dest.x2[1] = var39.x2[1]; + var42.x2[1] = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var41.i; + var43.i = _dest.i; + } + /* 7: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var40.x2[1] = _dest.i; + } + /* 8: storeq */ + ptr0[i] = var40; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var36; + orc_int8 var37; + orc_union16 var38; + orc_union16 var39; + orc_union64 var40; + orc_union16 var41; + orc_union32 var42; + orc_union32 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + /* 3: loadpb */ + var38.x2[0] = ex->params[24]; + var38.x2[1] = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var36 = ptr5[i]; + /* 1: loadb */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var41.i = _dest.i; + } + /* 4: loadw */ + var39 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[0]; + _dest.x2[1] = var39.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[1]; + _dest.x2[1] = var39.x2[1]; + var42.x2[1] = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var41.i; + var43.i = _dest.i; + } + /* 7: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var40.x2[1] = _dest.i; + } + /* 8: storeq */ + ptr0[i] = var40; + } + } + +} + +void +video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 65, 89, 85, 86, 11, + 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20, + 2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196, 35, 24, 4, 195, + 34, 32, 32, 21, 1, 195, 0, 35, 34, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_AYUV); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y42B_AYUV"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_AYUV); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_P1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y444_YUY2 */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr5[i]; + /* 1: loadw */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[0]; + _dest.x2[1] = var37.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[1]; + _dest.x2[1] = var37.x2[1]; + var40.x2[1] = _dest.i; + } + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 4: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 5: loadw */ + var38 = ptr4[i]; + /* 6: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[0]; + _dest.x2[1] = var43.x2[0]; + var39.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[1]; + _dest.x2[1] = var43.x2[1]; + var39.x2[1] = _dest.i; + } + /* 7: storel */ + ptr0[i] = var39; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr5[i]; + /* 1: loadw */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[0]; + _dest.x2[1] = var37.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[1]; + _dest.x2[1] = var37.x2[1]; + var40.x2[1] = _dest.i; + } + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 4: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 5: loadw */ + var38 = ptr4[i]; + /* 6: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[0]; + _dest.x2[1] = var43.x2[0]; + var39.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var38.x2[1]; + _dest.x2[1] = var43.x2[1]; + var39.x2[1] = _dest.i; + } + /* 7: storel */ + ptr0[i] = var39; + } + } + +} + +void +video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 89, 85, 89, 50, 11, + 4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, + 2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39, + 32, 34, 35, 21, 1, 196, 0, 4, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_YUY2); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y444_YUY2"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_YUY2); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y444_UYVY */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr5[i]; + /* 1: loadw */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[0]; + _dest.x2[1] = var37.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[1]; + _dest.x2[1] = var37.x2[1]; + var40.x2[1] = _dest.i; + } + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 4: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 5: loadw */ + var38 = ptr4[i]; + /* 6: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var38.x2[0]; + var39.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var38.x2[1]; + var39.x2[1] = _dest.i; + } + /* 7: storel */ + ptr0[i] = var39; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr5[i]; + /* 1: loadw */ + var37 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[0]; + _dest.x2[1] = var37.x2[0]; + var40.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var36.x2[1]; + _dest.x2[1] = var37.x2[1]; + var40.x2[1] = _dest.i; + } + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 4: avgub */ + var43.x2[0] = + ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1; + var43.x2[1] = + ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1; + /* 5: loadw */ + var38 = ptr4[i]; + /* 6: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var38.x2[0]; + var39.x2[0] = _dest.i; + } + { + orc_union16 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var38.x2[1]; + var39.x2[1] = _dest.i; + } + /* 7: storel */ + ptr0[i] = var39; + } + } + +} + +void +video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 85, 89, 86, 89, 11, + 4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, + 2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39, + 32, 34, 35, 21, 1, 196, 0, 32, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_UYVY); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y444_UYVY"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_UYVY); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_Y444_AYUV */ +#ifdef DISABLE_ORC +void +video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + orc_union32 var38; + orc_union16 var39; + orc_union16 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j); + + /* 3: loadpb */ + var36 = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr5[i]; + /* 1: loadb */ + var35 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var34; + _dest.x2[1] = var35; + var39.i = _dest.i; + } + /* 4: loadb */ + var37 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var40.i = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var39.i; + var38.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var38; + } + } + +} + +#else +static void +_backup_video_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var34; + orc_int8 var35; + orc_int8 var36; + orc_int8 var37; + orc_union32 var38; + orc_union16 var39; + orc_union16 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j); + + /* 3: loadpb */ + var36 = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr5[i]; + /* 1: loadb */ + var35 = ptr6[i]; + /* 2: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var34; + _dest.x2[1] = var35; + var39.i = _dest.i; + } + /* 4: loadb */ + var37 = ptr4[i]; + /* 5: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var36; + _dest.x2[1] = var37; + var40.i = _dest.i; + } + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var39.i; + var38.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var38; + } + } + +} + +void +video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const guint8 * ORC_RESTRICT s2, int s2_stride, + const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 65, 89, 85, 86, 11, + 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20, + 2, 196, 32, 5, 6, 196, 33, 24, 4, 195, 0, 33, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_AYUV); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_Y444_AYUV"); + orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_AYUV); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_parameter (p, 1, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_S3] = s3_stride; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_ARGB */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_int8 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = p1; + /* 11: loadpw */ + var49.i = p2; + /* 16: loadpw */ + var50.i = p3; + /* 20: loadpw */ + var51.i = p4; + /* 23: loadpw */ + var52.i = p5; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var58; + _dest.x2[1] = var67; + var68.i = _dest.i; + } + /* 17: mulhsw */ + var69.i = (var62.i * var50.i) >> 16; + /* 18: addw */ + var70.i = var64.i + var69.i; + /* 19: convssswb */ + var71 = ORC_CLAMP_SB (var70.i); + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var76; + _dest.x2[1] = var71; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var68.i; + _dest.x2[1] = var77.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_int8 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = ex->params[24]; + /* 11: loadpw */ + var49.i = ex->params[25]; + /* 16: loadpw */ + var50.i = ex->params[26]; + /* 20: loadpw */ + var51.i = ex->params[27]; + /* 23: loadpw */ + var52.i = ex->params[28]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var58; + _dest.x2[1] = var67; + var68.i = _dest.i; + } + /* 17: mulhsw */ + var69.i = (var62.i * var50.i) >> 16; + /* 18: addw */ + var70.i = var64.i + var69.i; + /* 19: convssswb */ + var71 = ORC_CLAMP_SB (var70.i); + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var76; + _dest.x2[1] = var71; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var68.i; + _dest.x2[1] = var77.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +void +video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 82, 71, 66, 11, + 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, + 2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, + 4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199, + 35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24, + 90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 196, 39, 32, 42, 90, + 41, 37, 26, 70, 41, 36, 41, 159, 44, 41, 90, 40, 37, 27, 70, 40, + 36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 41, 43, + 44, 195, 45, 39, 41, 21, 2, 33, 0, 45, 16, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ARGB); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_ARGB"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ARGB); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_parameter (p, 2, "p5"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 2, "t7"); + orc_program_add_temporary (p, 2, "t8"); + orc_program_add_temporary (p, 2, "t9"); + orc_program_add_temporary (p, 2, "t10"); + orc_program_add_temporary (p, 1, "t11"); + orc_program_add_temporary (p, 1, "t12"); + orc_program_add_temporary (p, 1, "t13"); + orc_program_add_temporary (p, 4, "t14"); + + orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_T14, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T1, + ORC_VAR_T11, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T12, + ORC_VAR_T13, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8, + ORC_VAR_T10, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + ex->params[ORC_VAR_P5] = p5; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_BGRA */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_int8 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = p1; + /* 11: loadpw */ + var49.i = p2; + /* 16: loadpw */ + var50.i = p3; + /* 20: loadpw */ + var51.i = p4; + /* 23: loadpw */ + var52.i = p5; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var58; + var68.i = _dest.i; + } + /* 17: mulhsw */ + var69.i = (var62.i * var50.i) >> 16; + /* 18: addw */ + var70.i = var64.i + var69.i; + /* 19: convssswb */ + var71 = ORC_CLAMP_SB (var70.i); + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var71; + _dest.x2[1] = var76; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var77.i; + _dest.x2[1] = var68.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_int8 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = ex->params[24]; + /* 11: loadpw */ + var49.i = ex->params[25]; + /* 16: loadpw */ + var50.i = ex->params[26]; + /* 20: loadpw */ + var51.i = ex->params[27]; + /* 23: loadpw */ + var52.i = ex->params[28]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 15: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var58; + var68.i = _dest.i; + } + /* 17: mulhsw */ + var69.i = (var62.i * var50.i) >> 16; + /* 18: addw */ + var70.i = var64.i + var69.i; + /* 19: convssswb */ + var71 = ORC_CLAMP_SB (var70.i); + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var71; + _dest.x2[1] = var76; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var77.i; + _dest.x2[1] = var68.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +void +video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 66, 71, 82, 65, 11, + 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, + 2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, + 4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199, + 35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24, + 90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 196, 39, 42, 32, 90, + 41, 37, 26, 70, 41, 36, 41, 159, 44, 41, 90, 40, 37, 27, 70, 40, + 36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 41, 44, + 43, 195, 45, 41, 39, 21, 2, 33, 0, 45, 16, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_BGRA); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_BGRA"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_BGRA); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_parameter (p, 2, "p5"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 2, "t7"); + orc_program_add_temporary (p, 2, "t8"); + orc_program_add_temporary (p, 2, "t9"); + orc_program_add_temporary (p, 2, "t10"); + orc_program_add_temporary (p, 1, "t11"); + orc_program_add_temporary (p, 1, "t12"); + orc_program_add_temporary (p, 1, "t13"); + orc_program_add_temporary (p, 4, "t14"); + + orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_T14, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11, + ORC_VAR_T1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13, + ORC_VAR_T12, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10, + ORC_VAR_T8, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + ex->params[ORC_VAR_P5] = p5; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_ABGR */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_int8 var70; + orc_union16 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = p1; + /* 11: loadpw */ + var49.i = p2; + /* 15: loadpw */ + var50.i = p3; + /* 20: loadpw */ + var51.i = p4; + /* 23: loadpw */ + var52.i = p5; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 16: mulhsw */ + var68.i = (var62.i * var50.i) >> 16; + /* 17: addw */ + var69.i = var64.i + var68.i; + /* 18: convssswb */ + var70 = ORC_CLAMP_SB (var69.i); + /* 19: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var58; + _dest.x2[1] = var70; + var71.i = _dest.i; + } + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var76; + _dest.x2[1] = var67; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var71.i; + _dest.x2[1] = var77.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_int8 var70; + orc_union16 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = ex->params[24]; + /* 11: loadpw */ + var49.i = ex->params[25]; + /* 15: loadpw */ + var50.i = ex->params[26]; + /* 20: loadpw */ + var51.i = ex->params[27]; + /* 23: loadpw */ + var52.i = ex->params[28]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 16: mulhsw */ + var68.i = (var62.i * var50.i) >> 16; + /* 17: addw */ + var69.i = var64.i + var68.i; + /* 18: convssswb */ + var70 = ORC_CLAMP_SB (var69.i); + /* 19: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var58; + _dest.x2[1] = var70; + var71.i = _dest.i; + } + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var76; + _dest.x2[1] = var67; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var71.i; + _dest.x2[1] = var77.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +void +video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 66, 71, 82, 11, + 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, + 2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, + 4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199, + 35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24, + 90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 90, 41, 37, 26, 70, + 41, 36, 41, 159, 44, 41, 196, 41, 32, 44, 90, 40, 37, 27, 70, 40, + 36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 39, 43, + 42, 195, 45, 41, 39, 21, 2, 33, 0, 45, 16, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ABGR); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_ABGR"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ABGR); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_parameter (p, 2, "p5"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 2, "t7"); + orc_program_add_temporary (p, 2, "t8"); + orc_program_add_temporary (p, 2, "t9"); + orc_program_add_temporary (p, 2, "t10"); + orc_program_add_temporary (p, 1, "t11"); + orc_program_add_temporary (p, 1, "t12"); + orc_program_add_temporary (p, 1, "t13"); + orc_program_add_temporary (p, 4, "t14"); + + orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_T14, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T1, + ORC_VAR_T13, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T12, + ORC_VAR_T11, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10, + ORC_VAR_T8, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + ex->params[ORC_VAR_P5] = p5; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_AYUV_RGBA */ +#ifdef DISABLE_ORC +void +video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_int8 var70; + orc_union16 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = p1; + /* 11: loadpw */ + var49.i = p2; + /* 15: loadpw */ + var50.i = p3; + /* 20: loadpw */ + var51.i = p4; + /* 23: loadpw */ + var52.i = p5; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 16: mulhsw */ + var68.i = (var62.i * var50.i) >> 16; + /* 17: addw */ + var69.i = var64.i + var68.i; + /* 18: convssswb */ + var70 = ORC_CLAMP_SB (var69.i); + /* 19: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var70; + _dest.x2[1] = var58; + var71.i = _dest.i; + } + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var76; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var77.i; + _dest.x2[1] = var71.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +#else +static void +_backup_video_orc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var46; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var47; +#else + orc_union32 var47; +#endif + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_int8 var59; + orc_int8 var60; + orc_union16 var61; + orc_union16 var62; + orc_union16 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_int8 var70; + orc_union16 var71; + orc_union16 var72; + orc_union16 var73; + orc_union16 var74; + orc_union16 var75; + orc_int8 var76; + orc_union16 var77; + orc_union32 var78; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + + /* 1: loadpb */ + var47.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var47.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 9: loadpw */ + var48.i = ex->params[24]; + /* 11: loadpw */ + var49.i = ex->params[25]; + /* 15: loadpw */ + var50.i = ex->params[26]; + /* 20: loadpw */ + var51.i = ex->params[27]; + /* 23: loadpw */ + var52.i = ex->params[28]; + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var46 = ptr4[i]; + /* 2: subb */ + var54.x4[0] = var46.x4[0] - var47.x4[0]; + var54.x4[1] = var46.x4[1] - var47.x4[1]; + var54.x4[2] = var46.x4[2] - var47.x4[2]; + var54.x4[3] = var46.x4[3] - var47.x4[3]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var54.i; + var55.i = _src.x2[1]; + var56.i = _src.x2[0]; + } + /* 4: splitwb */ + { + orc_union16 _src; + _src.i = var56.i; + var57 = _src.x2[1]; + var58 = _src.x2[0]; + } + /* 5: splitwb */ + { + orc_union16 _src; + _src.i = var55.i; + var59 = _src.x2[1]; + var60 = _src.x2[0]; + } + /* 6: splatbw */ + var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff); + /* 7: splatbw */ + var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff); + /* 8: splatbw */ + var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff); + /* 10: mulhsw */ + var64.i = (var61.i * var48.i) >> 16; + /* 12: mulhsw */ + var65.i = (var63.i * var49.i) >> 16; + /* 13: addw */ + var66.i = var64.i + var65.i; + /* 14: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 16: mulhsw */ + var68.i = (var62.i * var50.i) >> 16; + /* 17: addw */ + var69.i = var64.i + var68.i; + /* 18: convssswb */ + var70 = ORC_CLAMP_SB (var69.i); + /* 19: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var70; + _dest.x2[1] = var58; + var71.i = _dest.i; + } + /* 21: mulhsw */ + var72.i = (var62.i * var51.i) >> 16; + /* 22: addw */ + var73.i = var64.i + var72.i; + /* 24: mulhsw */ + var74.i = (var63.i * var52.i) >> 16; + /* 25: addw */ + var75.i = var73.i + var74.i; + /* 26: convssswb */ + var76 = ORC_CLAMP_SB (var75.i); + /* 27: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var76; + var77.i = _dest.i; + } + /* 28: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var77.i; + _dest.x2[1] = var71.i; + var78.i = _dest.i; + } + /* 29: addb */ + var53.x4[0] = var78.x4[0] + var47.x4[0]; + var53.x4[1] = var78.x4[1] + var47.x4[1]; + var53.x4[2] = var78.x4[2] + var47.x4[2]; + var53.x4[3] = var78.x4[3] + var47.x4[3]; + /* 30: storel */ + ptr0[i] = var53; + } + } + +} + +void +video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, + int p4, int p5, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, + 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 82, 71, 66, 65, 11, + 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, + 2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, + 4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199, + 35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24, + 90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 90, 41, 37, 26, 70, + 41, 36, 41, 159, 44, 41, 196, 41, 44, 32, 90, 40, 37, 27, 70, 40, + 36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 39, 42, + 43, 195, 45, 39, 41, 21, 2, 33, 0, 45, 16, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_RGBA); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_convert_AYUV_RGBA"); + orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_RGBA); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_parameter (p, 2, "p5"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 1, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 2, "t7"); + orc_program_add_temporary (p, 2, "t8"); + orc_program_add_temporary (p, 2, "t9"); + orc_program_add_temporary (p, 2, "t10"); + orc_program_add_temporary (p, 1, "t11"); + orc_program_add_temporary (p, 1, "t12"); + orc_program_add_temporary (p, 1, "t13"); + orc_program_add_temporary (p, 4, "t14"); + + orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_T14, ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13, + ORC_VAR_T1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11, + ORC_VAR_T12, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8, + ORC_VAR_T10, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + ex->params[ORC_VAR_P5] = p5; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_convert_I420_BGRA */ +#ifdef DISABLE_ORC +void +video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, + int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var42; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_int8 var43; +#else + orc_int8 var43; +#endif + orc_union16 var44; + orc_union16 var45; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_int8 var46; +#else + orc_int8 var46; +#endif + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var50; +#else + orc_union32 var50; +#endif + orc_union32 var51; + orc_int8 var52; + orc_union16 var53; + orc_int8 var54; + orc_int8 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_union16 var59; + orc_union16 var60; + orc_union16 var61; + orc_union16 var62; + orc_int8 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_union16 var71; + orc_int8 var72; + orc_union16 var73; + orc_union32 var74; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + + /* 1: loadpb */ + var43 = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 10: loadpw */ + var44.i = p1; + /* 12: loadpw */ + var45.i = p2; + /* 16: loadpb */ + var46 = (int) 0x0000007f; /* 127 or 6.27463e-322f */ + /* 18: loadpw */ + var47.i = p3; + /* 22: loadpw */ + var48.i = p4; + /* 25: loadpw */ + var49.i = p5; + /* 31: loadpb */ + var50.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var42 = ptr4[i]; + /* 2: subb */ + var52 = var42 - var43; + /* 3: splatbw */ + var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff); + /* 4: loadupdb */ + var54 = ptr5[i >> 1]; + /* 5: subb */ + var55 = var54 - var43; + /* 6: splatbw */ + var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff); + /* 7: loadupdb */ + var57 = ptr6[i >> 1]; + /* 8: subb */ + var58 = var57 - var43; + /* 9: splatbw */ + var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff); + /* 11: mulhsw */ + var60.i = (var53.i * var44.i) >> 16; + /* 13: mulhsw */ + var61.i = (var59.i * var45.i) >> 16; + /* 14: addw */ + var62.i = var60.i + var61.i; + /* 15: convssswb */ + var63 = ORC_CLAMP_SB (var62.i); + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var63; + _dest.x2[1] = var46; + var64.i = _dest.i; + } + /* 19: mulhsw */ + var65.i = (var56.i * var47.i) >> 16; + /* 20: addw */ + var66.i = var60.i + var65.i; + /* 21: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 23: mulhsw */ + var68.i = (var56.i * var48.i) >> 16; + /* 24: addw */ + var69.i = var60.i + var68.i; + /* 26: mulhsw */ + var70.i = (var59.i * var49.i) >> 16; + /* 27: addw */ + var71.i = var69.i + var70.i; + /* 28: convssswb */ + var72 = ORC_CLAMP_SB (var71.i); + /* 29: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var72; + var73.i = _dest.i; + } + /* 30: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var73.i; + _dest.x2[1] = var64.i; + var74.i = _dest.i; + } + /* 32: addb */ + var51.x4[0] = var74.x4[0] + var50.x4[0]; + var51.x4[1] = var74.x4[1] + var50.x4[1]; + var51.x4[2] = var74.x4[2] + var50.x4[2]; + var51.x4[3] = var74.x4[3] + var50.x4[3]; + /* 33: storel */ + ptr0[i] = var51; + } + +} + +#else +static void +_backup_video_orc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + orc_int8 var42; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_int8 var43; +#else + orc_int8 var43; +#endif + orc_union16 var44; + orc_union16 var45; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_int8 var46; +#else + orc_int8 var46; +#endif + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var50; +#else + orc_union32 var50; +#endif + orc_union32 var51; + orc_int8 var52; + orc_union16 var53; + orc_int8 var54; + orc_int8 var55; + orc_union16 var56; + orc_int8 var57; + orc_int8 var58; + orc_union16 var59; + orc_union16 var60; + orc_union16 var61; + orc_union16 var62; + orc_int8 var63; + orc_union16 var64; + orc_union16 var65; + orc_union16 var66; + orc_int8 var67; + orc_union16 var68; + orc_union16 var69; + orc_union16 var70; + orc_union16 var71; + orc_int8 var72; + orc_union16 var73; + orc_union32 var74; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + + /* 1: loadpb */ + var43 = (int) 0x00000080; /* 128 or 6.32404e-322f */ + /* 10: loadpw */ + var44.i = ex->params[24]; + /* 12: loadpw */ + var45.i = ex->params[25]; + /* 16: loadpb */ + var46 = (int) 0x0000007f; /* 127 or 6.27463e-322f */ + /* 18: loadpw */ + var47.i = ex->params[26]; + /* 22: loadpw */ + var48.i = ex->params[27]; + /* 25: loadpw */ + var49.i = ex->params[28]; + /* 31: loadpb */ + var50.x4[0] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[1] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[2] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + var50.x4[3] = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var42 = ptr4[i]; + /* 2: subb */ + var52 = var42 - var43; + /* 3: splatbw */ + var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff); + /* 4: loadupdb */ + var54 = ptr5[i >> 1]; + /* 5: subb */ + var55 = var54 - var43; + /* 6: splatbw */ + var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff); + /* 7: loadupdb */ + var57 = ptr6[i >> 1]; + /* 8: subb */ + var58 = var57 - var43; + /* 9: splatbw */ + var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff); + /* 11: mulhsw */ + var60.i = (var53.i * var44.i) >> 16; + /* 13: mulhsw */ + var61.i = (var59.i * var45.i) >> 16; + /* 14: addw */ + var62.i = var60.i + var61.i; + /* 15: convssswb */ + var63 = ORC_CLAMP_SB (var62.i); + /* 17: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var63; + _dest.x2[1] = var46; + var64.i = _dest.i; + } + /* 19: mulhsw */ + var65.i = (var56.i * var47.i) >> 16; + /* 20: addw */ + var66.i = var60.i + var65.i; + /* 21: convssswb */ + var67 = ORC_CLAMP_SB (var66.i); + /* 23: mulhsw */ + var68.i = (var56.i * var48.i) >> 16; + /* 24: addw */ + var69.i = var60.i + var68.i; + /* 26: mulhsw */ + var70.i = (var59.i * var49.i) >> 16; + /* 27: addw */ + var71.i = var69.i + var70.i; + /* 28: convssswb */ + var72 = ORC_CLAMP_SB (var71.i); + /* 29: mergebw */ + { + orc_union16 _dest; + _dest.x2[0] = var67; + _dest.x2[1] = var72; + var73.i = _dest.i; + } + /* 30: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var73.i; + _dest.x2[1] = var64.i; + var74.i = _dest.i; + } + /* 32: addb */ + var51.x4[0] = var74.x4[0] + var50.x4[0]; + var51.x4[1] = var74.x4[1] + var50.x4[1]; + var51.x4[2] = var74.x4[2] + var50.x4[2]; + var51.x4[3] = var74.x4[3] + var50.x4[3]; + /* 33: storel */ + ptr0[i] = var51; + } + +} + +void +video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110, + 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 66, 71, 82, 65, 11, 4, + 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 128, 0, 0, 0, + 14, 1, 127, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, + 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, + 20, 1, 20, 4, 65, 38, 4, 16, 151, 32, 38, 45, 38, 5, 65, 38, + 38, 16, 151, 33, 38, 45, 38, 6, 65, 38, 38, 16, 151, 34, 38, 90, + 32, 32, 24, 90, 35, 34, 25, 70, 35, 32, 35, 159, 38, 35, 196, 35, + 38, 17, 90, 37, 33, 26, 70, 37, 32, 37, 159, 40, 37, 90, 36, 33, + 27, 70, 36, 32, 36, 90, 32, 34, 28, 70, 36, 36, 32, 159, 39, 36, + 196, 37, 40, 39, 195, 41, 37, 35, 21, 2, 33, 0, 41, 16, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_BGRA); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_convert_I420_BGRA"); + orc_program_set_backup_function (p, _backup_video_orc_convert_I420_BGRA); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_constant (p, 1, 0x0000007f, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_parameter (p, 2, "p5"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + orc_program_add_temporary (p, 2, "t6"); + orc_program_add_temporary (p, 1, "t7"); + orc_program_add_temporary (p, 1, "t8"); + orc_program_add_temporary (p, 1, "t9"); + orc_program_add_temporary (p, 4, "t10"); + + orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T2, ORC_VAR_T7, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T3, ORC_VAR_T7, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T7, ORC_VAR_T4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T9, ORC_VAR_T6, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T8, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T9, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T10, ORC_VAR_T6, + ORC_VAR_T4, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T10, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + ex->params[ORC_VAR_P5] = p5; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_matrix8 */ +#ifdef DISABLE_ORC +void +video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, + orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n) +{ + _custom_video_orc_matrix8 (d1, s1, p1, p2, p3, p4, n); +} + +#else +static void +_backup_video_orc_matrix8 (OrcExecutor * ORC_RESTRICT ex) +{ + _custom_video_orc_matrix8 (ex->arrays[ORC_VAR_D1], ex->arrays[ORC_VAR_S1], + (ex->params[ORC_VAR_P1] & 0xffffffff) | ((orc_uint64) (ex-> + params[ORC_VAR_T1]) << 32), + (ex->params[ORC_VAR_P2] & 0xffffffff) | ((orc_uint64) (ex-> + params[ORC_VAR_T2]) << 32), + (ex->params[ORC_VAR_P3] & 0xffffffff) | ((orc_uint64) (ex-> + params[ORC_VAR_T3]) << 32), + (ex->params[ORC_VAR_P4] & 0xffffffff) | ((orc_uint64) (ex-> + params[ORC_VAR_T4]) << 32), ex->n); +} + +void +video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, + orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 17, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 97, 116, + 114, 105, 120, 56, 11, 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, + 18, 8, 18, 8, 18, 8, 18, 8, 20, 2, 20, 2, 20, 1, 20, 1, + 20, 4, 20, 4, 20, 8, 20, 8, 20, 8, 20, 8, 20, 8, 134, 40, + 24, 134, 41, 25, 134, 42, 26, 21, 2, 65, 36, 4, 16, 190, 32, 36, + 191, 33, 36, 188, 34, 32, 189, 35, 32, 150, 32, 34, 154, 36, 32, 21, + 2, 196, 38, 36, 36, 152, 36, 35, 194, 39, 36, 36, 21, 2, 90, 39, + 39, 40, 21, 2, 70, 38, 38, 39, 188, 34, 33, 152, 36, 34, 194, 39, + 36, 36, 21, 2, 90, 39, 39, 41, 21, 2, 70, 38, 38, 39, 189, 35, + 33, 152, 36, 35, 194, 39, 36, 36, 21, 2, 90, 39, 39, 42, 21, 2, + 70, 38, 38, 39, 21, 2, 159, 37, 38, 21, 2, 33, 0, 37, 16, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_matrix8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_matrix8"); + orc_program_set_backup_function (p, _backup_video_orc_matrix8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 1, 0x00000080, "c1"); + orc_program_add_parameter_int64 (p, 8, "p1"); + orc_program_add_parameter_int64 (p, 8, "p2"); + orc_program_add_parameter_int64 (p, 8, "p3"); + orc_program_add_parameter_int64 (p, 8, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 1, "t3"); + orc_program_add_temporary (p, 1, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + orc_program_add_temporary (p, 8, "t8"); + orc_program_add_temporary (p, 8, "t9"); + orc_program_add_temporary (p, 8, "t10"); + orc_program_add_temporary (p, 8, "t11"); + + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T9, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T10, ORC_VAR_P2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T11, ORC_VAR_P3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "subb", 2, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T4, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergebw", 2, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T9, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T10, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T4, ORC_VAR_T2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T11, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8, + ORC_VAR_D1); + orc_program_append_2 (p, "convssswb", 2, ORC_VAR_T6, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_C1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } + { + orc_union64 tmp; + tmp.i = p2; + ex->params[ORC_VAR_P2] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T2] = ((orc_uint64) tmp.i) >> 32; + } + { + orc_union64 tmp; + tmp.i = p3; + ex->params[ORC_VAR_P3] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T3] = ((orc_uint64) tmp.i) >> 32; + } + { + orc_union64 tmp; + tmp.i = p4; + ex->params[ORC_VAR_P4] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T4] = ((orc_uint64) tmp.i) >> 32; + } + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_near_u32_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: ldresnearl */ + var32 = ptr4[(p1 + i * p2) >> 16]; + /* 1: storel */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_resample_h_near_u32_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: ldresnearl */ + var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16]; + /* 1: storel */ + ptr0[i] = var32; + } + +} + +void +video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 110, 101, 97, 114, 95, 117, 51, 50, + 95, 108, 113, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 49, 0, 4, + 24, 25, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_near_u32_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_near_u32_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_near_u32_lq); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_parameter (p, 4, "p2"); + + orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_P1, ORC_VAR_P2); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_2tap_1u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinb */ + { + int tmp = p1 + i * p2; + var32 = + ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storeb */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_resample_h_2tap_1u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinb */ + { + int tmp = ex->params[24] + i * ex->params[25]; + var32 = + ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storeb */ + ptr0[i] = var32; + } + +} + +void +video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 49, 117, 56, + 95, 108, 113, 11, 1, 1, 12, 1, 1, 16, 4, 16, 4, 50, 0, 4, + 24, 25, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_1u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_2tap_1u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_1u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_parameter (p, 4, "p2"); + + orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_P1, ORC_VAR_P2); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_2tap_4u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinl */ + { + int tmp = p1 + i * p2; + orc_union32 a = ptr4[tmp >> 16]; + orc_union32 b = ptr4[(tmp >> 16) + 1]; + var32.x4[0] = + ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[1] = + ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[2] = + ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[3] = + ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storel */ + ptr0[i] = var32; + } + +} + +#else +static void +_backup_video_orc_resample_h_2tap_4u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: ldreslinl */ + { + int tmp = ex->params[24] + i * ex->params[25]; + orc_union32 a = ptr4[tmp >> 16]; + orc_union32 b = ptr4[(tmp >> 16) + 1]; + var32.x4[0] = + ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[1] = + ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[2] = + ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8; + var32.x4[3] = + ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) + + (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8; + } + /* 1: storel */ + ptr0[i] = var32; + } + +} + +void +video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int p1, int p2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 52, 117, 56, + 95, 108, 113, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 51, 0, 4, + 24, 25, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_4u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_2tap_4u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_4u8_lq); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_parameter (p, 4, "p2"); + + orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_P1, ORC_VAR_P2); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_2tap_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif + orc_int8 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + + /* 9: loadpw */ + var38.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var40.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr6[i]; + /* 3: mullw */ + var41.i = (var40.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var42.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr7[i]; + /* 7: mullw */ + var43.i = (var42.i * var37.i) & 0xffff; + /* 8: addw */ + var44.i = var41.i + var43.i; + /* 10: addw */ + var45.i = var44.i + var38.i; + /* 11: shrsw */ + var46.i = var45.i >> 6; + /* 12: convsuswb */ + var39 = ORC_CLAMP_UB (var46.i); + /* 13: storeb */ + ptr0[i] = var39; + } + +} + +#else +static void +_backup_video_orc_resample_h_2tap_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif + orc_int8 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + + /* 9: loadpw */ + var38.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var40.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr6[i]; + /* 3: mullw */ + var41.i = (var40.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var42.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr7[i]; + /* 7: mullw */ + var43.i = (var42.i * var37.i) & 0xffff; + /* 8: addw */ + var44.i = var41.i + var43.i; + /* 10: addw */ + var45.i = var44.i + var38.i; + /* 11: shrsw */ + var46.i = var45.i >> 6; + /* 12: convsuswb */ + var39 = ORC_CLAMP_UB (var46.i); + /* 13: storeb */ + ptr0[i] = var39; + } + +} + +void +video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 117, 56, 95, + 108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2, 12, 2, + 2, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 20, 2, 20, + 2, 150, 32, 4, 89, 32, 32, 6, 150, 33, 5, 89, 33, 33, 7, 70, + 32, 32, 33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_2tap_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_constant (p, 2, 0x00000020, "c1"); + orc_program_add_constant (p, 2, 0x00000006, "c2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_2tap_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif + orc_union16 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + ptr6 = (orc_union16 *) s3; + ptr7 = (orc_union16 *) s4; + + /* 11: loadpl */ + var40.i = (int) 0x00001000; /* 4096 or 2.02369e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr4[i]; + /* 1: convuwl */ + var42.i = (orc_uint16) var36.i; + /* 2: loadw */ + var37 = ptr6[i]; + /* 3: convswl */ + var43.i = var37.i; + /* 4: mulll */ + var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff; + /* 5: loadw */ + var38 = ptr5[i]; + /* 6: convuwl */ + var45.i = (orc_uint16) var38.i; + /* 7: loadw */ + var39 = ptr7[i]; + /* 8: convswl */ + var46.i = var39.i; + /* 9: mulll */ + var47.i = (((orc_uint32) var45.i) * ((orc_uint32) var46.i)) & 0xffffffff; + /* 10: addl */ + var48.i = ((orc_uint32) var44.i) + ((orc_uint32) var47.i); + /* 12: addl */ + var49.i = ((orc_uint32) var48.i) + ((orc_uint32) var40.i); + /* 13: shrsl */ + var50.i = var49.i >> 12; + /* 14: convsuslw */ + var41.i = ORC_CLAMP_UW (var50.i); + /* 15: storew */ + ptr0[i] = var41; + } + +} + +#else +static void +_backup_video_orc_resample_h_2tap_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + const orc_union16 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif + orc_union16 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + ptr6 = (orc_union16 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + + /* 11: loadpl */ + var40.i = (int) 0x00001000; /* 4096 or 2.02369e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var36 = ptr4[i]; + /* 1: convuwl */ + var42.i = (orc_uint16) var36.i; + /* 2: loadw */ + var37 = ptr6[i]; + /* 3: convswl */ + var43.i = var37.i; + /* 4: mulll */ + var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff; + /* 5: loadw */ + var38 = ptr5[i]; + /* 6: convuwl */ + var45.i = (orc_uint16) var38.i; + /* 7: loadw */ + var39 = ptr7[i]; + /* 8: convswl */ + var46.i = var39.i; + /* 9: mulll */ + var47.i = (((orc_uint32) var45.i) * ((orc_uint32) var46.i)) & 0xffffffff; + /* 10: addl */ + var48.i = ((orc_uint32) var44.i) + ((orc_uint32) var47.i); + /* 12: addl */ + var49.i = ((orc_uint32) var48.i) + ((orc_uint32) var40.i); + /* 13: shrsl */ + var50.i = var49.i >> 12; + /* 14: convsuslw */ + var41.i = ORC_CLAMP_UW (var50.i); + /* 15: storew */ + ptr0[i] = var41; + } + +} + +void +video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 117, 49, 54, + 11, 2, 2, 12, 2, 2, 12, 2, 2, 12, 2, 2, 12, 2, 2, 14, + 4, 0, 16, 0, 0, 14, 4, 12, 0, 0, 0, 20, 4, 20, 4, 20, + 4, 20, 4, 154, 32, 4, 153, 34, 6, 120, 32, 32, 34, 154, 33, 5, + 153, 35, 7, 120, 33, 33, 35, 103, 32, 32, 33, 103, 32, 32, 16, 125, + 32, 32, 17, 166, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_2tap_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_2tap_u16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_source (p, 2, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_constant (p, 4, 0x00001000, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convswl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convswl", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_2tap_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif + orc_int8 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_int8 var46; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + + /* 5: loadpw */ + var37.i = p1; + /* 7: loadpw */ + var38.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var35 = ptr4[i]; + /* 1: convubw */ + var41.i = (orc_uint8) var35; + /* 2: loadb */ + var36 = ptr5[i]; + /* 3: convubw */ + var42.i = (orc_uint8) var36; + /* 4: subw */ + var43.i = var42.i - var41.i; + /* 6: mullw */ + var44.i = (var43.i * var37.i) & 0xffff; + /* 8: addw */ + var45.i = var44.i + var38.i; + /* 9: convhwb */ + var46 = ((orc_uint16) var45.i) >> 8; + /* 10: loadb */ + var39 = ptr4[i]; + /* 11: addb */ + var40 = var46 + var39; + /* 12: storeb */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_resample_v_2tap_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var35; + orc_int8 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif + orc_int8 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_int8 var46; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + + /* 5: loadpw */ + var37.i = ex->params[24]; + /* 7: loadpw */ + var38.i = (int) 0x00000080; /* 128 or 6.32404e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var35 = ptr4[i]; + /* 1: convubw */ + var41.i = (orc_uint8) var35; + /* 2: loadb */ + var36 = ptr5[i]; + /* 3: convubw */ + var42.i = (orc_uint8) var36; + /* 4: subw */ + var43.i = var42.i - var41.i; + /* 6: mullw */ + var44.i = (var43.i * var37.i) & 0xffff; + /* 8: addw */ + var45.i = var44.i + var38.i; + /* 9: convhwb */ + var46 = ((orc_uint16) var45.i) >> 8; + /* 10: loadb */ + var39 = ptr4[i]; + /* 11: addb */ + var40 = var46 + var39; + /* 12: storeb */ + ptr0[i] = var40; + } + +} + +void +video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 56, 95, + 108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 14, 2, 128, 0, 0, + 0, 16, 2, 20, 1, 20, 2, 20, 2, 150, 33, 4, 150, 34, 5, 98, + 34, 34, 33, 89, 34, 34, 24, 70, 34, 34, 16, 158, 32, 34, 33, 0, + 32, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_2tap_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_2tap_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_2tap_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_constant (p, 2, 0x00000080, "c1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "subw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_2tap_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1, + int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif + orc_union16 var39; + orc_union32 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + + /* 5: loadpw */ + var37.i = p1; + /* 8: loadpl */ + var38.i = (int) 0x00001000; /* 4096 or 2.02369e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var35 = ptr4[i]; + /* 1: convuwl */ + var40.i = (orc_uint16) var35.i; + /* 2: loadw */ + var36 = ptr5[i]; + /* 3: convuwl */ + var41.i = (orc_uint16) var36.i; + /* 4: subl */ + var42.i = ((orc_uint32) var41.i) - ((orc_uint32) var40.i); + /* 6: convuwl */ + var43.i = (orc_uint16) var37.i; + /* 7: mulll */ + var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff; + /* 9: addl */ + var45.i = ((orc_uint32) var44.i) + ((orc_uint32) var38.i); + /* 10: shrsl */ + var46.i = var45.i >> 12; + /* 11: addl */ + var47.i = ((orc_uint32) var40.i) + ((orc_uint32) var46.i); + /* 12: convsuslw */ + var39.i = ORC_CLAMP_UW (var47.i); + /* 13: storew */ + ptr0[i] = var39; + } + +} + +#else +static void +_backup_video_orc_resample_v_2tap_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif + orc_union16 var39; + orc_union32 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + + /* 5: loadpw */ + var37.i = ex->params[24]; + /* 8: loadpl */ + var38.i = (int) 0x00001000; /* 4096 or 2.02369e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var35 = ptr4[i]; + /* 1: convuwl */ + var40.i = (orc_uint16) var35.i; + /* 2: loadw */ + var36 = ptr5[i]; + /* 3: convuwl */ + var41.i = (orc_uint16) var36.i; + /* 4: subl */ + var42.i = ((orc_uint32) var41.i) - ((orc_uint32) var40.i); + /* 6: convuwl */ + var43.i = (orc_uint16) var37.i; + /* 7: mulll */ + var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff; + /* 9: addl */ + var45.i = ((orc_uint32) var44.i) + ((orc_uint32) var38.i); + /* 10: shrsl */ + var46.i = var45.i >> 12; + /* 11: addl */ + var47.i = ((orc_uint32) var40.i) + ((orc_uint32) var46.i); + /* 12: convsuslw */ + var39.i = ORC_CLAMP_UW (var47.i); + /* 13: storew */ + ptr0[i] = var39; + } + +} + +void +video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 49, 54, + 11, 2, 2, 12, 2, 2, 12, 2, 2, 14, 4, 0, 16, 0, 0, 14, + 4, 12, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 4, 154, 32, 4, + 154, 33, 5, 129, 33, 33, 32, 154, 34, 24, 120, 33, 33, 34, 103, 33, + 33, 16, 125, 33, 33, 17, 103, 32, 32, 33, 166, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_2tap_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_2tap_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_2tap_u16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_constant (p, 4, 0x00001000, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_2tap_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif + orc_int8 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union16 var48; + orc_union16 var49; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + + /* 5: loadpw */ + var39.i = p1; + /* 7: loadpl */ + var40.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var37 = ptr4[i]; + /* 1: convubw */ + var42.i = (orc_uint8) var37; + /* 2: loadb */ + var38 = ptr5[i]; + /* 3: convubw */ + var43.i = (orc_uint8) var38; + /* 4: subw */ + var44.i = var43.i - var42.i; + /* 6: mulswl */ + var45.i = var44.i * var39.i; + /* 8: addl */ + var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var40.i); + /* 9: shrsl */ + var47.i = var46.i >> 12; + /* 10: convlw */ + var48.i = var47.i; + /* 11: addw */ + var49.i = var48.i + var42.i; + /* 12: convsuswb */ + var41 = ORC_CLAMP_UB (var49.i); + /* 13: storeb */ + ptr0[i] = var41; + } + +} + +#else +static void +_backup_video_orc_resample_v_2tap_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + orc_int8 var37; + orc_int8 var38; + orc_union16 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif + orc_int8 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union16 var48; + orc_union16 var49; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + + /* 5: loadpw */ + var39.i = ex->params[24]; + /* 7: loadpl */ + var40.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var37 = ptr4[i]; + /* 1: convubw */ + var42.i = (orc_uint8) var37; + /* 2: loadb */ + var38 = ptr5[i]; + /* 3: convubw */ + var43.i = (orc_uint8) var38; + /* 4: subw */ + var44.i = var43.i - var42.i; + /* 6: mulswl */ + var45.i = var44.i * var39.i; + /* 8: addl */ + var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var40.i); + /* 9: shrsl */ + var47.i = var46.i >> 12; + /* 10: convlw */ + var48.i = var47.i; + /* 11: addw */ + var49.i = var48.i + var42.i; + /* 12: convsuswb */ + var41 = ORC_CLAMP_UB (var49.i); + /* 13: storeb */ + ptr0[i] = var41; + } + +} + +void +video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 56, 11, + 1, 1, 12, 1, 1, 12, 1, 1, 14, 4, 255, 15, 0, 0, 14, 4, + 12, 0, 0, 0, 16, 2, 20, 1, 20, 2, 20, 2, 20, 4, 20, 4, + 150, 33, 4, 150, 34, 5, 98, 34, 34, 33, 176, 36, 34, 24, 103, 36, + 36, 16, 125, 36, 36, 17, 163, 34, 36, 70, 34, 34, 33, 160, 0, 34, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_resample_v_2tap_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_2tap_u8"); + orc_program_set_backup_function (p, _backup_video_orc_resample_v_2tap_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_constant (p, 4, 0x00000fff, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 1, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "subw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_4tap_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_int8 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union16 var55; + orc_union16 var56; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + /* 2: loadpw */ + var35.i = p1; + /* 6: loadpw */ + var37.i = p2; + /* 11: loadpw */ + var39.i = p3; + /* 16: loadpw */ + var41.i = p4; + /* 19: loadpw */ + var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var44.i = (orc_uint8) var34; + /* 3: mullw */ + var45.i = (var44.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var46.i = (orc_uint8) var36; + /* 7: mullw */ + var47.i = (var46.i * var37.i) & 0xffff; + /* 8: addw */ + var48.i = var45.i + var47.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var49.i = (orc_uint8) var38; + /* 12: mullw */ + var50.i = (var49.i * var39.i) & 0xffff; + /* 13: addw */ + var51.i = var48.i + var50.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var52.i = (orc_uint8) var40; + /* 17: mullw */ + var53.i = (var52.i * var41.i) & 0xffff; + /* 18: addw */ + var54.i = var51.i + var53.i; + /* 20: addw */ + var55.i = var54.i + var42.i; + /* 21: shrsw */ + var56.i = var55.i >> 6; + /* 22: convsuswb */ + var43 = ORC_CLAMP_UB (var56.i); + /* 23: storeb */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_resample_v_4tap_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_int8 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union16 var55; + orc_union16 var56; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + /* 6: loadpw */ + var37.i = ex->params[25]; + /* 11: loadpw */ + var39.i = ex->params[26]; + /* 16: loadpw */ + var41.i = ex->params[27]; + /* 19: loadpw */ + var42.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var44.i = (orc_uint8) var34; + /* 3: mullw */ + var45.i = (var44.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var46.i = (orc_uint8) var36; + /* 7: mullw */ + var47.i = (var46.i * var37.i) & 0xffff; + /* 8: addw */ + var48.i = var45.i + var47.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var49.i = (orc_uint8) var38; + /* 12: mullw */ + var50.i = (var49.i * var39.i) & 0xffff; + /* 13: addw */ + var51.i = var48.i + var50.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var52.i = (orc_uint8) var40; + /* 17: mullw */ + var53.i = (var52.i * var41.i) & 0xffff; + /* 18: addw */ + var54.i = var51.i + var53.i; + /* 20: addw */ + var55.i = var54.i + var42.i; + /* 21: shrsw */ + var56.i = var55.i >> 6; + /* 22: convsuswb */ + var43 = ORC_CLAMP_UB (var56.i); + /* 23: storeb */ + ptr0[i] = var43; + } + +} + +void +video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 52, 116, 97, 112, 95, 117, 56, 95, + 108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, + 1, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 16, 2, 16, + 2, 16, 2, 16, 2, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24, + 150, 33, 5, 89, 33, 33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33, + 33, 26, 70, 32, 32, 33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32, + 33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_4tap_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_4tap_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_4tap_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_constant (p, 2, 0x00000020, "c1"); + orc_program_add_constant (p, 2, 0x00000006, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_4tap_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_int8 var42; + orc_union16 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_int8 var45; + orc_union16 var46; + orc_union32 var47; + orc_union16 var48; + orc_union32 var49; + orc_union32 var50; + orc_union16 var51; + orc_union32 var52; + orc_union32 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union16 var59; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + /* 2: loadpw */ + var37.i = p1; + /* 6: loadpw */ + var39.i = p2; + /* 11: loadpw */ + var41.i = p3; + /* 16: loadpw */ + var43.i = p4; + /* 19: loadpl */ + var44.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var36 = ptr4[i]; + /* 1: convubw */ + var46.i = (orc_uint8) var36; + /* 3: mulswl */ + var47.i = var46.i * var37.i; + /* 4: loadb */ + var38 = ptr5[i]; + /* 5: convubw */ + var48.i = (orc_uint8) var38; + /* 7: mulswl */ + var49.i = var48.i * var39.i; + /* 8: addl */ + var50.i = ((orc_uint32) var47.i) + ((orc_uint32) var49.i); + /* 9: loadb */ + var40 = ptr6[i]; + /* 10: convubw */ + var51.i = (orc_uint8) var40; + /* 12: mulswl */ + var52.i = var51.i * var41.i; + /* 13: addl */ + var53.i = ((orc_uint32) var50.i) + ((orc_uint32) var52.i); + /* 14: loadb */ + var42 = ptr7[i]; + /* 15: convubw */ + var54.i = (orc_uint8) var42; + /* 17: mulswl */ + var55.i = var54.i * var43.i; + /* 18: addl */ + var56.i = ((orc_uint32) var53.i) + ((orc_uint32) var55.i); + /* 20: addl */ + var57.i = ((orc_uint32) var56.i) + ((orc_uint32) var44.i); + /* 21: shrsl */ + var58.i = var57.i >> 12; + /* 22: convsuslw */ + var59.i = ORC_CLAMP_UW (var58.i); + /* 23: convsuswb */ + var45 = ORC_CLAMP_UB (var59.i); + /* 24: storeb */ + ptr0[i] = var45; + } + +} + +#else +static void +_backup_video_orc_resample_v_4tap_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_int8 var42; + orc_union16 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_int8 var45; + orc_union16 var46; + orc_union32 var47; + orc_union16 var48; + orc_union32 var49; + orc_union32 var50; + orc_union16 var51; + orc_union32 var52; + orc_union32 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union16 var59; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + /* 2: loadpw */ + var37.i = ex->params[24]; + /* 6: loadpw */ + var39.i = ex->params[25]; + /* 11: loadpw */ + var41.i = ex->params[26]; + /* 16: loadpw */ + var43.i = ex->params[27]; + /* 19: loadpl */ + var44.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var36 = ptr4[i]; + /* 1: convubw */ + var46.i = (orc_uint8) var36; + /* 3: mulswl */ + var47.i = var46.i * var37.i; + /* 4: loadb */ + var38 = ptr5[i]; + /* 5: convubw */ + var48.i = (orc_uint8) var38; + /* 7: mulswl */ + var49.i = var48.i * var39.i; + /* 8: addl */ + var50.i = ((orc_uint32) var47.i) + ((orc_uint32) var49.i); + /* 9: loadb */ + var40 = ptr6[i]; + /* 10: convubw */ + var51.i = (orc_uint8) var40; + /* 12: mulswl */ + var52.i = var51.i * var41.i; + /* 13: addl */ + var53.i = ((orc_uint32) var50.i) + ((orc_uint32) var52.i); + /* 14: loadb */ + var42 = ptr7[i]; + /* 15: convubw */ + var54.i = (orc_uint8) var42; + /* 17: mulswl */ + var55.i = var54.i * var43.i; + /* 18: addl */ + var56.i = ((orc_uint32) var53.i) + ((orc_uint32) var55.i); + /* 20: addl */ + var57.i = ((orc_uint32) var56.i) + ((orc_uint32) var44.i); + /* 21: shrsl */ + var58.i = var57.i >> 12; + /* 22: convsuslw */ + var59.i = ORC_CLAMP_UW (var58.i); + /* 23: convsuswb */ + var45 = ORC_CLAMP_UB (var59.i); + /* 24: storeb */ + ptr0[i] = var45; + } + +} + +void +video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 52, 116, 97, 112, 95, 117, 56, 11, + 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 4, + 255, 15, 0, 0, 14, 4, 12, 0, 0, 0, 16, 2, 16, 2, 16, 2, + 16, 2, 20, 2, 20, 2, 20, 4, 20, 4, 150, 32, 4, 176, 34, 32, + 24, 150, 33, 5, 176, 35, 33, 25, 103, 34, 34, 35, 150, 33, 6, 176, + 35, 33, 26, 103, 34, 34, 35, 150, 33, 7, 176, 35, 33, 27, 103, 34, + 34, 35, 103, 34, 34, 16, 125, 34, 34, 17, 166, 32, 34, 160, 0, 32, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_resample_v_4tap_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_4tap_u8"); + orc_program_set_backup_function (p, _backup_video_orc_resample_v_4tap_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_constant (p, 4, 0x00000fff, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_multaps_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union32 var35; + orc_union16 var36; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_union16 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mulswl */ + var35.i = var36.i * var34.i; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_h_multaps_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union32 var35; + orc_union16 var36; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mulswl */ + var35.i = var36.i * var34.i; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 56, 11, 4, 4, 12, 1, 1, 12, 2, 2, 20, 2, 150, 32, 4, + 176, 0, 32, 5, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_multaps_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_muladdtaps_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union32 var39; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var38.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: mulswl */ + var39.i = var38.i * var35.i; + /* 4: loadl */ + var36 = ptr0[i]; + /* 5: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i); + /* 6: storel */ + ptr0[i] = var37; + } + } + +} + +#else +static void +_backup_video_orc_resample_h_muladdtaps_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union32 var39; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var38.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: mulswl */ + var39.i = var38.i * var35.i; + /* 4: loadl */ + var36 = ptr0[i]; + /* 5: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i); + /* 6: storel */ + ptr0[i] = var37; + } + } + +} + +void +video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, + 115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, + 116, + 97, 112, 115, 95, 117, 56, 11, 4, 4, 12, 1, 1, 12, 2, 2, 20, + 2, 20, 4, 150, 32, 4, 176, 33, 32, 5, 103, 0, 0, 33, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u8); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_scaletaps_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var34; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var35; +#else + orc_union32 var35; +#endif + orc_int8 var36; + orc_union32 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var35.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var34 = ptr4[i]; + /* 2: addl */ + var37.i = ((orc_uint32) var34.i) + ((orc_uint32) var35.i); + /* 3: shrsl */ + var38.i = var37.i >> 12; + /* 4: convsuslw */ + var39.i = ORC_CLAMP_UW (var38.i); + /* 5: convsuswb */ + var36 = ORC_CLAMP_UB (var39.i); + /* 6: storeb */ + ptr0[i] = var36; + } + +} + +#else +static void +_backup_video_orc_resample_scaletaps_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var34; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var35; +#else + orc_union32 var35; +#endif + orc_int8 var36; + orc_union32 var37; + orc_union32 var38; + orc_union16 var39; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var35.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var34 = ptr4[i]; + /* 2: addl */ + var37.i = ((orc_uint32) var34.i) + ((orc_uint32) var35.i); + /* 3: shrsl */ + var38.i = var37.i >> 12; + /* 4: convsuslw */ + var39.i = ORC_CLAMP_UW (var38.i); + /* 5: convsuswb */ + var36 = ORC_CLAMP_UB (var39.i); + /* 6: storeb */ + ptr0[i] = var36; + } + +} + +void +video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115, + 95, + 117, 56, 11, 1, 1, 12, 4, 4, 14, 4, 255, 15, 0, 0, 14, 4, + 12, 0, 0, 0, 20, 2, 20, 4, 103, 33, 4, 16, 125, 33, 33, 17, + 166, 32, 33, 160, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_scaletaps_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00000fff, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_multaps_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_union16 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mullw */ + var35.i = (var36.i * var34.i) & 0xffff; + /* 4: storew */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_h_multaps_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mullw */ + var35.i = (var36.i * var34.i) & 0xffff; + /* 4: storew */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 2, 2, 20, 2, + 150, 32, 4, 89, 0, 32, 5, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_multaps_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_muladdtaps_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var37.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mullw */ + var38.i = (var37.i * var34.i) & 0xffff; + /* 4: loadw */ + var35 = ptr0[i]; + /* 5: addw */ + var36.i = var35.i + var38.i; + /* 6: storew */ + ptr0[i] = var36; + } + } + +} + +#else +static void +_backup_video_orc_resample_h_muladdtaps_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var37.i = (orc_uint8) var33; + /* 2: loadw */ + var34 = ptr5[i]; + /* 3: mullw */ + var38.i = (var37.i * var34.i) & 0xffff; + /* 4: loadw */ + var35 = ptr0[i]; + /* 5: addw */ + var36.i = var35.i + var38.i; + /* 6: storew */ + ptr0[i] = var36; + } + } + +} + +void +video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride, + const guint8 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 37, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, + 115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, + 116, + 97, 112, 115, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, + 2, 2, 20, 2, 150, 32, 4, 89, 32, 32, 5, 70, 0, 0, 32, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u8_lq); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_multaps3_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var41.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var42.i = (var41.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var43.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var44.i = (var43.i * var37.i) & 0xffff; + /* 8: addw */ + var45.i = var42.i + var44.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var46.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var47.i = (var46.i * var39.i) & 0xffff; + /* 13: addw */ + var40.i = var45.i + var47.i; + /* 14: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_resample_h_multaps3_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var41.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var42.i = (var41.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var43.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var44.i = (var43.i * var37.i) & 0xffff; + /* 8: addw */ + var45.i = var42.i + var44.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var46.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var47.i = (var46.i * var39.i) & 0xffff; + /* 13: addw */ + var40.i = var45.i + var47.i; + /* 14: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115, + 51, + 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 1, 1, 12, + 1, 1, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 2, 150, + 32, 4, 89, 32, 32, 7, 150, 33, 5, 89, 33, 33, 8, 70, 32, 32, + 33, 150, 33, 6, 89, 33, 33, 9, 70, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps3_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_multaps3_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps3_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_muladdtaps3_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var42.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var43.i = (var42.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var44.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var45.i = (var44.i * var37.i) & 0xffff; + /* 8: addw */ + var46.i = var43.i + var45.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var47.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var48.i = (var47.i * var39.i) & 0xffff; + /* 13: addw */ + var49.i = var46.i + var48.i; + /* 14: loadw */ + var40 = ptr0[i]; + /* 15: addw */ + var41.i = var40.i + var49.i; + /* 16: storew */ + ptr0[i] = var41; + } + +} + +#else +static void +_backup_video_orc_resample_h_muladdtaps3_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var42.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var43.i = (var42.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var44.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var45.i = (var44.i * var37.i) & 0xffff; + /* 8: addw */ + var46.i = var43.i + var45.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var47.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var48.i = (var47.i * var39.i) & 0xffff; + /* 13: addw */ + var49.i = var46.i + var48.i; + /* 14: loadw */ + var40 = ptr0[i]; + /* 15: addw */ + var41.i = var40.i + var49.i; + /* 16: storew */ + ptr0[i] = var41; + } + +} + +void +video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 38, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, 116, + 97, + 112, 115, 51, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, + 1, 1, 12, 1, 1, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, + 20, 2, 150, 32, 4, 89, 32, 32, 7, 150, 33, 5, 89, 33, 33, 8, + 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 9, 70, 32, 32, 33, 70, + 0, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps3_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_muladdtaps3_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps3_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_muladdscaletaps3_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, + const gint16 * ORC_RESTRICT s7, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + const orc_union16 *ORC_RESTRICT ptr10; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_int8 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_union16 *) s4; + ptr8 = (orc_union16 *) s5; + ptr9 = (orc_union16 *) s6; + ptr10 = (orc_union16 *) s7; + + /* 16: loadpw */ + var41.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var43.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var44.i = (var43.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var45.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var46.i = (var45.i * var37.i) & 0xffff; + /* 8: addw */ + var47.i = var44.i + var46.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var48.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var49.i = (var48.i * var39.i) & 0xffff; + /* 13: addw */ + var50.i = var47.i + var49.i; + /* 14: loadw */ + var40 = ptr10[i]; + /* 15: addw */ + var51.i = var50.i + var40.i; + /* 17: addw */ + var52.i = var51.i + var41.i; + /* 18: shrsw */ + var53.i = var52.i >> 6; + /* 19: convsuswb */ + var42 = ORC_CLAMP_UB (var53.i); + /* 20: storeb */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_resample_h_muladdscaletaps3_u8_lq (OrcExecutor * + ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_union16 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + const orc_union16 *ORC_RESTRICT ptr9; + const orc_union16 *ORC_RESTRICT ptr10; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_union16 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_int8 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_union16 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + ptr9 = (orc_union16 *) ex->arrays[9]; + ptr10 = (orc_union16 *) ex->arrays[10]; + + /* 16: loadpw */ + var41.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var43.i = (orc_uint8) var34; + /* 2: loadw */ + var35 = ptr7[i]; + /* 3: mullw */ + var44.i = (var43.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var45.i = (orc_uint8) var36; + /* 6: loadw */ + var37 = ptr8[i]; + /* 7: mullw */ + var46.i = (var45.i * var37.i) & 0xffff; + /* 8: addw */ + var47.i = var44.i + var46.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var48.i = (orc_uint8) var38; + /* 11: loadw */ + var39 = ptr9[i]; + /* 12: mullw */ + var49.i = (var48.i * var39.i) & 0xffff; + /* 13: addw */ + var50.i = var47.i + var49.i; + /* 14: loadw */ + var40 = ptr10[i]; + /* 15: addw */ + var51.i = var50.i + var40.i; + /* 17: addw */ + var52.i = var51.i + var41.i; + /* 18: shrsw */ + var53.i = var52.i >> 6; + /* 19: convsuswb */ + var42 = ORC_CLAMP_UB (var53.i); + /* 20: storeb */ + ptr0[i] = var42; + } + +} + +void +video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, + const gint16 * ORC_RESTRICT s7, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 43, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, 115, + 99, + 97, 108, 101, 116, 97, 112, 115, 51, 95, 117, 56, 95, 108, 113, 11, 1, + 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2, 12, 2, 2, + 12, 2, 2, 12, 2, 2, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, + 0, 0, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 7, 150, 33, 5, + 89, 33, 33, 8, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 9, 70, + 32, 32, 33, 70, 32, 32, 10, 70, 32, 32, 16, 94, 32, 32, 17, 160, + 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdscaletaps3_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_muladdscaletaps3_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdscaletaps3_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 2, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_source (p, 2, "s6"); + orc_program_add_source (p, 2, "s7"); + orc_program_add_constant (p, 2, 0x00000020, "c1"); + orc_program_add_constant (p, 2, 0x00000006, "c2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S7, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + ex->arrays[ORC_VAR_S7] = (void *) s7; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_scaletaps_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1, + const gint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var33; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var34; +#else + orc_union16 var34; +#endif + orc_int8 var35; + orc_union16 var36; + orc_union16 var37; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var34.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var33 = ptr4[i]; + /* 2: addw */ + var36.i = var33.i + var34.i; + /* 3: shrsw */ + var37.i = var36.i >> 6; + /* 4: convsuswb */ + var35 = ORC_CLAMP_UB (var37.i); + /* 5: storeb */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_scaletaps_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var33; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var34; +#else + orc_union16 var34; +#endif + orc_int8 var35; + orc_union16 var36; + orc_union16 var37; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var34.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var33 = ptr4[i]; + /* 2: addw */ + var36.i = var33.i + var34.i; + /* 3: shrsw */ + var37.i = var36.i >> 6; + /* 4: convsuswb */ + var35 = ORC_CLAMP_UB (var37.i); + /* 5: storeb */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1, + const gint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115, + 95, + 117, 56, 95, 108, 113, 11, 1, 1, 12, 2, 2, 14, 2, 32, 0, 0, + 0, 14, 2, 6, 0, 0, 0, 20, 2, 70, 32, 4, 16, 94, 32, 32, + 17, 160, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_scaletaps_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00000020, "c1"); + orc_program_add_constant (p, 2, 0x00000006, "c2"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_multaps_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + ptr5 = (orc_union16 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var37.i = (orc_uint16) var34.i; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: convswl */ + var38.i = var35.i; + /* 4: mulll */ + var36.i = (((orc_uint32) var37.i) * ((orc_uint32) var38.i)) & 0xffffffff; + /* 5: storel */ + ptr0[i] = var36; + } + +} + +#else +static void +_backup_video_orc_resample_h_multaps_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + ptr5 = (orc_union16 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var37.i = (orc_uint16) var34.i; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: convswl */ + var38.i = var35.i; + /* 4: mulll */ + var36.i = (((orc_uint32) var37.i) * ((orc_uint32) var38.i)) & 0xffffffff; + /* 5: storel */ + ptr0[i] = var36; + } + +} + +void +video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 49, 54, 11, 4, 4, 12, 2, 2, 12, 2, 2, 20, 4, 20, 4, + 154, 32, 4, 153, 33, 5, 120, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_h_multaps_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_multaps_u16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_h_muladdtaps_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride, + const guint16 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + int i; + int j; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j); + ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j); + ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var38.i = (orc_uint16) var34.i; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: convswl */ + var39.i = var35.i; + /* 4: mulll */ + var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff; + /* 5: loadl */ + var36 = ptr0[i]; + /* 6: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i); + /* 7: storel */ + ptr0[i] = var37; + } + } + +} + +#else +static void +_backup_video_orc_resample_h_muladdtaps_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int j; + int n = ex->n; + int m = ex->params[ORC_VAR_A1]; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + const orc_union16 *ORC_RESTRICT ptr5; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + + for (j = 0; j < m; j++) { + ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j); + ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j); + ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j); + + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var38.i = (orc_uint16) var34.i; + /* 2: loadw */ + var35 = ptr5[i]; + /* 3: convswl */ + var39.i = var35.i; + /* 4: mulll */ + var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff; + /* 5: loadl */ + var36 = ptr0[i]; + /* 6: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i); + /* 7: storel */ + ptr0[i] = var37; + } + } + +} + +void +video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride, + const guint16 * ORC_RESTRICT s1, int s1_stride, + const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, + 115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, + 116, + 97, 112, 115, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 12, 2, 2, + 20, 4, 20, 4, 154, 32, 4, 153, 33, 5, 120, 32, 32, 33, 103, 0, + 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u16); +#else + p = orc_program_new (); + orc_program_set_2d (p); + orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_h_muladdtaps_u16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_source (p, 2, "s2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ORC_EXECUTOR_M (ex) = m; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_D1] = d1_stride; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_S1] = s1_stride; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_S2] = s2_stride; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_scaletaps_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var34; +#else + orc_union32 var34; +#endif + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var34.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 2: addl */ + var36.i = ((orc_uint32) var33.i) + ((orc_uint32) var34.i); + /* 3: shrsl */ + var37.i = var36.i >> 12; + /* 4: convsuslw */ + var35.i = ORC_CLAMP_UW (var37.i); + /* 5: storew */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_scaletaps_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var33; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var34; +#else + orc_union32 var34; +#endif + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var34.i = (int) 0x00000fff; /* 4095 or 2.0232e-320f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var33 = ptr4[i]; + /* 2: addl */ + var36.i = ((orc_uint32) var33.i) + ((orc_uint32) var34.i); + /* 3: shrsl */ + var37.i = var36.i >> 12; + /* 4: convsuslw */ + var35.i = ORC_CLAMP_UW (var37.i); + /* 5: storew */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1, + const gint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115, + 95, + 117, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 255, 15, 0, 0, 14, + 4, 12, 0, 0, 0, 20, 4, 103, 32, 4, 16, 125, 32, 32, 17, 166, + 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_scaletaps_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_scaletaps_u16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00000fff, "c1"); + orc_program_add_constant (p, 4, 0x0000000c, "c2"); + orc_program_add_temporary (p, 4, "t1"); + + orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_multaps_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union32 var35; + orc_union16 var36; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_int8 *) s1; + + /* 2: loadpw */ + var34.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 3: mulswl */ + var35.i = var36.i * var34.i; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_v_multaps_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union32 var35; + orc_union16 var36; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + /* 2: loadpw */ + var34.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 3: mulswl */ + var35.i = var36.i * var34.i; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 56, 11, 4, 4, 12, 1, 1, 16, 2, 20, 2, 150, 32, 4, 176, + 0, 32, 24, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_multaps_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_muladdtaps_u8 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union32 var39; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_int8 *) s1; + + /* 2: loadpw */ + var35.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var38.i = (orc_uint8) var34; + /* 3: mulswl */ + var39.i = var38.i * var35.i; + /* 4: loadl */ + var36 = ptr0[i]; + /* 5: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i); + /* 6: storel */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_resample_v_muladdtaps_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union32 var39; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var38.i = (orc_uint8) var34; + /* 3: mulswl */ + var39.i = var38.i * var35.i; + /* 4: loadl */ + var36 = ptr0[i]; + /* 5: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i); + /* 6: storel */ + ptr0[i] = var37; + } + +} + +void +video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116, + 97, + 112, 115, 95, 117, 56, 11, 4, 4, 12, 1, 1, 16, 2, 20, 2, 20, + 4, 150, 32, 4, 176, 33, 32, 24, 103, 0, 0, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_multaps_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var33; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 2: loadpl */ + var34.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var33 = ptr4[i]; + /* 1: convuwl */ + var36.i = (orc_uint16) var33.i; + /* 3: mulll */ + var35.i = (((orc_uint32) var36.i) * ((orc_uint32) var34.i)) & 0xffffffff; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_v_multaps_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var33; + orc_union32 var34; + orc_union32 var35; + orc_union32 var36; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 2: loadpl */ + var34.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var33 = ptr4[i]; + /* 1: convuwl */ + var36.i = (orc_uint16) var33.i; + /* 3: mulll */ + var35.i = (((orc_uint32) var36.i) * ((orc_uint32) var34.i)) & 0xffffffff; + /* 4: storel */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 49, 54, 11, 4, 4, 12, 2, 2, 16, 2, 20, 4, 154, 32, 4, + 120, 0, 32, 24, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_multaps_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 4, "t1"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_muladdtaps_u16 */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 2: loadpw */ + var35.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var38.i = (orc_uint16) var34.i; + /* 3: convswl */ + var39.i = var35.i; + /* 4: mulll */ + var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff; + /* 5: loadl */ + var36 = ptr0[i]; + /* 6: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i); + /* 7: storel */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_resample_v_muladdtaps_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; + orc_union16 var34; + orc_union16 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var34 = ptr4[i]; + /* 1: convuwl */ + var38.i = (orc_uint16) var34.i; + /* 3: convswl */ + var39.i = var35.i; + /* 4: mulll */ + var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff; + /* 5: loadl */ + var36 = ptr0[i]; + /* 6: addl */ + var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i); + /* 7: storel */ + ptr0[i] = var37; + } + +} + +void +video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116, + 97, + 112, 115, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 16, 2, 20, 4, + 20, 4, 154, 32, 4, 153, 33, 24, 120, 32, 32, 33, 103, 0, 0, 32, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u16"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + + orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_multaps_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + + /* 2: loadpw */ + var34.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 3: mullw */ + var35.i = (var36.i * var34.i) & 0xffff; + /* 4: storew */ + ptr0[i] = var35; + } + +} + +#else +static void +_backup_video_orc_resample_v_multaps_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + /* 2: loadpw */ + var34.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var36.i = (orc_uint8) var33; + /* 3: mullw */ + var35.i = (var36.i * var34.i) & 0xffff; + /* 4: storew */ + ptr0[i] = var35; + } + +} + +void +video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115, + 95, + 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 16, 2, 20, 2, 150, + 32, 4, 89, 0, 32, 24, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_multaps_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_multaps4_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + /* 2: loadpw */ + var35.i = p1; + /* 6: loadpw */ + var37.i = p2; + /* 11: loadpw */ + var39.i = p3; + /* 16: loadpw */ + var41.i = p4; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var43.i = (orc_uint8) var34; + /* 3: mullw */ + var44.i = (var43.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var45.i = (orc_uint8) var36; + /* 7: mullw */ + var46.i = (var45.i * var37.i) & 0xffff; + /* 8: addw */ + var47.i = var44.i + var46.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var48.i = (orc_uint8) var38; + /* 12: mullw */ + var49.i = (var48.i * var39.i) & 0xffff; + /* 13: addw */ + var50.i = var47.i + var49.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var51.i = (orc_uint8) var40; + /* 17: mullw */ + var52.i = (var51.i * var41.i) & 0xffff; + /* 18: addw */ + var42.i = var50.i + var52.i; + /* 19: storew */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_resample_v_multaps4_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + /* 6: loadpw */ + var37.i = ex->params[25]; + /* 11: loadpw */ + var39.i = ex->params[26]; + /* 16: loadpw */ + var41.i = ex->params[27]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var43.i = (orc_uint8) var34; + /* 3: mullw */ + var44.i = (var43.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var45.i = (orc_uint8) var36; + /* 7: mullw */ + var46.i = (var45.i * var37.i) & 0xffff; + /* 8: addw */ + var47.i = var44.i + var46.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var48.i = (orc_uint8) var38; + /* 12: mullw */ + var49.i = (var48.i * var39.i) & 0xffff; + /* 13: addw */ + var50.i = var47.i + var49.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var51.i = (orc_uint8) var40; + /* 17: mullw */ + var52.i = (var51.i * var41.i) & 0xffff; + /* 18: addw */ + var42.i = var50.i + var52.i; + /* 19: storew */ + ptr0[i] = var42; + } + +} + +void +video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115, + 52, + 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 1, 1, 12, + 1, 1, 12, 1, 1, 16, 2, 16, 2, 16, 2, 16, 2, 20, 2, 20, + 2, 150, 32, 4, 89, 32, 32, 24, 150, 33, 5, 89, 33, 33, 25, 70, + 32, 32, 33, 150, 33, 6, 89, 33, 33, 26, 70, 32, 32, 33, 150, 33, + 7, 89, 33, 33, 27, 70, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps4_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_multaps4_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_multaps4_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_muladdtaps_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + + /* 2: loadpw */ + var34.i = p1; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var37.i = (orc_uint8) var33; + /* 3: mullw */ + var38.i = (var37.i * var34.i) & 0xffff; + /* 4: loadw */ + var35 = ptr0[i]; + /* 5: addw */ + var36.i = var35.i + var38.i; + /* 6: storew */ + ptr0[i] = var36; + } + +} + +#else +static void +_backup_video_orc_resample_v_muladdtaps_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var33; + orc_union16 var34; + orc_union16 var35; + orc_union16 var36; + orc_union16 var37; + orc_union16 var38; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + /* 2: loadpw */ + var34.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var33 = ptr4[i]; + /* 1: convubw */ + var37.i = (orc_uint8) var33; + /* 3: mullw */ + var38.i = (var37.i * var34.i) & 0xffff; + /* 4: loadw */ + var35 = ptr0[i]; + /* 5: addw */ + var36.i = var35.i + var38.i; + /* 6: storew */ + ptr0[i] = var36; + } + +} + +void +video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 37, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116, + 97, + 112, 115, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 16, 2, + 20, 2, 150, 32, 4, 89, 32, 32, 24, 70, 0, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_temporary (p, 2, "t1"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_muladdtaps4_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + + /* 2: loadpw */ + var35.i = p1; + /* 6: loadpw */ + var37.i = p2; + /* 11: loadpw */ + var39.i = p3; + /* 16: loadpw */ + var41.i = p4; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var44.i = (orc_uint8) var34; + /* 3: mullw */ + var45.i = (var44.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var46.i = (orc_uint8) var36; + /* 7: mullw */ + var47.i = (var46.i * var37.i) & 0xffff; + /* 8: addw */ + var48.i = var45.i + var47.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var49.i = (orc_uint8) var38; + /* 12: mullw */ + var50.i = (var49.i * var39.i) & 0xffff; + /* 13: addw */ + var51.i = var48.i + var50.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var52.i = (orc_uint8) var40; + /* 17: mullw */ + var53.i = (var52.i * var41.i) & 0xffff; + /* 18: addw */ + var54.i = var51.i + var53.i; + /* 19: loadw */ + var42 = ptr0[i]; + /* 20: addw */ + var43.i = var42.i + var54.i; + /* 21: storew */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_resample_v_muladdtaps4_u8_lq (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + /* 6: loadpw */ + var37.i = ex->params[25]; + /* 11: loadpw */ + var39.i = ex->params[26]; + /* 16: loadpw */ + var41.i = ex->params[27]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var44.i = (orc_uint8) var34; + /* 3: mullw */ + var45.i = (var44.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var46.i = (orc_uint8) var36; + /* 7: mullw */ + var47.i = (var46.i * var37.i) & 0xffff; + /* 8: addw */ + var48.i = var45.i + var47.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var49.i = (orc_uint8) var38; + /* 12: mullw */ + var50.i = (var49.i * var39.i) & 0xffff; + /* 13: addw */ + var51.i = var48.i + var50.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var52.i = (orc_uint8) var40; + /* 17: mullw */ + var53.i = (var52.i * var41.i) & 0xffff; + /* 18: addw */ + var54.i = var51.i + var53.i; + /* 19: loadw */ + var42 = ptr0[i]; + /* 20: addw */ + var43.i = var42.i + var54.i; + /* 21: storew */ + ptr0[i] = var43; + } + +} + +void +video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, + int p2, int p3, int p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 38, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116, + 97, + 112, 115, 52, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, + 1, 1, 12, 1, 1, 12, 1, 1, 16, 2, 16, 2, 16, 2, 16, 2, + 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24, 150, 33, 5, 89, 33, + 33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 26, 70, 32, 32, + 33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32, 33, 70, 0, 0, 32, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps4_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_muladdtaps4_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdtaps4_u8_lq); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_resample_v_muladdscaletaps4_u8_lq */ +#ifdef DISABLE_ORC +void +video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_int8 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union16 var55; + orc_union16 var56; + orc_union16 var57; + orc_union16 var58; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + ptr5 = (orc_int8 *) s2; + ptr6 = (orc_int8 *) s3; + ptr7 = (orc_int8 *) s4; + ptr8 = (orc_union16 *) s5; + + /* 2: loadpw */ + var35.i = p1; + /* 6: loadpw */ + var37.i = p2; + /* 11: loadpw */ + var39.i = p3; + /* 16: loadpw */ + var41.i = p4; + /* 21: loadpw */ + var43.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var45.i = (orc_uint8) var34; + /* 3: mullw */ + var46.i = (var45.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var47.i = (orc_uint8) var36; + /* 7: mullw */ + var48.i = (var47.i * var37.i) & 0xffff; + /* 8: addw */ + var49.i = var46.i + var48.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var50.i = (orc_uint8) var38; + /* 12: mullw */ + var51.i = (var50.i * var39.i) & 0xffff; + /* 13: addw */ + var52.i = var49.i + var51.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var53.i = (orc_uint8) var40; + /* 17: mullw */ + var54.i = (var53.i * var41.i) & 0xffff; + /* 18: addw */ + var55.i = var52.i + var54.i; + /* 19: loadw */ + var42 = ptr8[i]; + /* 20: addw */ + var56.i = var55.i + var42.i; + /* 22: addw */ + var57.i = var56.i + var43.i; + /* 23: shrsw */ + var58.i = var57.i >> 6; + /* 24: convsuswb */ + var44 = ORC_CLAMP_UB (var58.i); + /* 25: storeb */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_resample_v_muladdscaletaps4_u8_lq (OrcExecutor * + ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + const orc_int8 *ORC_RESTRICT ptr5; + const orc_int8 *ORC_RESTRICT ptr6; + const orc_int8 *ORC_RESTRICT ptr7; + const orc_union16 *ORC_RESTRICT ptr8; + orc_int8 var34; + orc_union16 var35; + orc_int8 var36; + orc_union16 var37; + orc_int8 var38; + orc_union16 var39; + orc_int8 var40; + orc_union16 var41; + orc_union16 var42; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_int8 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union16 var55; + orc_union16 var56; + orc_union16 var57; + orc_union16 var58; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + ptr5 = (orc_int8 *) ex->arrays[5]; + ptr6 = (orc_int8 *) ex->arrays[6]; + ptr7 = (orc_int8 *) ex->arrays[7]; + ptr8 = (orc_union16 *) ex->arrays[8]; + + /* 2: loadpw */ + var35.i = ex->params[24]; + /* 6: loadpw */ + var37.i = ex->params[25]; + /* 11: loadpw */ + var39.i = ex->params[26]; + /* 16: loadpw */ + var41.i = ex->params[27]; + /* 21: loadpw */ + var43.i = (int) 0x00000020; /* 32 or 1.58101e-322f */ + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var34 = ptr4[i]; + /* 1: convubw */ + var45.i = (orc_uint8) var34; + /* 3: mullw */ + var46.i = (var45.i * var35.i) & 0xffff; + /* 4: loadb */ + var36 = ptr5[i]; + /* 5: convubw */ + var47.i = (orc_uint8) var36; + /* 7: mullw */ + var48.i = (var47.i * var37.i) & 0xffff; + /* 8: addw */ + var49.i = var46.i + var48.i; + /* 9: loadb */ + var38 = ptr6[i]; + /* 10: convubw */ + var50.i = (orc_uint8) var38; + /* 12: mullw */ + var51.i = (var50.i * var39.i) & 0xffff; + /* 13: addw */ + var52.i = var49.i + var51.i; + /* 14: loadb */ + var40 = ptr7[i]; + /* 15: convubw */ + var53.i = (orc_uint8) var40; + /* 17: mullw */ + var54.i = (var53.i * var41.i) & 0xffff; + /* 18: addw */ + var55.i = var52.i + var54.i; + /* 19: loadw */ + var42 = ptr8[i]; + /* 20: addw */ + var56.i = var55.i + var42.i; + /* 22: addw */ + var57.i = var56.i + var43.i; + /* 23: shrsw */ + var58.i = var57.i >> 6; + /* 24: convsuswb */ + var44 = ORC_CLAMP_UB (var58.i); + /* 25: storeb */ + ptr0[i] = var44; + } + +} + +void +video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 43, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115, + 97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 115, + 99, + 97, 108, 101, 116, 97, 112, 115, 52, 95, 117, 56, 95, 108, 113, 11, 1, + 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2, + 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 16, 2, 16, 2, + 16, 2, 16, 2, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24, 150, + 33, 5, 89, 33, 33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, + 26, 70, 32, 32, 33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32, 33, + 70, 32, 32, 8, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdscaletaps4_u8_lq); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_resample_v_muladdscaletaps4_u8_lq"); + orc_program_set_backup_function (p, + _backup_video_orc_resample_v_muladdscaletaps4_u8_lq); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + orc_program_add_source (p, 1, "s2"); + orc_program_add_source (p, 1, "s3"); + orc_program_add_source (p, 1, "s4"); + orc_program_add_source (p, 2, "s5"); + orc_program_add_constant (p, 2, 0x00000020, "c1"); + orc_program_add_constant (p, 2, 0x00000006, "c2"); + orc_program_add_parameter (p, 2, "p1"); + orc_program_add_parameter (p, 2, "p2"); + orc_program_add_parameter (p, 2, "p3"); + orc_program_add_parameter (p, 2, "p4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->params[ORC_VAR_P1] = p1; + ex->params[ORC_VAR_P2] = p2; + ex->params[ORC_VAR_P3] = p3; + ex->params[ORC_VAR_P4] = p4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_down_h2_u8 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union64 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union64 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var37.i; + var39.i = _src.x2[1]; + var40.i = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: select1lw */ + { + orc_union32 _src; + _src.i = var39.i; + var43.i = _src.x2[1]; + } + /* 4: avgub */ + var44.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; + var44.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var44.i; + var45.i = _dest.i; + } + /* 6: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var45.i; + _dest.x2[1] = var39.i; + var38.i = _dest.i; + } + /* 7: storeq */ + ptr0[i] = var38; + } + +} + +#else +static void +_backup_video_orc_chroma_down_h2_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var37; + orc_union64 var38; + orc_union32 var39; + orc_union32 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union64 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var37.i; + var39.i = _src.x2[1]; + var40.i = _src.x2[0]; + } + /* 2: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var41.i = _src.x2[1]; + var42.i = _src.x2[0]; + } + /* 3: select1lw */ + { + orc_union32 _src; + _src.i = var39.i; + var43.i = _src.x2[1]; + } + /* 4: avgub */ + var44.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1; + var44.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var44.i; + var45.i = _dest.i; + } + /* 6: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var45.i; + _dest.x2[1] = var39.i; + var38.i = _dest.i; + } + /* 7: storeq */ + ptr0[i] = var38; + } + +} + +void +video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 100, 111, 119, 110, 95, 104, 50, 95, 117, 56, 11, 8, + 8, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 20, 2, 197, 33, + 32, 4, 198, 35, 34, 32, 191, 36, 33, 21, 1, 39, 35, 35, 36, 195, + 32, 34, 35, 194, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_h2_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_down_h2_u8"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_h2_u8); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T5, ORC_VAR_T2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_down_v2_u8 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var35.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: loadl */ + var36 = ptr5[i]; + /* 3: select1lw */ + { + orc_union32 _src; + _src.i = var36.i; + var40.i = _src.x2[1]; + } + /* 4: avgub */ + var41.x2[0] = ((orc_uint8) var38.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var41.x2[1] = ((orc_uint8) var38.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 6: storel */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_chroma_down_v2_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var35.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: loadl */ + var36 = ptr5[i]; + /* 3: select1lw */ + { + orc_union32 _src; + _src.i = var36.i; + var40.i = _src.x2[1]; + } + /* 4: avgub */ + var41.x2[0] = ((orc_uint8) var38.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1; + var41.x2[1] = ((orc_uint8) var38.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 6: storel */ + ptr0[i] = var37; + } + +} + +void +video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 50, 95, 117, 56, 11, 4, + 4, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 198, 33, 32, + 4, 191, 34, 5, 21, 1, 39, 33, 33, 34, 195, 0, 32, 33, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_down_v2_u8"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T3, ORC_VAR_S2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_up_v2_u8 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var39; + orc_union32 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union32 var59; + orc_union16 var60; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + /* 6: loadpw */ + var41.x2[0] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + var41.x2[1] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + /* 9: loadpw */ + var42.x2[0] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + var42.x2[1] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var39 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 2: loadl */ + var40 = ptr5[i]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var47.i = _src.x2[1]; + var48.i = _src.x2[0]; + } + /* 4: convubw */ + var49.x2[0] = (orc_uint8) var45.x2[0]; + var49.x2[1] = (orc_uint8) var45.x2[1]; + /* 5: convubw */ + var50.x2[0] = (orc_uint8) var47.x2[0]; + var50.x2[1] = (orc_uint8) var47.x2[1]; + /* 7: mullw */ + var51.x2[0] = (var49.x2[0] * var41.x2[0]) & 0xffff; + var51.x2[1] = (var49.x2[1] * var41.x2[1]) & 0xffff; + /* 8: addw */ + var52.x2[0] = var51.x2[0] + var50.x2[0]; + var52.x2[1] = var51.x2[1] + var50.x2[1]; + /* 10: addw */ + var53.x2[0] = var52.x2[0] + var42.x2[0]; + var53.x2[1] = var52.x2[1] + var42.x2[1]; + /* 11: shruw */ + var54.x2[0] = ((orc_uint16) var53.x2[0]) >> 2; + var54.x2[1] = ((orc_uint16) var53.x2[1]) >> 2; + /* 12: convsuswb */ + var55.x2[0] = ORC_CLAMP_UB (var54.x2[0]); + var55.x2[1] = ORC_CLAMP_UB (var54.x2[1]); + /* 13: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var55.i; + var43.i = _dest.i; + } + /* 14: storel */ + ptr0[i] = var43; + /* 15: mullw */ + var56.x2[0] = (var50.x2[0] * var41.x2[0]) & 0xffff; + var56.x2[1] = (var50.x2[1] * var41.x2[1]) & 0xffff; + /* 16: addw */ + var57.x2[0] = var56.x2[0] + var49.x2[0]; + var57.x2[1] = var56.x2[1] + var49.x2[1]; + /* 17: addw */ + var58.x2[0] = var57.x2[0] + var42.x2[0]; + var58.x2[1] = var57.x2[1] + var42.x2[1]; + /* 18: shruw */ + var59.x2[0] = ((orc_uint16) var58.x2[0]) >> 2; + var59.x2[1] = ((orc_uint16) var58.x2[1]) >> 2; + /* 19: convsuswb */ + var60.x2[0] = ORC_CLAMP_UB (var59.x2[0]); + var60.x2[1] = ORC_CLAMP_UB (var59.x2[1]); + /* 20: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var48.i; + _dest.x2[1] = var60.i; + var44.i = _dest.i; + } + /* 21: storel */ + ptr1[i] = var44; + } + +} + +#else +static void +_backup_video_orc_chroma_up_v2_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var39; + orc_union32 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + orc_union32 var53; + orc_union32 var54; + orc_union16 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union32 var59; + orc_union16 var60; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + /* 6: loadpw */ + var41.x2[0] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + var41.x2[1] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + /* 9: loadpw */ + var42.x2[0] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + var42.x2[1] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var39 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var39.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 2: loadl */ + var40 = ptr5[i]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var40.i; + var47.i = _src.x2[1]; + var48.i = _src.x2[0]; + } + /* 4: convubw */ + var49.x2[0] = (orc_uint8) var45.x2[0]; + var49.x2[1] = (orc_uint8) var45.x2[1]; + /* 5: convubw */ + var50.x2[0] = (orc_uint8) var47.x2[0]; + var50.x2[1] = (orc_uint8) var47.x2[1]; + /* 7: mullw */ + var51.x2[0] = (var49.x2[0] * var41.x2[0]) & 0xffff; + var51.x2[1] = (var49.x2[1] * var41.x2[1]) & 0xffff; + /* 8: addw */ + var52.x2[0] = var51.x2[0] + var50.x2[0]; + var52.x2[1] = var51.x2[1] + var50.x2[1]; + /* 10: addw */ + var53.x2[0] = var52.x2[0] + var42.x2[0]; + var53.x2[1] = var52.x2[1] + var42.x2[1]; + /* 11: shruw */ + var54.x2[0] = ((orc_uint16) var53.x2[0]) >> 2; + var54.x2[1] = ((orc_uint16) var53.x2[1]) >> 2; + /* 12: convsuswb */ + var55.x2[0] = ORC_CLAMP_UB (var54.x2[0]); + var55.x2[1] = ORC_CLAMP_UB (var54.x2[1]); + /* 13: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var55.i; + var43.i = _dest.i; + } + /* 14: storel */ + ptr0[i] = var43; + /* 15: mullw */ + var56.x2[0] = (var50.x2[0] * var41.x2[0]) & 0xffff; + var56.x2[1] = (var50.x2[1] * var41.x2[1]) & 0xffff; + /* 16: addw */ + var57.x2[0] = var56.x2[0] + var49.x2[0]; + var57.x2[1] = var56.x2[1] + var49.x2[1]; + /* 17: addw */ + var58.x2[0] = var57.x2[0] + var42.x2[0]; + var58.x2[1] = var57.x2[1] + var42.x2[1]; + /* 18: shruw */ + var59.x2[0] = ((orc_uint16) var58.x2[0]) >> 2; + var59.x2[1] = ((orc_uint16) var58.x2[1]) >> 2; + /* 19: convsuswb */ + var60.x2[0] = ORC_CLAMP_UB (var59.x2[0]); + var60.x2[1] = ORC_CLAMP_UB (var59.x2[1]); + /* 20: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var48.i; + _dest.x2[1] = var60.i; + var44.i = _dest.i; + } + /* 21: storel */ + ptr1[i] = var44; + } + +} + +void +video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 117, 112, 95, 118, 50, 95, 117, 56, 11, 4, 4, 11, + 4, 4, 12, 4, 4, 12, 4, 4, 14, 2, 3, 0, 0, 0, 14, 2, + 2, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, + 20, 4, 198, 34, 32, 4, 198, 35, 33, 5, 21, 1, 150, 36, 34, 21, + 1, 150, 37, 35, 21, 1, 89, 38, 36, 16, 21, 1, 70, 38, 38, 37, + 21, 1, 70, 38, 38, 17, 21, 1, 95, 38, 38, 17, 21, 1, 160, 34, + 38, 195, 0, 32, 34, 21, 1, 89, 38, 37, 16, 21, 1, 70, 38, 38, + 36, 21, 1, 70, 38, 38, 17, 21, 1, 95, 38, 38, 17, 21, 1, 160, + 35, 38, 195, 1, 33, 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_up_v2_u8"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_constant (p, 2, 0x00000003, "c1"); + orc_program_add_constant (p, 2, 0x00000002, "c2"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 4, "t7"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 1, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 1, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T4, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_up_v2_u16 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, + const guint16 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var39; + orc_union64 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var41; +#else + orc_union64 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var42; +#else + orc_union64 var42; +#endif + orc_union64 var43; + orc_union64 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union64 var49; + orc_union64 var50; + orc_union64 var51; + orc_union64 var52; + orc_union64 var53; + orc_union64 var54; + orc_union32 var55; + orc_union64 var56; + orc_union64 var57; + orc_union64 var58; + orc_union64 var59; + orc_union32 var60; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union64 *) s1; + ptr5 = (orc_union64 *) s2; + + /* 6: loadpl */ + var41.x2[0] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + var41.x2[1] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + /* 9: loadpl */ + var42.x2[0] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + var42.x2[1] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var39 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var39.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 2: loadq */ + var40 = ptr5[i]; + /* 3: splitql */ + { + orc_union64 _src; + _src.i = var40.i; + var47.i = _src.x2[1]; + var48.i = _src.x2[0]; + } + /* 4: convuwl */ + var49.x2[0] = (orc_uint16) var45.x2[0]; + var49.x2[1] = (orc_uint16) var45.x2[1]; + /* 5: convuwl */ + var50.x2[0] = (orc_uint16) var47.x2[0]; + var50.x2[1] = (orc_uint16) var47.x2[1]; + /* 7: mulll */ + var51.x2[0] = + (((orc_uint32) var49.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff; + var51.x2[1] = + (((orc_uint32) var49.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff; + /* 8: addl */ + var52.x2[0] = ((orc_uint32) var51.x2[0]) + ((orc_uint32) var50.x2[0]); + var52.x2[1] = ((orc_uint32) var51.x2[1]) + ((orc_uint32) var50.x2[1]); + /* 10: addl */ + var53.x2[0] = ((orc_uint32) var52.x2[0]) + ((orc_uint32) var42.x2[0]); + var53.x2[1] = ((orc_uint32) var52.x2[1]) + ((orc_uint32) var42.x2[1]); + /* 11: shrul */ + var54.x2[0] = ((orc_uint32) var53.x2[0]) >> 2; + var54.x2[1] = ((orc_uint32) var53.x2[1]) >> 2; + /* 12: convsuslw */ + var55.x2[0] = ORC_CLAMP_UW (var54.x2[0]); + var55.x2[1] = ORC_CLAMP_UW (var54.x2[1]); + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var55.i; + var43.i = _dest.i; + } + /* 14: storeq */ + ptr0[i] = var43; + /* 15: mulll */ + var56.x2[0] = + (((orc_uint32) var50.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff; + var56.x2[1] = + (((orc_uint32) var50.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff; + /* 16: addl */ + var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var49.x2[0]); + var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var49.x2[1]); + /* 17: addl */ + var58.x2[0] = ((orc_uint32) var57.x2[0]) + ((orc_uint32) var42.x2[0]); + var58.x2[1] = ((orc_uint32) var57.x2[1]) + ((orc_uint32) var42.x2[1]); + /* 18: shrul */ + var59.x2[0] = ((orc_uint32) var58.x2[0]) >> 2; + var59.x2[1] = ((orc_uint32) var58.x2[1]) >> 2; + /* 19: convsuslw */ + var60.x2[0] = ORC_CLAMP_UW (var59.x2[0]); + var60.x2[1] = ORC_CLAMP_UW (var59.x2[1]); + /* 20: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var48.i; + _dest.x2[1] = var60.i; + var44.i = _dest.i; + } + /* 21: storeq */ + ptr1[i] = var44; + } + +} + +#else +static void +_backup_video_orc_chroma_up_v2_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var39; + orc_union64 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var41; +#else + orc_union64 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var42; +#else + orc_union64 var42; +#endif + orc_union64 var43; + orc_union64 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union64 var49; + orc_union64 var50; + orc_union64 var51; + orc_union64 var52; + orc_union64 var53; + orc_union64 var54; + orc_union32 var55; + orc_union64 var56; + orc_union64 var57; + orc_union64 var58; + orc_union64 var59; + orc_union32 var60; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union64 *) ex->arrays[4]; + ptr5 = (orc_union64 *) ex->arrays[5]; + + /* 6: loadpl */ + var41.x2[0] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + var41.x2[1] = (int) 0x00000003; /* 3 or 1.4822e-323f */ + /* 9: loadpl */ + var42.x2[0] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + var42.x2[1] = (int) 0x00000002; /* 2 or 9.88131e-324f */ + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var39 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var39.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 2: loadq */ + var40 = ptr5[i]; + /* 3: splitql */ + { + orc_union64 _src; + _src.i = var40.i; + var47.i = _src.x2[1]; + var48.i = _src.x2[0]; + } + /* 4: convuwl */ + var49.x2[0] = (orc_uint16) var45.x2[0]; + var49.x2[1] = (orc_uint16) var45.x2[1]; + /* 5: convuwl */ + var50.x2[0] = (orc_uint16) var47.x2[0]; + var50.x2[1] = (orc_uint16) var47.x2[1]; + /* 7: mulll */ + var51.x2[0] = + (((orc_uint32) var49.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff; + var51.x2[1] = + (((orc_uint32) var49.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff; + /* 8: addl */ + var52.x2[0] = ((orc_uint32) var51.x2[0]) + ((orc_uint32) var50.x2[0]); + var52.x2[1] = ((orc_uint32) var51.x2[1]) + ((orc_uint32) var50.x2[1]); + /* 10: addl */ + var53.x2[0] = ((orc_uint32) var52.x2[0]) + ((orc_uint32) var42.x2[0]); + var53.x2[1] = ((orc_uint32) var52.x2[1]) + ((orc_uint32) var42.x2[1]); + /* 11: shrul */ + var54.x2[0] = ((orc_uint32) var53.x2[0]) >> 2; + var54.x2[1] = ((orc_uint32) var53.x2[1]) >> 2; + /* 12: convsuslw */ + var55.x2[0] = ORC_CLAMP_UW (var54.x2[0]); + var55.x2[1] = ORC_CLAMP_UW (var54.x2[1]); + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var55.i; + var43.i = _dest.i; + } + /* 14: storeq */ + ptr0[i] = var43; + /* 15: mulll */ + var56.x2[0] = + (((orc_uint32) var50.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff; + var56.x2[1] = + (((orc_uint32) var50.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff; + /* 16: addl */ + var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var49.x2[0]); + var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var49.x2[1]); + /* 17: addl */ + var58.x2[0] = ((orc_uint32) var57.x2[0]) + ((orc_uint32) var42.x2[0]); + var58.x2[1] = ((orc_uint32) var57.x2[1]) + ((orc_uint32) var42.x2[1]); + /* 18: shrul */ + var59.x2[0] = ((orc_uint32) var58.x2[0]) >> 2; + var59.x2[1] = ((orc_uint32) var58.x2[1]) >> 2; + /* 19: convsuslw */ + var60.x2[0] = ORC_CLAMP_UW (var59.x2[0]); + var60.x2[1] = ORC_CLAMP_UW (var59.x2[1]); + /* 20: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var48.i; + _dest.x2[1] = var60.i; + var44.i = _dest.i; + } + /* 21: storeq */ + ptr1[i] = var44; + } + +} + +void +video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, + const guint16 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 26, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 117, 112, 95, 118, 50, 95, 117, 49, 54, 11, 8, 8, + 11, 8, 8, 12, 8, 8, 12, 8, 8, 14, 4, 3, 0, 0, 0, 14, + 4, 2, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 8, 20, + 8, 20, 8, 197, 34, 32, 4, 197, 35, 33, 5, 21, 1, 154, 36, 34, + 21, 1, 154, 37, 35, 21, 1, 120, 38, 36, 16, 21, 1, 103, 38, 38, + 37, 21, 1, 103, 38, 38, 17, 21, 1, 126, 38, 38, 17, 21, 1, 166, + 34, 38, 194, 0, 32, 34, 21, 1, 120, 38, 37, 16, 21, 1, 103, 38, + 38, 36, 21, 1, 103, 38, 38, 17, 21, 1, 126, 38, 38, 17, 21, 1, + 166, 35, 38, 194, 1, 33, 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_up_v2_u16"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u16); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_source (p, 8, "s2"); + orc_program_add_constant (p, 4, 0x00000003, "c1"); + orc_program_add_constant (p, 4, 0x00000002, "c2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 8, "t5"); + orc_program_add_temporary (p, 8, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "splitql", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "splitql", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S2, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 1, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T3, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mulll", 1, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T4, ORC_VAR_T7, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_down_v2_u16 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var35; + orc_union64 var36; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union32 var41; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union64 *) s1; + ptr5 = (orc_union64 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var35 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var35.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: loadq */ + var36 = ptr5[i]; + /* 3: select1ql */ + { + orc_union64 _src; + _src.i = var36.i; + var40.i = _src.x2[1]; + } + /* 4: avguw */ + var41.x2[0] = + ((orc_uint16) var38.x2[0] + (orc_uint16) var40.x2[0] + 1) >> 1; + var41.x2[1] = + ((orc_uint16) var38.x2[1] + (orc_uint16) var40.x2[1] + 1) >> 1; + /* 5: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_chroma_down_v2_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + orc_union64 var35; + orc_union64 var36; + orc_union64 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; + orc_union32 var41; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union64 *) ex->arrays[4]; + ptr5 = (orc_union64 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var35 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var35.i; + var38.i = _src.x2[1]; + var39.i = _src.x2[0]; + } + /* 2: loadq */ + var36 = ptr5[i]; + /* 3: select1ql */ + { + orc_union64 _src; + _src.i = var36.i; + var40.i = _src.x2[1]; + } + /* 4: avguw */ + var41.x2[0] = + ((orc_uint16) var38.x2[0] + (orc_uint16) var40.x2[0] + 1) >> 1; + var41.x2[1] = + ((orc_uint16) var38.x2[1] + (orc_uint16) var40.x2[1] + 1) >> 1; + /* 5: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 6: storeq */ + ptr0[i] = var37; + } + +} + +void +video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 50, 95, 117, 49, 54, 11, + 8, 8, 12, 8, 8, 12, 8, 8, 20, 4, 20, 4, 20, 4, 197, 33, + 32, 4, 193, 34, 5, 21, 1, 76, 33, 33, 34, 194, 0, 32, 33, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_down_v2_u16"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u16); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_source (p, 8, "s2"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T3, ORC_VAR_S2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_down_v4_u8 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + orc_union16 var46; + orc_union32 var47; + orc_union32 var48; + orc_union16 var49; + orc_union32 var50; + orc_union16 var51; + orc_union32 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union16 var59; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + + /* 17: loadpw */ + var41.x2[0] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + var41.x2[1] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 2: convubw */ + var45.x2[0] = (orc_uint8) var43.x2[0]; + var45.x2[1] = (orc_uint8) var43.x2[1]; + /* 3: loadl */ + var38 = ptr7[i]; + /* 4: select1lw */ + { + orc_union32 _src; + _src.i = var38.i; + var46.i = _src.x2[1]; + } + /* 5: convubw */ + var47.x2[0] = (orc_uint8) var46.x2[0]; + var47.x2[1] = (orc_uint8) var46.x2[1]; + /* 6: addw */ + var48.x2[0] = var45.x2[0] + var47.x2[0]; + var48.x2[1] = var45.x2[1] + var47.x2[1]; + /* 7: loadl */ + var39 = ptr5[i]; + /* 8: select1lw */ + { + orc_union32 _src; + _src.i = var39.i; + var49.i = _src.x2[1]; + } + /* 9: convubw */ + var50.x2[0] = (orc_uint8) var49.x2[0]; + var50.x2[1] = (orc_uint8) var49.x2[1]; + /* 10: loadl */ + var40 = ptr6[i]; + /* 11: select1lw */ + { + orc_union32 _src; + _src.i = var40.i; + var51.i = _src.x2[1]; + } + /* 12: convubw */ + var52.x2[0] = (orc_uint8) var51.x2[0]; + var52.x2[1] = (orc_uint8) var51.x2[1]; + /* 13: addw */ + var53.x2[0] = var50.x2[0] + var52.x2[0]; + var53.x2[1] = var50.x2[1] + var52.x2[1]; + /* 14: shlw */ + var54.x2[0] = ((orc_uint16) var53.x2[0]) << 1; + var54.x2[1] = ((orc_uint16) var53.x2[1]) << 1; + /* 15: addw */ + var55.x2[0] = var53.x2[0] + var54.x2[0]; + var55.x2[1] = var53.x2[1] + var54.x2[1]; + /* 16: addw */ + var56.x2[0] = var48.x2[0] + var55.x2[0]; + var56.x2[1] = var48.x2[1] + var55.x2[1]; + /* 18: addw */ + var57.x2[0] = var56.x2[0] + var41.x2[0]; + var57.x2[1] = var56.x2[1] + var41.x2[1]; + /* 19: shruw */ + var58.x2[0] = ((orc_uint16) var57.x2[0]) >> 3; + var58.x2[1] = ((orc_uint16) var57.x2[1]) >> 3; + /* 20: convsuswb */ + var59.x2[0] = ORC_CLAMP_UB (var58.x2[0]); + var59.x2[1] = ORC_CLAMP_UB (var58.x2[1]); + /* 21: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var59.i; + var42.i = _dest.i; + } + /* 22: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_chroma_down_v4_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union32 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union32 var45; + orc_union16 var46; + orc_union32 var47; + orc_union32 var48; + orc_union16 var49; + orc_union32 var50; + orc_union16 var51; + orc_union32 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + orc_union32 var56; + orc_union32 var57; + orc_union32 var58; + orc_union16 var59; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + + /* 17: loadpw */ + var41.x2[0] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + var41.x2[1] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 2: convubw */ + var45.x2[0] = (orc_uint8) var43.x2[0]; + var45.x2[1] = (orc_uint8) var43.x2[1]; + /* 3: loadl */ + var38 = ptr7[i]; + /* 4: select1lw */ + { + orc_union32 _src; + _src.i = var38.i; + var46.i = _src.x2[1]; + } + /* 5: convubw */ + var47.x2[0] = (orc_uint8) var46.x2[0]; + var47.x2[1] = (orc_uint8) var46.x2[1]; + /* 6: addw */ + var48.x2[0] = var45.x2[0] + var47.x2[0]; + var48.x2[1] = var45.x2[1] + var47.x2[1]; + /* 7: loadl */ + var39 = ptr5[i]; + /* 8: select1lw */ + { + orc_union32 _src; + _src.i = var39.i; + var49.i = _src.x2[1]; + } + /* 9: convubw */ + var50.x2[0] = (orc_uint8) var49.x2[0]; + var50.x2[1] = (orc_uint8) var49.x2[1]; + /* 10: loadl */ + var40 = ptr6[i]; + /* 11: select1lw */ + { + orc_union32 _src; + _src.i = var40.i; + var51.i = _src.x2[1]; + } + /* 12: convubw */ + var52.x2[0] = (orc_uint8) var51.x2[0]; + var52.x2[1] = (orc_uint8) var51.x2[1]; + /* 13: addw */ + var53.x2[0] = var50.x2[0] + var52.x2[0]; + var53.x2[1] = var50.x2[1] + var52.x2[1]; + /* 14: shlw */ + var54.x2[0] = ((orc_uint16) var53.x2[0]) << 1; + var54.x2[1] = ((orc_uint16) var53.x2[1]) << 1; + /* 15: addw */ + var55.x2[0] = var53.x2[0] + var54.x2[0]; + var55.x2[1] = var53.x2[1] + var54.x2[1]; + /* 16: addw */ + var56.x2[0] = var48.x2[0] + var55.x2[0]; + var56.x2[1] = var48.x2[1] + var55.x2[1]; + /* 18: addw */ + var57.x2[0] = var56.x2[0] + var41.x2[0]; + var57.x2[1] = var56.x2[1] + var41.x2[1]; + /* 19: shruw */ + var58.x2[0] = ((orc_uint16) var57.x2[0]) >> 3; + var58.x2[1] = ((orc_uint16) var57.x2[1]) >> 3; + /* 20: convsuswb */ + var59.x2[0] = ORC_CLAMP_UB (var58.x2[0]); + var59.x2[1] = ORC_CLAMP_UB (var58.x2[1]); + /* 21: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var59.i; + var42.i = _dest.i; + } + /* 22: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 52, 95, 117, 56, 11, 4, + 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 14, 2, 1, + 0, 0, 0, 14, 2, 4, 0, 0, 0, 14, 2, 3, 0, 0, 0, 20, + 2, 20, 2, 20, 4, 20, 4, 20, 4, 198, 33, 32, 4, 21, 1, 150, + 34, 33, 191, 33, 7, 21, 1, 150, 35, 33, 21, 1, 70, 36, 34, 35, + 191, 33, 5, 21, 1, 150, 34, 33, 191, 33, 6, 21, 1, 150, 35, 33, + 21, 1, 70, 34, 34, 35, 21, 1, 93, 35, 34, 16, 21, 1, 70, 34, + 34, 35, 21, 1, 70, 36, 36, 34, 21, 1, 70, 36, 36, 17, 21, 1, + 95, 36, 36, 18, 21, 1, 160, 33, 36, 195, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_down_v4_u8"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u8); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_constant (p, 2, 0x00000001, "c1"); + orc_program_add_constant (p, 2, 0x00000004, "c2"); + orc_program_add_constant (p, 2, 0x00000003, "c3"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T2, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_chroma_down_v4_u16 */ +#ifdef DISABLE_ORC +void +video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + const orc_union64 *ORC_RESTRICT ptr6; + const orc_union64 *ORC_RESTRICT ptr7; + orc_union64 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var41; +#else + orc_union64 var41; +#endif + orc_union64 var42; + orc_union32 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union64 var47; + orc_union64 var48; + orc_union32 var49; + orc_union64 var50; + orc_union32 var51; + orc_union64 var52; + orc_union64 var53; + orc_union64 var54; + orc_union64 var55; + orc_union64 var56; + orc_union64 var57; + orc_union64 var58; + orc_union32 var59; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union64 *) s1; + ptr5 = (orc_union64 *) s2; + ptr6 = (orc_union64 *) s3; + ptr7 = (orc_union64 *) s4; + + /* 17: loadpl */ + var41.x2[0] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + var41.x2[1] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var37.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 2: convuwl */ + var45.x2[0] = (orc_uint16) var43.x2[0]; + var45.x2[1] = (orc_uint16) var43.x2[1]; + /* 3: loadq */ + var38 = ptr7[i]; + /* 4: select1ql */ + { + orc_union64 _src; + _src.i = var38.i; + var46.i = _src.x2[1]; + } + /* 5: convuwl */ + var47.x2[0] = (orc_uint16) var46.x2[0]; + var47.x2[1] = (orc_uint16) var46.x2[1]; + /* 6: addl */ + var48.x2[0] = ((orc_uint32) var45.x2[0]) + ((orc_uint32) var47.x2[0]); + var48.x2[1] = ((orc_uint32) var45.x2[1]) + ((orc_uint32) var47.x2[1]); + /* 7: loadq */ + var39 = ptr5[i]; + /* 8: select1ql */ + { + orc_union64 _src; + _src.i = var39.i; + var49.i = _src.x2[1]; + } + /* 9: convuwl */ + var50.x2[0] = (orc_uint16) var49.x2[0]; + var50.x2[1] = (orc_uint16) var49.x2[1]; + /* 10: loadq */ + var40 = ptr6[i]; + /* 11: select1ql */ + { + orc_union64 _src; + _src.i = var40.i; + var51.i = _src.x2[1]; + } + /* 12: convuwl */ + var52.x2[0] = (orc_uint16) var51.x2[0]; + var52.x2[1] = (orc_uint16) var51.x2[1]; + /* 13: addl */ + var53.x2[0] = ((orc_uint32) var50.x2[0]) + ((orc_uint32) var52.x2[0]); + var53.x2[1] = ((orc_uint32) var50.x2[1]) + ((orc_uint32) var52.x2[1]); + /* 14: shll */ + var54.x2[0] = ((orc_uint32) var53.x2[0]) << 1; + var54.x2[1] = ((orc_uint32) var53.x2[1]) << 1; + /* 15: addl */ + var55.x2[0] = ((orc_uint32) var53.x2[0]) + ((orc_uint32) var54.x2[0]); + var55.x2[1] = ((orc_uint32) var53.x2[1]) + ((orc_uint32) var54.x2[1]); + /* 16: addl */ + var56.x2[0] = ((orc_uint32) var48.x2[0]) + ((orc_uint32) var55.x2[0]); + var56.x2[1] = ((orc_uint32) var48.x2[1]) + ((orc_uint32) var55.x2[1]); + /* 18: addl */ + var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var41.x2[0]); + var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var41.x2[1]); + /* 19: shrul */ + var58.x2[0] = ((orc_uint32) var57.x2[0]) >> 3; + var58.x2[1] = ((orc_uint32) var57.x2[1]) >> 3; + /* 20: convsuslw */ + var59.x2[0] = ORC_CLAMP_UW (var58.x2[0]); + var59.x2[1] = ORC_CLAMP_UW (var58.x2[1]); + /* 21: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var59.i; + var42.i = _dest.i; + } + /* 22: storeq */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_chroma_down_v4_u16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + const orc_union64 *ORC_RESTRICT ptr5; + const orc_union64 *ORC_RESTRICT ptr6; + const orc_union64 *ORC_RESTRICT ptr7; + orc_union64 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union64 var41; +#else + orc_union64 var41; +#endif + orc_union64 var42; + orc_union32 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union64 var47; + orc_union64 var48; + orc_union32 var49; + orc_union64 var50; + orc_union32 var51; + orc_union64 var52; + orc_union64 var53; + orc_union64 var54; + orc_union64 var55; + orc_union64 var56; + orc_union64 var57; + orc_union64 var58; + orc_union32 var59; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union64 *) ex->arrays[4]; + ptr5 = (orc_union64 *) ex->arrays[5]; + ptr6 = (orc_union64 *) ex->arrays[6]; + ptr7 = (orc_union64 *) ex->arrays[7]; + + /* 17: loadpl */ + var41.x2[0] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + var41.x2[1] = (int) 0x00000004; /* 4 or 1.97626e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadq */ + var37 = ptr4[i]; + /* 1: splitql */ + { + orc_union64 _src; + _src.i = var37.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 2: convuwl */ + var45.x2[0] = (orc_uint16) var43.x2[0]; + var45.x2[1] = (orc_uint16) var43.x2[1]; + /* 3: loadq */ + var38 = ptr7[i]; + /* 4: select1ql */ + { + orc_union64 _src; + _src.i = var38.i; + var46.i = _src.x2[1]; + } + /* 5: convuwl */ + var47.x2[0] = (orc_uint16) var46.x2[0]; + var47.x2[1] = (orc_uint16) var46.x2[1]; + /* 6: addl */ + var48.x2[0] = ((orc_uint32) var45.x2[0]) + ((orc_uint32) var47.x2[0]); + var48.x2[1] = ((orc_uint32) var45.x2[1]) + ((orc_uint32) var47.x2[1]); + /* 7: loadq */ + var39 = ptr5[i]; + /* 8: select1ql */ + { + orc_union64 _src; + _src.i = var39.i; + var49.i = _src.x2[1]; + } + /* 9: convuwl */ + var50.x2[0] = (orc_uint16) var49.x2[0]; + var50.x2[1] = (orc_uint16) var49.x2[1]; + /* 10: loadq */ + var40 = ptr6[i]; + /* 11: select1ql */ + { + orc_union64 _src; + _src.i = var40.i; + var51.i = _src.x2[1]; + } + /* 12: convuwl */ + var52.x2[0] = (orc_uint16) var51.x2[0]; + var52.x2[1] = (orc_uint16) var51.x2[1]; + /* 13: addl */ + var53.x2[0] = ((orc_uint32) var50.x2[0]) + ((orc_uint32) var52.x2[0]); + var53.x2[1] = ((orc_uint32) var50.x2[1]) + ((orc_uint32) var52.x2[1]); + /* 14: shll */ + var54.x2[0] = ((orc_uint32) var53.x2[0]) << 1; + var54.x2[1] = ((orc_uint32) var53.x2[1]) << 1; + /* 15: addl */ + var55.x2[0] = ((orc_uint32) var53.x2[0]) + ((orc_uint32) var54.x2[0]); + var55.x2[1] = ((orc_uint32) var53.x2[1]) + ((orc_uint32) var54.x2[1]); + /* 16: addl */ + var56.x2[0] = ((orc_uint32) var48.x2[0]) + ((orc_uint32) var55.x2[0]); + var56.x2[1] = ((orc_uint32) var48.x2[1]) + ((orc_uint32) var55.x2[1]); + /* 18: addl */ + var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var41.x2[0]); + var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var41.x2[1]); + /* 19: shrul */ + var58.x2[0] = ((orc_uint32) var57.x2[0]) >> 3; + var58.x2[1] = ((orc_uint32) var57.x2[1]) >> 3; + /* 20: convsuslw */ + var59.x2[0] = ORC_CLAMP_UW (var58.x2[0]); + var59.x2[1] = ORC_CLAMP_UW (var58.x2[1]); + /* 21: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var59.i; + var42.i = _dest.i; + } + /* 22: storeq */ + ptr0[i] = var42; + } + +} + +void +video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, + const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114, + 111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 52, 95, 117, 49, 54, 11, + 8, 8, 12, 8, 8, 12, 8, 8, 12, 8, 8, 12, 8, 8, 14, 4, + 1, 0, 0, 0, 14, 4, 4, 0, 0, 0, 14, 4, 3, 0, 0, 0, + 20, 4, 20, 4, 20, 8, 20, 8, 20, 8, 197, 33, 32, 4, 21, 1, + 154, 34, 33, 193, 33, 7, 21, 1, 154, 35, 33, 21, 1, 103, 36, 34, + 35, 193, 33, 5, 21, 1, 154, 34, 33, 193, 33, 6, 21, 1, 154, 35, + 33, 21, 1, 103, 34, 34, 35, 21, 1, 124, 35, 34, 16, 21, 1, 103, + 34, 34, 35, 21, 1, 103, 36, 36, 34, 21, 1, 103, 36, 36, 17, 21, + 1, 126, 36, 36, 18, 21, 1, 166, 33, 36, 194, 0, 32, 33, 2, 0, + + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_chroma_down_v4_u16"); + orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u16); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_source (p, 8, "s2"); + orc_program_add_source (p, 8, "s3"); + orc_program_add_source (p, 8, "s4"); + orc_program_add_constant (p, 4, 0x00000001, "c1"); + orc_program_add_constant (p, 4, 0x00000004, "c2"); + orc_program_add_constant (p, 4, 0x00000003, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 8, "t3"); + orc_program_add_temporary (p, 8, "t4"); + orc_program_add_temporary (p, 8, "t5"); + + orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S4, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S2, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T2, ORC_VAR_T5, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_none_4u8_mask */ +#ifdef DISABLE_ORC +void +video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 var33; + orc_union32 var34; + orc_union32 var35; + + ptr0 = (orc_union32 *) d1; + + /* 0: loadpl */ + var35.i = p1; + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var33 = ptr0[i]; + /* 2: andnb */ + var34.x4[0] = (~var35.x4[0]) & var33.x4[0]; + var34.x4[1] = (~var35.x4[1]) & var33.x4[1]; + var34.x4[2] = (~var35.x4[2]) & var33.x4[2]; + var34.x4[3] = (~var35.x4[3]) & var33.x4[3]; + /* 3: storel */ + ptr0[i] = var34; + } + +} + +#else +static void +_backup_video_orc_dither_none_4u8_mask (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 var33; + orc_union32 var34; + orc_union32 var35; + + ptr0 = (orc_union32 *) ex->arrays[0]; + + /* 0: loadpl */ + var35.i = ex->params[24]; + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var33 = ptr0[i]; + /* 2: andnb */ + var34.x4[0] = (~var35.x4[0]) & var33.x4[0]; + var34.x4[1] = (~var35.x4[1]) & var33.x4[1]; + var34.x4[2] = (~var35.x4[2]) & var33.x4[2]; + var34.x4[3] = (~var35.x4[3]) & var33.x4[3]; + /* 3: storel */ + ptr0[i] = var34; + } + +} + +void +video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 30, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 110, 111, 110, 101, 95, 52, 117, 56, 95, 109, 97, + 115, + 107, 11, 4, 4, 16, 4, 20, 4, 115, 32, 24, 21, 2, 37, 0, 32, + 0, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_none_4u8_mask); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_none_4u8_mask"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_none_4u8_mask); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_temporary (p, 4, "t1"); + + orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andnb", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_none_4u16_mask */ +#ifdef DISABLE_ORC +void +video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var33; + orc_union64 var34; + orc_union64 var35; + + ptr0 = (orc_union64 *) d1; + + /* 0: loadpq */ + var35.i = p1; + + for (i = 0; i < n; i++) { + /* 1: loadq */ + var33 = ptr0[i]; + /* 2: andnw */ + var34.x4[0] = (~var35.x4[0]) & var33.x4[0]; + var34.x4[1] = (~var35.x4[1]) & var33.x4[1]; + var34.x4[2] = (~var35.x4[2]) & var33.x4[2]; + var34.x4[3] = (~var35.x4[3]) & var33.x4[3]; + /* 3: storeq */ + ptr0[i] = var34; + } + +} + +#else +static void +_backup_video_orc_dither_none_4u16_mask (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 var33; + orc_union64 var34; + orc_union64 var35; + + ptr0 = (orc_union64 *) ex->arrays[0]; + + /* 0: loadpq */ + var35.i = + (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); + + for (i = 0; i < n; i++) { + /* 1: loadq */ + var33 = ptr0[i]; + /* 2: andnw */ + var34.x4[0] = (~var35.x4[0]) & var33.x4[0]; + var34.x4[1] = (~var35.x4[1]) & var33.x4[1]; + var34.x4[2] = (~var35.x4[2]) & var33.x4[2]; + var34.x4[3] = (~var35.x4[3]) & var33.x4[3]; + /* 3: storeq */ + ptr0[i] = var34; + } + +} + +void +video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 110, 111, 110, 101, 95, 52, 117, 49, 54, 95, 109, 97, + 115, 107, 11, 8, 8, 18, 8, 20, 8, 134, 32, 24, 21, 2, 74, 0, + 32, 0, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_none_4u16_mask); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_none_4u16_mask"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_none_4u16_mask); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_parameter_int64 (p, 8, "p1"); + orc_program_add_temporary (p, 8, "t1"); + + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andnw", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_verterr_4u8_mask */ +#ifdef DISABLE_ORC +void +video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, orc_int64 p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + orc_union32 var34; + orc_union64 var35; + orc_union64 var36; + orc_union32 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + orc_union64 var41; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union64 *) d2; + + /* 0: loadpq */ + var38.i = p1; + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var34 = ptr0[i]; + /* 2: convubw */ + var39.x4[0] = (orc_uint8) var34.x4[0]; + var39.x4[1] = (orc_uint8) var34.x4[1]; + var39.x4[2] = (orc_uint8) var34.x4[2]; + var39.x4[3] = (orc_uint8) var34.x4[3]; + /* 3: loadq */ + var35 = ptr1[i]; + /* 4: addw */ + var40.x4[0] = var35.x4[0] + var39.x4[0]; + var40.x4[1] = var35.x4[1] + var39.x4[1]; + var40.x4[2] = var35.x4[2] + var39.x4[2]; + var40.x4[3] = var35.x4[3] + var39.x4[3]; + /* 5: andw */ + var36.x4[0] = var38.x4[0] & var40.x4[0]; + var36.x4[1] = var38.x4[1] & var40.x4[1]; + var36.x4[2] = var38.x4[2] & var40.x4[2]; + var36.x4[3] = var38.x4[3] & var40.x4[3]; + /* 6: storeq */ + ptr1[i] = var36; + /* 7: andnw */ + var41.x4[0] = (~var38.x4[0]) & var40.x4[0]; + var41.x4[1] = (~var38.x4[1]) & var40.x4[1]; + var41.x4[2] = (~var38.x4[2]) & var40.x4[2]; + var41.x4[3] = (~var38.x4[3]) & var40.x4[3]; + /* 8: convsuswb */ + var37.x4[0] = ORC_CLAMP_UB (var41.x4[0]); + var37.x4[1] = ORC_CLAMP_UB (var41.x4[1]); + var37.x4[2] = ORC_CLAMP_UB (var41.x4[2]); + var37.x4[3] = ORC_CLAMP_UB (var41.x4[3]); + /* 9: storel */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_dither_verterr_4u8_mask (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + orc_union32 var34; + orc_union64 var35; + orc_union64 var36; + orc_union32 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + orc_union64 var41; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + + /* 0: loadpq */ + var38.i = + (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var34 = ptr0[i]; + /* 2: convubw */ + var39.x4[0] = (orc_uint8) var34.x4[0]; + var39.x4[1] = (orc_uint8) var34.x4[1]; + var39.x4[2] = (orc_uint8) var34.x4[2]; + var39.x4[3] = (orc_uint8) var34.x4[3]; + /* 3: loadq */ + var35 = ptr1[i]; + /* 4: addw */ + var40.x4[0] = var35.x4[0] + var39.x4[0]; + var40.x4[1] = var35.x4[1] + var39.x4[1]; + var40.x4[2] = var35.x4[2] + var39.x4[2]; + var40.x4[3] = var35.x4[3] + var39.x4[3]; + /* 5: andw */ + var36.x4[0] = var38.x4[0] & var40.x4[0]; + var36.x4[1] = var38.x4[1] & var40.x4[1]; + var36.x4[2] = var38.x4[2] & var40.x4[2]; + var36.x4[3] = var38.x4[3] & var40.x4[3]; + /* 6: storeq */ + ptr1[i] = var36; + /* 7: andnw */ + var41.x4[0] = (~var38.x4[0]) & var40.x4[0]; + var41.x4[1] = (~var38.x4[1]) & var40.x4[1]; + var41.x4[2] = (~var38.x4[2]) & var40.x4[2]; + var41.x4[3] = (~var38.x4[3]) & var40.x4[3]; + /* 8: convsuswb */ + var37.x4[0] = ORC_CLAMP_UB (var41.x4[0]); + var37.x4[1] = ORC_CLAMP_UB (var41.x4[1]); + var37.x4[2] = ORC_CLAMP_UB (var41.x4[2]); + var37.x4[3] = ORC_CLAMP_UB (var41.x4[3]); + /* 9: storel */ + ptr0[i] = var37; + } + +} + +void +video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, orc_int64 p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 33, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 118, 101, 114, 116, 101, 114, 114, 95, 52, 117, 56, + 95, + 109, 97, 115, 107, 11, 4, 4, 11, 8, 8, 18, 8, 20, 8, 20, 8, + 134, 32, 24, 21, 2, 150, 33, 0, 21, 2, 70, 33, 1, 33, 21, 2, + 73, 1, 32, 33, 21, 2, 74, 33, 32, 33, 21, 2, 160, 0, 33, 2, + 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_verterr_4u8_mask); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_verterr_4u8_mask"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_verterr_4u8_mask); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_parameter_int64 (p, 8, "p1"); + orc_program_add_temporary (p, 8, "t1"); + orc_program_add_temporary (p, 8, "t2"); + + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 2, ORC_VAR_T2, ORC_VAR_D1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 2, ORC_VAR_T2, ORC_VAR_D2, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 2, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "andnw", 2, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T2, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_fs_muladd_u8 */ +#ifdef DISABLE_ORC +void +video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var34; +#else + orc_union16 var34; +#endif + orc_union16 var35; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var36; +#else + orc_union16 var36; +#endif + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + + ptr0 = (orc_union16 *) d1; + + /* 1: loadpw */ + var34.i = (int) 0x00000005; /* 5 or 2.47033e-323f */ + /* 6: loadpw */ + var36.i = (int) 0x00000003; /* 3 or 1.4822e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadoffw */ + var38 = ptr0[i + 4]; + /* 2: mullw */ + var39.i = (var38.i * var34.i) & 0xffff; + /* 3: loadw */ + var35 = ptr0[i]; + /* 4: addw */ + var40.i = var39.i + var35.i; + /* 5: loadoffw */ + var41 = ptr0[i + 8]; + /* 7: mullw */ + var42.i = (var41.i * var36.i) & 0xffff; + /* 8: addw */ + var37.i = var40.i + var42.i; + /* 9: storew */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_video_orc_dither_fs_muladd_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var34; +#else + orc_union16 var34; +#endif + orc_union16 var35; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var36; +#else + orc_union16 var36; +#endif + orc_union16 var37; + orc_union16 var38; + orc_union16 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + + ptr0 = (orc_union16 *) ex->arrays[0]; + + /* 1: loadpw */ + var34.i = (int) 0x00000005; /* 5 or 2.47033e-323f */ + /* 6: loadpw */ + var36.i = (int) 0x00000003; /* 3 or 1.4822e-323f */ + + for (i = 0; i < n; i++) { + /* 0: loadoffw */ + var38 = ptr0[i + 4]; + /* 2: mullw */ + var39.i = (var38.i * var34.i) & 0xffff; + /* 3: loadw */ + var35 = ptr0[i]; + /* 4: addw */ + var40.i = var39.i + var35.i; + /* 5: loadoffw */ + var41 = ptr0[i + 8]; + /* 7: mullw */ + var42.i = (var41.i * var36.i) & 0xffff; + /* 8: addw */ + var37.i = var40.i + var42.i; + /* 9: storew */ + ptr0[i] = var37; + } + +} + +void +video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 102, 115, 95, 109, 117, 108, 97, 100, 100, 95, 117, + 56, + 11, 2, 2, 14, 4, 4, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, + 4, 8, 0, 0, 0, 14, 2, 3, 0, 0, 0, 20, 2, 20, 2, 83, + 33, 0, 16, 89, 33, 33, 17, 70, 32, 33, 0, 83, 33, 0, 18, 89, + 33, 33, 19, 70, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_fs_muladd_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_fs_muladd_u8"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_fs_muladd_u8); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_constant (p, 4, 0x00000004, "c1"); + orc_program_add_constant (p, 2, 0x00000005, "c2"); + orc_program_add_constant (p, 4, 0x00000008, "c3"); + orc_program_add_constant (p, 2, 0x00000003, "c4"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + + orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_C1, ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_C3, ORC_VAR_D1); + orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_ordered_u8 */ +#ifdef DISABLE_ORC +void +video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + int i; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + + ptr0 = (orc_int8 *) d1; + ptr4 = (orc_int8 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr0[i]; + /* 1: loadb */ + var33 = ptr4[i]; + /* 2: addusb */ + var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33); + /* 3: storeb */ + ptr0[i] = var34; + } + +} + +#else +static void +_backup_video_orc_dither_ordered_u8 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_int8 *ORC_RESTRICT ptr0; + const orc_int8 *ORC_RESTRICT ptr4; + orc_int8 var32; + orc_int8 var33; + orc_int8 var34; + + ptr0 = (orc_int8 *) ex->arrays[0]; + ptr4 = (orc_int8 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr0[i]; + /* 1: loadb */ + var33 = ptr4[i]; + /* 2: addusb */ + var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33); + /* 3: storeb */ + ptr0[i] = var34; + } + +} + +void +video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 117, 56, 11, + 1, + 1, 12, 1, 1, 35, 0, 0, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_dither_ordered_u8); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_ordered_u8"); + orc_program_set_backup_function (p, _backup_video_orc_dither_ordered_u8); + orc_program_add_destination (p, 1, "d1"); + orc_program_add_source (p, 1, "s1"); + + orc_program_append_2 (p, "addusb", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_ordered_4u8_mask */ +#ifdef DISABLE_ORC +void +video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union32 var34; + orc_union64 var35; + orc_union32 var36; + orc_union64 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union64 *) s1; + + /* 0: loadpq */ + var37.i = p1; + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var34 = ptr0[i]; + /* 2: convubw */ + var38.x4[0] = (orc_uint8) var34.x4[0]; + var38.x4[1] = (orc_uint8) var34.x4[1]; + var38.x4[2] = (orc_uint8) var34.x4[2]; + var38.x4[3] = (orc_uint8) var34.x4[3]; + /* 3: loadq */ + var35 = ptr4[i]; + /* 4: addw */ + var39.x4[0] = var38.x4[0] + var35.x4[0]; + var39.x4[1] = var38.x4[1] + var35.x4[1]; + var39.x4[2] = var38.x4[2] + var35.x4[2]; + var39.x4[3] = var38.x4[3] + var35.x4[3]; + /* 5: andnw */ + var40.x4[0] = (~var37.x4[0]) & var39.x4[0]; + var40.x4[1] = (~var37.x4[1]) & var39.x4[1]; + var40.x4[2] = (~var37.x4[2]) & var39.x4[2]; + var40.x4[3] = (~var37.x4[3]) & var39.x4[3]; + /* 6: convsuswb */ + var36.x4[0] = ORC_CLAMP_UB (var40.x4[0]); + var36.x4[1] = ORC_CLAMP_UB (var40.x4[1]); + var36.x4[2] = ORC_CLAMP_UB (var40.x4[2]); + var36.x4[3] = ORC_CLAMP_UB (var40.x4[3]); + /* 7: storel */ + ptr0[i] = var36; + } + +} + +#else +static void +_backup_video_orc_dither_ordered_4u8_mask (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union32 var34; + orc_union64 var35; + orc_union32 var36; + orc_union64 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union64 *) ex->arrays[4]; + + /* 0: loadpq */ + var37.i = + (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); + + for (i = 0; i < n; i++) { + /* 1: loadl */ + var34 = ptr0[i]; + /* 2: convubw */ + var38.x4[0] = (orc_uint8) var34.x4[0]; + var38.x4[1] = (orc_uint8) var34.x4[1]; + var38.x4[2] = (orc_uint8) var34.x4[2]; + var38.x4[3] = (orc_uint8) var34.x4[3]; + /* 3: loadq */ + var35 = ptr4[i]; + /* 4: addw */ + var39.x4[0] = var38.x4[0] + var35.x4[0]; + var39.x4[1] = var38.x4[1] + var35.x4[1]; + var39.x4[2] = var38.x4[2] + var35.x4[2]; + var39.x4[3] = var38.x4[3] + var35.x4[3]; + /* 5: andnw */ + var40.x4[0] = (~var37.x4[0]) & var39.x4[0]; + var40.x4[1] = (~var37.x4[1]) & var39.x4[1]; + var40.x4[2] = (~var37.x4[2]) & var39.x4[2]; + var40.x4[3] = (~var37.x4[3]) & var39.x4[3]; + /* 6: convsuswb */ + var36.x4[0] = ORC_CLAMP_UB (var40.x4[0]); + var36.x4[1] = ORC_CLAMP_UB (var40.x4[1]); + var36.x4[2] = ORC_CLAMP_UB (var40.x4[2]); + var36.x4[3] = ORC_CLAMP_UB (var40.x4[3]); + /* 7: storel */ + ptr0[i] = var36; + } + +} + +void +video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 33, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 52, 117, 56, + 95, + 109, 97, 115, 107, 11, 4, 4, 12, 8, 8, 18, 8, 20, 8, 20, 8, + 134, 33, 24, 21, 2, 150, 32, 0, 21, 2, 70, 32, 32, 4, 21, 2, + 74, 32, 33, 32, 21, 2, 160, 0, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_ordered_4u8_mask); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_ordered_4u8_mask"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_ordered_4u8_mask); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_parameter_int64 (p, 8, "p1"); + orc_program_add_temporary (p, 8, "t1"); + orc_program_add_temporary (p, 8, "t2"); + + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "convubw", 2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addw", 2, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "andnw", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T1, + ORC_VAR_D1, ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } + + func = c->exec; + func (ex); +} +#endif + + +/* video_orc_dither_ordered_4u16_mask */ +#ifdef DISABLE_ORC +void +video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var34; + orc_union64 var35; + orc_union64 var36; + orc_union64 var37; + orc_union64 var38; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union64 *) s1; + + /* 0: loadpq */ + var37.i = p1; + + for (i = 0; i < n; i++) { + /* 1: loadq */ + var34 = ptr0[i]; + /* 2: loadq */ + var35 = ptr4[i]; + /* 3: addusw */ + var38.x4[0] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[0] + (orc_uint16) var35.x4[0]); + var38.x4[1] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[1] + (orc_uint16) var35.x4[1]); + var38.x4[2] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[2] + (orc_uint16) var35.x4[2]); + var38.x4[3] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[3] + (orc_uint16) var35.x4[3]); + /* 4: andnw */ + var36.x4[0] = (~var37.x4[0]) & var38.x4[0]; + var36.x4[1] = (~var37.x4[1]) & var38.x4[1]; + var36.x4[2] = (~var37.x4[2]) & var38.x4[2]; + var36.x4[3] = (~var37.x4[3]) & var38.x4[3]; + /* 5: storeq */ + ptr0[i] = var36; + } + +} + +#else +static void +_backup_video_orc_dither_ordered_4u16_mask (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union64 *ORC_RESTRICT ptr4; + orc_union64 var34; + orc_union64 var35; + orc_union64 var36; + orc_union64 var37; + orc_union64 var38; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union64 *) ex->arrays[4]; + + /* 0: loadpq */ + var37.i = + (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 + + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32); + + for (i = 0; i < n; i++) { + /* 1: loadq */ + var34 = ptr0[i]; + /* 2: loadq */ + var35 = ptr4[i]; + /* 3: addusw */ + var38.x4[0] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[0] + (orc_uint16) var35.x4[0]); + var38.x4[1] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[1] + (orc_uint16) var35.x4[1]); + var38.x4[2] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[2] + (orc_uint16) var35.x4[2]); + var38.x4[3] = + ORC_CLAMP_UW ((orc_uint16) var34.x4[3] + (orc_uint16) var35.x4[3]); + /* 4: andnw */ + var36.x4[0] = (~var37.x4[0]) & var38.x4[0]; + var36.x4[1] = (~var37.x4[1]) & var38.x4[1]; + var36.x4[2] = (~var37.x4[2]) & var38.x4[2]; + var36.x4[3] = (~var37.x4[3]) & var38.x4[3]; + /* 5: storeq */ + ptr0[i] = var36; + } + +} + +void +video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116, + 104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 52, 117, 49, + 54, + 95, 109, 97, 115, 107, 11, 8, 8, 12, 8, 8, 18, 8, 20, 8, 20, + 8, 134, 33, 24, 21, 2, 72, 32, 0, 4, 21, 2, 74, 0, 33, 32, + 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_video_orc_dither_ordered_4u16_mask); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_dither_ordered_4u16_mask"); + orc_program_set_backup_function (p, + _backup_video_orc_dither_ordered_4u16_mask); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 8, "s1"); + orc_program_add_parameter_int64 (p, 8, "p1"); + orc_program_add_temporary (p, 8, "t1"); + orc_program_add_temporary (p, 8, "t2"); + + orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "addusw", 2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "andnw", 2, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + { + orc_union64 tmp; + tmp.i = p1; + ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff; + ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32; + } func = c->exec; func (ex); diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc-dist.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc-dist.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc-dist.h 2014-08-27 10:22:57.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc-dist.h 2015-10-22 08:02:05.000000000 +0000 @@ -84,6 +84,7 @@ void video_orc_blend_big (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); void video_orc_unpack_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n); void video_orc_pack_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); void video_orc_unpack_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); void video_orc_pack_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); void video_orc_pack_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); @@ -111,8 +112,118 @@ void video_orc_pack_NV24 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); void video_orc_unpack_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n); +void video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n, int m); +void video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n); +void video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); +void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); +void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int n); +void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); +void video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m); +void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m); +void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); +void video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m); +void video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m); +void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m); +void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m); +void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); +void video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); +void video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); +void video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m); +void video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n); +void video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n); +void _custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n); +void video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int p1, int p2, int n); +void video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n); +void video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n); +void video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int n); +void video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1, int n); +void video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int n); +void video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n); +void video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n); +void video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n); +void video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n); +void video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n); +void video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, const gint16 * ORC_RESTRICT s7, int n); +void video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1, int n); +void video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n); +void video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride, const guint16 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m); +void video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n); +void video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n); +void video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n); +void video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n); +void video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n); +void video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); +void video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n); +void video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n); +void video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n); +void video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); +void video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n); +void video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n); +void video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n); +void video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, orc_int64 p1, int n); +void video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n); +void video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n); +void video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n); #ifdef __cplusplus } diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc.orc gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc.orc --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-orc.orc 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-orc.orc 2015-10-22 08:01:34.000000000 +0000 @@ -96,6 +96,14 @@ select0wb u, uu select0wb v, vv +.function video_orc_pack_Y +.dest 1 y guint8 +.source 4 ayuv guint8 +.temp 2 ay + +select0lw ay, ayuv +select1wb y, ay + .function video_orc_unpack_YUY2 .dest 8 ayuv guint8 .source 4 yuy2 guint8 @@ -297,80 +305,46 @@ .function video_orc_pack_RGBA .dest 4 rgba guint8 .source 4 argb guint8 -.temp 1 a -.temp 1 r -.temp 1 g -.temp 1 b -.temp 2 rg -.temp 2 ba -.temp 2 ar -.temp 2 gb - -splitlw gb, ar, argb -splitwb b, g, gb -splitwb r, a, ar -mergebw ba, b, a -mergebw rg, r, g -mergewl rgba, rg, ba +.temp 4 a +.temp 4 r + +loadl r, argb +shrul a, r, 8 +shll r, r, 24 +orl rgba, r, a .function video_orc_unpack_RGBA .dest 4 argb guint8 .source 4 rgba guint8 -.temp 1 a -.temp 1 r -.temp 1 g -.temp 1 b -.temp 2 rg -.temp 2 ba -.temp 2 ar -.temp 2 gb - -splitlw ba, rg, rgba -splitwb g, r, rg -splitwb a, b, ba -mergebw ar, a, r -mergebw gb, g, b -mergewl argb, ar, gb +.temp 4 a +.temp 4 r +loadl r, rgba +shll a, r, 8 +shrul r, r, 24 +orl argb, r, a .function video_orc_unpack_ABGR .dest 4 argb guint8 .source 4 abgr guint8 -.temp 1 a -.temp 1 r -.temp 1 g -.temp 1 b -.temp 2 gr -.temp 2 ab -.temp 2 ar -.temp 2 gb - -splitlw gr, ab, abgr -splitwb r, g, gr -splitwb b, a, ab -mergebw ar, a, r -mergebw gb, g, b -mergewl argb, ar, gb +.temp 4 a +.temp 4 r +swapl r, abgr +shll a, r, 8 +shrul r, r, 24 +orl argb, r, a .function video_orc_pack_ABGR .dest 4 abgr guint8 .source 4 argb guint8 -.temp 1 a -.temp 1 r -.temp 1 g -.temp 1 b -.temp 2 gr -.temp 2 ab -.temp 2 ar -.temp 2 gb - -splitlw gb, ar, argb -splitwb b, g, gb -splitwb r, a, ar -mergebw ab, a, b -mergebw gr, g, r -mergewl abgr, ab, gr +.temp 4 a +.temp 4 r + +swapl r, argb +shll a, r, 8 +shrul r, r, 24 +orl abgr, r, a .function video_orc_unpack_NV12 .dest 8 d guint8 @@ -477,6 +451,451 @@ select0wb u, uu select0wb v, vv +.function video_orc_pack_AY +.dest 1 y guint8 +.dest 1 a guint8 +.source 4 ayuv guint8 +.temp 2 ay + +select0lw ay, ayuv +select1wb y, ay +select0wb a, ay + +.function video_orc_unpack_RGB15_le +.dest 4 argb guint32 +.source 2 rgb15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, rgb15 +andw r, t, 0x7c00 +andw g, t, 0x03e0 +andw b, t, 0x001f +shlw b, b, 5 +mulhsw r, r, 0x0210 +mulhsw g, g, 0x4200 +mulhsw b, b, 0x4200 +mergewl ag, 0xff, g +mergewl rb, r, b +shll rb, rb, 8 +orl argb, ag, rb + +.function video_orc_unpack_RGB15_be +.dest 4 argb guint32 +.source 2 rgb15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, rgb15 +andw r, t, 0x7c00 +andw g, t, 0x03e0 +andw b, t, 0x001f +shlw b, b, 5 +mulhsw r, r, 0x0210 +mulhsw g, g, 0x4200 +mulhsw b, b, 0x4200 +mergewl ag, 0xff, g +mergewl rb, r, b +shll ag, ag, 8 +orl argb, ag, rb + +.function video_orc_unpack_RGB15_le_trunc +.dest 4 argb guint32 +.source 2 rgb15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, rgb15 +andw r, t, 0x7c00 +andw g, t, 0x03e0 +andw b, t, 0x001f +shruw r, r, 7 +shruw g, g, 2 +shlw b, b, 3 +mergewl ag, 0xff, g +mergewl rb, r, b +shll rb, rb, 8 +orl argb, ag, rb + +.function video_orc_unpack_RGB15_be_trunc +.dest 4 argb guint32 +.source 2 rgb15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, rgb15 +andw r, t, 0x7c00 +andw g, t, 0x03e0 +andw b, t, 0x001f +shruw r, r, 7 +shruw g, g, 2 +shlw b, b, 3 +mergewl ag, 0xff, g +mergewl rb, r, b +shll ag, ag, 8 +orl argb, ag, rb + +.function video_orc_pack_RGB15_le +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf800 +andl g, t, 0xf80000 +andl b, t, 0xf8000000 +shrul r, r, 1 +shrul g, g, 14 +shrul b, b, 27 +orl t2, r, g +orl t2, t2, b +select0lw rgb15, t2 + +.function video_orc_pack_RGB15_be +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf80000 +andl g, t, 0xf800 +andl b, t, 0xf8 +shrul r, r, 9 +shrul g, g, 6 +shrul b, b, 3 +orl t2, r, g +orl t2, t2, b +select1lw rgb15, t2 + +.function video_orc_unpack_BGR15_le +.dest 4 argb guint32 +.source 2 bgr15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, bgr15 +andw b, t, 0x7c00 +andw g, t, 0x03e0 +andw r, t, 0x001f +shlw r, r, 5 +mulhsw b, b, 0x0210 +mulhsw g, g, 0x4200 +mulhsw r, r, 0x4200 +mergewl ag, 0xff, g +mergewl rb, r, b +shll rb, rb, 8 +orl argb, ag, rb + +.function video_orc_unpack_BGR15_be +.dest 4 argb guint32 +.source 2 bgr15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, bgr15 +andw b, t, 0x7c00 +andw g, t, 0x03e0 +andw r, t, 0x001f +shlw r, r, 5 +mulhsw b, b, 0x0210 +mulhsw g, g, 0x4200 +mulhsw r, r, 0x4200 +mergewl ag, 0xff, g +mergewl rb, r, b +shll ag, ag, 8 +orl argb, ag, rb + +.function video_orc_unpack_BGR15_le_trunc +.dest 4 argb guint32 +.source 2 bgr15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, bgr15 +andw b, t, 0x7c00 +andw g, t, 0x03e0 +andw r, t, 0x001f +shruw b, b, 7 +shruw g, g, 2 +shlw r, r, 3 +mergewl ag, 0xff, g +mergewl rb, r, b +shll rb, rb, 8 +orl argb, ag, rb + +.function video_orc_unpack_BGR15_be_trunc +.dest 4 argb guint32 +.source 2 bgr15 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ag +.temp 4 rb + +loadw t, bgr15 +andw b, t, 0x7c00 +andw g, t, 0x03e0 +andw r, t, 0x001f +shruw b, b, 7 +shruw g, g, 2 +shlw r, r, 3 +mergewl ag, 0xff, g +mergewl rb, r, b +shll ag, ag, 8 +orl argb, ag, rb + +.function video_orc_pack_BGR15_le +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf800 +andl g, t, 0xf80000 +andl b, t, 0xf8000000 +shrul b, b, 17 +shrul g, g, 14 +shrul r, r, 11 +orl t2, r, g +orl t2, t2, b +select0lw rgb15, t2 + +.function video_orc_pack_BGR15_be +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf80000 +andl g, t, 0xf800 +andl b, t, 0xf8 +shll b, b, 7 +shrul g, g, 6 +shrul r, r, 19 +orl t2, r, g +orl t2, t2, b +select1lw rgb15, t2 + +.function video_orc_unpack_RGB16 +.dest 4 argb guint32 +.source 2 rgb16 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ar +.temp 4 gb +.temp 8 t2 + +loadw t, rgb16 +andw r, t, 0xf800 +andw g, t, 0x07e0 +andw b, t, 0x001f +shruw r, r, 6 +shlw b, b, 5 +mulhsw r, r, 0x4200 +mulhsw g, g, 0x2080 +mulhsw b, b, 0x4200 +mergewl ar, 0xff, r +mergewl gb, g, b +mergelq t2, ar, gb +x4 convsuswb argb, t2 + +.function video_orc_unpack_RGB16_trunc +.dest 4 argb guint32 +.source 2 rgb16 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ar +.temp 4 gb +.temp 8 t2 + +loadw t, rgb16 +andw r, t, 0xf800 +andw g, t, 0x07e0 +andw b, t, 0x001f +shruw r, r, 8 +shruw g, g, 3 +shlw b, b, 3 +mergewl ar, 0xff, r +mergewl gb, g, b +mergelq t2, ar, gb +x4 convsuswb argb, t2 + +.function video_orc_pack_RGB16_le +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf800 +andl g, t, 0xfc0000 +andl b, t, 0xf8000000 +shrul g, g, 13 +shrul b, b, 27 +orl t2, r, g +orl t2, t2, b +select0lw rgb15, t2 + +.function video_orc_pack_RGB16_be +.dest 2 rgb16 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf80000 +andl g, t, 0xfc00 +andl b, t, 0xf8 +shrul r, r, 8 +shrul g, g, 5 +shrul b, b, 3 +orl t2, r, g +orl t2, t2, b +select1lw rgb16, t2 + +.function video_orc_unpack_BGR16 +.dest 4 argb guint32 +.source 2 bgr16 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ar +.temp 4 gb +.temp 8 t2 + +loadw t, bgr16 +andw b, t, 0xf800 +andw g, t, 0x07e0 +andw r, t, 0x001f +shruw b, b, 6 +shlw r, r, 5 +mulhsw b, b, 0x4200 +mulhsw g, g, 0x2080 +mulhsw r, r, 0x4200 +mergewl ar, 0xff, r +mergewl gb, g, b +mergelq t2, ar, gb +x4 convsuswb argb, t2 + +.function video_orc_unpack_BGR16_trunc +.dest 4 argb guint32 +.source 2 bgr16 guint16 +.temp 2 t +.temp 2 r +.temp 2 g +.temp 2 b +.temp 4 ar +.temp 4 gb +.temp 8 t2 + +loadw t, bgr16 +andw b, t, 0xf800 +andw g, t, 0x07e0 +andw r, t, 0x001f +shruw b, b, 8 +shruw g, g, 3 +shlw r, r, 3 +mergewl ar, 0xff, r +mergewl gb, g, b +mergelq t2, ar, gb +x4 convsuswb argb, t2 + +.function video_orc_pack_BGR16_le +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf800 +andl g, t, 0xfc0000 +andl b, t, 0xf8000000 +shrul r, r, 11 +shrul g, g, 13 +shrul b, b, 16 +orl t2, r, g +orl t2, t2, b +select0lw rgb15, t2 + +.function video_orc_pack_BGR16_be +.dest 2 rgb15 guint16 +.source 4 argb guint32 +.temp 4 t +.temp 4 r +.temp 4 g +.temp 4 b +.temp 4 t2 + +loadl t, argb +andl r, t, 0xf80000 +andl g, t, 0xfc00 +andl b, t, 0xf8 +shll b, b, 8 +shrul g, g, 5 +shrul r, r, 19 +orl t2, r, g +orl t2, t2, b +select1lw rgb15, t2 + .function video_orc_resample_bilinear_u32 .dest 4 d1 guint8 .source 4 s1 guint8 @@ -503,3 +922,1633 @@ addw t2, t2, 128 convhwb t, t2 addb d1, t, a + + +.function video_orc_memset_2d +.flags 2d +.dest 1 d1 guint8 +.param 1 p1 + +storeb d1, p1 + +.function video_orc_memcpy_2d +.flags 2d +.dest 1 d1 guint8 +.source 1 s1 guint8 + +copyb d1, s1 + +.function video_orc_convert_u16_to_u8 +.source 2 s guint16 +.dest 1 d guint8 + +convhwb d, s + +.function video_orc_convert_u8_to_u16 +.source 1 s guint8 +.dest 2 d guint16 + +mergebw d, s, s + +.function video_orc_splat_u16 +.dest 2 d1 guint8 +.param 2 p1 + +storew d1, p1 + +.function video_orc_splat_u32 +.dest 4 d1 guint8 +.param 4 p1 + +storel d1, p1 + +.function video_orc_splat_u64 +.dest 8 d1 guint8 +.longparam 8 p1 + +storeq d1, p1 + +.function video_orc_splat2_u64 +.dest 8 d1 guint8 +.param 4 p1 +.temp 4 p + +loadpl p, p1 +x4 mergebw d1, p, p + +.function video_orc_convert_I420_UYVY +.dest 4 d1 guint8 +.dest 4 d2 guint8 +.source 2 y1 guint8 +.source 2 y2 guint8 +.source 1 u guint8 +.source 1 v guint8 +.temp 2 uv + +mergebw uv, u, v +x2 mergebw d1, uv, y1 +x2 mergebw d2, uv, y2 + + +.function video_orc_convert_I420_YUY2 +.dest 4 d1 guint8 +.dest 4 d2 guint8 +.source 2 y1 guint8 +.source 2 y2 guint8 +.source 1 u guint8 +.source 1 v guint8 +.temp 2 uv + +mergebw uv, u, v +x2 mergebw d1, y1, uv +x2 mergebw d2, y2, uv + + + +.function video_orc_convert_I420_AYUV +.dest 4 d1 guint8 +.dest 4 d2 guint8 +.source 1 y1 guint8 +.source 1 y2 guint8 +.source 1 u guint8 +.source 1 v guint8 +.param 1 alpha +.temp 2 uv +.temp 2 ay +.temp 1 tu +.temp 1 tv + +loadupdb tu, u +loadupdb tv, v +mergebw uv, tu, tv +mergebw ay, alpha, y1 +mergewl d1, ay, uv +mergebw ay, alpha, y2 +mergewl d2, ay, uv + + +.function video_orc_convert_YUY2_I420 +.dest 2 y1 guint8 +.dest 2 y2 guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 4 yuv1 guint8 +.source 4 yuv2 guint8 +.temp 2 t1 +.temp 2 t2 +.temp 2 ty + +x2 splitwb t1, ty, yuv1 +storew y1, ty +x2 splitwb t2, ty, yuv2 +storew y2, ty +x2 avgub t1, t1, t2 +splitwb v, u, t1 + + +.function video_orc_convert_UYVY_YUY2 +.flags 2d +.dest 4 yuy2 guint8 +.source 4 uyvy guint8 + +x2 swapw yuy2, uyvy + + +.function video_orc_planar_chroma_420_422 +.flags 2d +.dest 1 d1 guint8 +.dest 1 d2 guint8 +.source 1 s guint8 + +copyb d1, s +copyb d2, s + + +.function video_orc_planar_chroma_420_444 +.flags 2d +.dest 2 d1 guint8 +.dest 2 d2 guint8 +.source 1 s guint8 +.temp 2 t + +splatbw t, s +storew d1, t +storew d2, t + + +.function video_orc_planar_chroma_422_444 +.flags 2d +.dest 2 d1 guint8 +.source 1 s guint8 +.temp 2 t + +splatbw t, s +storew d1, t + + +.function video_orc_planar_chroma_444_422 +.flags 2d +.dest 1 d guint8 +.source 2 s guint8 +.temp 1 t1 +.temp 1 t2 + +splitwb t1, t2, s +avgub d, t1, t2 + + +.function video_orc_planar_chroma_444_420 +.flags 2d +.dest 1 d guint8 +.source 2 s1 guint8 +.source 2 s2 guint8 +.temp 2 t +.temp 1 t1 +.temp 1 t2 + +x2 avgub t, s1, s2 +splitwb t1, t2, t +avgub d, t1, t2 + + +.function video_orc_planar_chroma_422_420 +.flags 2d +.dest 1 d guint8 +.source 1 s1 guint8 +.source 1 s2 guint8 + +avgub d, s1, s2 + + +.function video_orc_convert_YUY2_AYUV +.flags 2d +.dest 8 ayuv guint8 +.source 4 yuy2 guint8 +.param 1 alpha +.temp 2 yy +.temp 2 uv +.temp 4 ayay +.temp 4 uvuv + +x2 splitwb uv, yy, yuy2 +x2 mergebw ayay, alpha, yy +mergewl uvuv, uv, uv +x2 mergewl ayuv, ayay, uvuv + + +.function video_orc_convert_UYVY_AYUV +.flags 2d +.dest 8 ayuv guint8 +.source 4 uyvy guint8 +.param 1 alpha +.temp 2 yy +.temp 2 uv +.temp 4 ayay +.temp 4 uvuv + +x2 splitwb yy, uv, uyvy +x2 mergebw ayay, alpha, yy +mergewl uvuv, uv, uv +x2 mergewl ayuv, ayay, uvuv + + +.function video_orc_convert_YUY2_Y42B +.flags 2d +.dest 2 y guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 4 yuy2 guint8 +.temp 2 uv + +x2 splitwb uv, y, yuy2 +splitwb v, u, uv + + +.function video_orc_convert_UYVY_Y42B +.flags 2d +.dest 2 y guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 4 uyvy guint8 +.temp 2 uv + +x2 splitwb y, uv, uyvy +splitwb v, u, uv + + +.function video_orc_convert_YUY2_Y444 +.flags 2d +.dest 2 y guint8 +.dest 2 uu guint8 +.dest 2 vv guint8 +.source 4 yuy2 guint8 +.temp 2 uv +.temp 1 u +.temp 1 v + +x2 splitwb uv, y, yuy2 +splitwb v, u, uv +splatbw uu, u +splatbw vv, v + + +.function video_orc_convert_UYVY_Y444 +.flags 2d +.dest 2 y guint8 +.dest 2 uu guint8 +.dest 2 vv guint8 +.source 4 uyvy guint8 +.temp 2 uv +.temp 1 u +.temp 1 v + +x2 splitwb y, uv, uyvy +splitwb v, u, uv +splatbw uu, u +splatbw vv, v + + +.function video_orc_convert_UYVY_I420 +.dest 2 y1 guint8 +.dest 2 y2 guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 4 yuv1 guint8 +.source 4 yuv2 guint8 +.temp 2 t1 +.temp 2 t2 +.temp 2 ty + +x2 splitwb ty, t1, yuv1 +storew y1, ty +x2 splitwb ty, t2, yuv2 +storew y2, ty +x2 avgub t1, t1, t2 +splitwb v, u, t1 + + + +.function video_orc_convert_AYUV_I420 +.flags 2d +.dest 2 y1 guint8 +.dest 2 y2 guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 8 ayuv1 guint8 +.source 8 ayuv2 guint8 +.temp 4 ay +.temp 4 uv1 +.temp 4 uv2 +.temp 4 uv +.temp 2 uu +.temp 2 vv +.temp 1 t1 +.temp 1 t2 + +x2 splitlw uv1, ay, ayuv1 +x2 select1wb y1, ay +x2 splitlw uv2, ay, ayuv2 +x2 select1wb y2, ay +x4 avgub uv, uv1, uv2 +x2 splitwb vv, uu, uv +splitwb t1, t2, uu +avgub u, t1, t2 +splitwb t1, t2, vv +avgub v, t1, t2 + + + +.function video_orc_convert_AYUV_YUY2 +.flags 2d +.dest 4 yuy2 guint8 +.source 8 ayuv guint8 +.temp 2 yy +.temp 2 uv1 +.temp 2 uv2 +.temp 4 ayay +.temp 4 uvuv + +x2 splitlw uvuv, ayay, ayuv +splitlw uv1, uv2, uvuv +x2 avgub uv1, uv1, uv2 +x2 select1wb yy, ayay +x2 mergebw yuy2, yy, uv1 + + +.function video_orc_convert_AYUV_UYVY +.flags 2d +.dest 4 yuy2 guint8 +.source 8 ayuv guint8 +.temp 2 yy +.temp 2 uv1 +.temp 2 uv2 +.temp 4 ayay +.temp 4 uvuv + +x2 splitlw uvuv, ayay, ayuv +splitlw uv1, uv2, uvuv +x2 avgub uv1, uv1, uv2 +x2 select1wb yy, ayay +x2 mergebw yuy2, uv1, yy + + + +.function video_orc_convert_AYUV_Y42B +.flags 2d +.dest 2 y guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 8 ayuv guint8 +.temp 4 ayay +.temp 4 uvuv +.temp 2 uv1 +.temp 2 uv2 + +x2 splitlw uvuv, ayay, ayuv +splitlw uv1, uv2, uvuv +x2 avgub uv1, uv1, uv2 +splitwb v, u, uv1 +x2 select1wb y, ayay + + +.function video_orc_convert_AYUV_Y444 +.flags 2d +.dest 1 y guint8 +.dest 1 u guint8 +.dest 1 v guint8 +.source 4 ayuv guint8 +.temp 2 ay +.temp 2 uv + +splitlw uv, ay, ayuv +splitwb v, u, uv +select1wb y, ay + + +.function video_orc_convert_Y42B_YUY2 +.flags 2d +.dest 4 yuy2 guint8 +.source 2 y guint8 +.source 1 u guint8 +.source 1 v guint8 +.temp 2 uv + +mergebw uv, u, v +x2 mergebw yuy2, y, uv + + +.function video_orc_convert_Y42B_UYVY +.flags 2d +.dest 4 uyvy guint8 +.source 2 y guint8 +.source 1 u guint8 +.source 1 v guint8 +.temp 2 uv + +mergebw uv, u, v +x2 mergebw uyvy, uv, y + + +.function video_orc_convert_Y42B_AYUV +.flags 2d +.dest 8 ayuv guint8 +.source 2 yy guint8 +.source 1 u guint8 +.source 1 v guint8 +.param 1 alpha +.temp 2 uv +.temp 2 ay +.temp 4 uvuv +.temp 4 ayay + +mergebw uv, u, v +x2 mergebw ayay, alpha, yy +mergewl uvuv, uv, uv +x2 mergewl ayuv, ayay, uvuv + + +.function video_orc_convert_Y444_YUY2 +.flags 2d +.dest 4 yuy2 guint8 +.source 2 y guint8 +.source 2 u guint8 +.source 2 v guint8 +.temp 2 uv +.temp 4 uvuv +.temp 2 uv1 +.temp 2 uv2 + +x2 mergebw uvuv, u, v +splitlw uv1, uv2, uvuv +x2 avgub uv, uv1, uv2 +x2 mergebw yuy2, y, uv + + +.function video_orc_convert_Y444_UYVY +.flags 2d +.dest 4 uyvy guint8 +.source 2 y guint8 +.source 2 u guint8 +.source 2 v guint8 +.temp 2 uv +.temp 4 uvuv +.temp 2 uv1 +.temp 2 uv2 + +x2 mergebw uvuv, u, v +splitlw uv1, uv2, uvuv +x2 avgub uv, uv1, uv2 +x2 mergebw uyvy, uv, y + + +.function video_orc_convert_Y444_AYUV +.flags 2d +.dest 4 ayuv guint8 +.source 1 yy guint8 +.source 1 u guint8 +.source 1 v guint8 +.param 1 alpha +.temp 2 uv +.temp 2 ay + +mergebw uv, u, v +mergebw ay, alpha, yy +mergewl ayuv, ay, uv + + + +.function video_orc_convert_AYUV_ARGB +.flags 2d +.dest 4 argb guint8 +.source 4 ayuv guint8 +.param 2 p1 +.param 2 p2 +.param 2 p3 +.param 2 p4 +.param 2 p5 +.temp 1 a +.temp 1 y +.temp 1 u +.temp 1 v +.temp 2 wy +.temp 2 wu +.temp 2 wv +.temp 2 wr +.temp 2 wg +.temp 2 wb +.temp 1 r +.temp 1 g +.temp 1 b +.temp 4 x +.const 1 c128 128 + +x4 subb x, ayuv, c128 +splitlw wv, wy, x +splitwb y, a, wy +splitwb v, u, wv + +splatbw wy, y +splatbw wu, u +splatbw wv, v + +mulhsw wy, wy, p1 + +mulhsw wr, wv, p2 +addw wr, wy, wr +convssswb r, wr +mergebw wr, a, r + +mulhsw wb, wu, p3 +addw wb, wy, wb +convssswb b, wb + +mulhsw wg, wu, p4 +addw wg, wy, wg +mulhsw wy, wv, p5 +addw wg, wg, wy + +convssswb g, wg + +mergebw wb, g, b +mergewl x, wr, wb +x4 addb argb, x, c128 + +.function video_orc_convert_AYUV_BGRA +.flags 2d +.dest 4 bgra guint8 +.source 4 ayuv guint8 +.param 2 p1 +.param 2 p2 +.param 2 p3 +.param 2 p4 +.param 2 p5 +.temp 1 a +.temp 1 y +.temp 1 u +.temp 1 v +.temp 2 wy +.temp 2 wu +.temp 2 wv +.temp 2 wr +.temp 2 wg +.temp 2 wb +.temp 1 r +.temp 1 g +.temp 1 b +.temp 4 x +.const 1 c128 128 + +x4 subb x, ayuv, c128 +splitlw wv, wy, x +splitwb y, a, wy +splitwb v, u, wv + +splatbw wy, y +splatbw wu, u +splatbw wv, v + +mulhsw wy, wy, p1 + +mulhsw wr, wv, p2 +addw wr, wy, wr +convssswb r, wr +mergebw wr, r, a + +mulhsw wb, wu, p3 +addw wb, wy, wb +convssswb b, wb + +mulhsw wg, wu, p4 +addw wg, wy, wg +mulhsw wy, wv, p5 +addw wg, wg, wy + +convssswb g, wg + +mergebw wb, b, g +mergewl x, wb, wr +x4 addb bgra, x, c128 + + +.function video_orc_convert_AYUV_ABGR +.flags 2d +.dest 4 argb guint8 +.source 4 ayuv guint8 +.param 2 p1 +.param 2 p2 +.param 2 p3 +.param 2 p4 +.param 2 p5 +.temp 1 a +.temp 1 y +.temp 1 u +.temp 1 v +.temp 2 wy +.temp 2 wu +.temp 2 wv +.temp 2 wr +.temp 2 wg +.temp 2 wb +.temp 1 r +.temp 1 g +.temp 1 b +.temp 4 x +.const 1 c128 128 + +x4 subb x, ayuv, c128 +splitlw wv, wy, x +splitwb y, a, wy +splitwb v, u, wv + +splatbw wy, y +splatbw wu, u +splatbw wv, v + +mulhsw wy, wy, p1 + +mulhsw wr, wv, p2 +addw wr, wy, wr +convssswb r, wr + +mulhsw wb, wu, p3 +addw wb, wy, wb +convssswb b, wb +mergebw wb, a, b + +mulhsw wg, wu, p4 +addw wg, wy, wg +mulhsw wy, wv, p5 +addw wg, wg, wy + +convssswb g, wg + +mergebw wr, g, r +mergewl x, wb, wr +x4 addb argb, x, c128 + +.function video_orc_convert_AYUV_RGBA +.flags 2d +.dest 4 argb guint8 +.source 4 ayuv guint8 +.param 2 p1 +.param 2 p2 +.param 2 p3 +.param 2 p4 +.param 2 p5 +.temp 1 a +.temp 1 y +.temp 1 u +.temp 1 v +.temp 2 wy +.temp 2 wu +.temp 2 wv +.temp 2 wr +.temp 2 wg +.temp 2 wb +.temp 1 r +.temp 1 g +.temp 1 b +.temp 4 x +.const 1 c128 128 + +x4 subb x, ayuv, c128 +splitlw wv, wy, x +splitwb y, a, wy +splitwb v, u, wv + +splatbw wy, y +splatbw wu, u +splatbw wv, v + +mulhsw wy, wy, p1 + +mulhsw wr, wv, p2 +addw wr, wy, wr +convssswb r, wr + +mulhsw wb, wu, p3 +addw wb, wy, wb +convssswb b, wb +mergebw wb, b, a + +mulhsw wg, wu, p4 +addw wg, wy, wg +mulhsw wy, wv, p5 +addw wg, wg, wy + +convssswb g, wg + +mergebw wr, r, g +mergewl x, wr, wb +x4 addb argb, x, c128 + +.function video_orc_convert_I420_BGRA +.dest 4 argb guint8 +.source 1 y guint8 +.source 1 u guint8 +.source 1 v guint8 +.param 2 p1 +.param 2 p2 +.param 2 p3 +.param 2 p4 +.param 2 p5 +.temp 2 wy +.temp 2 wu +.temp 2 wv +.temp 2 wr +.temp 2 wg +.temp 2 wb +.temp 1 r +.temp 1 g +.temp 1 b +.temp 4 x +.const 1 c128 128 + +subb r, y, c128 +splatbw wy, r +loadupdb r, u +subb r, r, c128 +splatbw wu, r +loadupdb r, v +subb r, r, c128 +splatbw wv, r + +mulhsw wy, wy, p1 + +mulhsw wr, wv, p2 +addw wr, wy, wr +convssswb r, wr +mergebw wr, r, 127 + +mulhsw wb, wu, p3 +addw wb, wy, wb +convssswb b, wb + +mulhsw wg, wu, p4 +addw wg, wy, wg +mulhsw wy, wv, p5 +addw wg, wg, wy + +convssswb g, wg + +mergebw wb, b, g +mergewl x, wb, wr +x4 addb argb, x, c128 + +.function video_orc_matrix8 +.backup _custom_video_orc_matrix8 +.source 4 argb guint8 +.dest 4 ayuv guint8 +.longparam 8 p1 +.longparam 8 p2 +.longparam 8 p3 +.longparam 8 p4 +.const 1 c128 128 +.temp 2 w1 +.temp 2 w2 +.temp 1 b1 +.temp 1 b2 +.temp 4 l1 +.temp 4 ayuv2 +.temp 8 aq +.temp 8 q1 +.temp 8 pr1 +.temp 8 pr2 +.temp 8 pr3 + +loadpq pr1, p1 +loadpq pr2, p2 +loadpq pr3, p3 + +x4 subb l1, argb, c128 + +select0lw w1, l1 +select1lw w2, l1 +select0wb b1, w1 +select1wb b2, w1 + +convubw w1, b1 +convuwl l1, w1 +x4 mergebw aq, l1, l1 + +splatbl l1, b2 +mergelq q1, l1, l1 +x4 mulhsw q1, q1, pr1 +x4 addw aq, aq, q1 + +select0wb b1, w2 +splatbl l1,b1 +mergelq q1, l1, l1 +x4 mulhsw q1, q1, pr2 +x4 addw aq, aq, q1 + +select1wb b2, w2 +splatbl l1, b2 +mergelq q1, l1, l1 +x4 mulhsw q1, q1, pr3 +x4 addw aq, aq, q1 + +x4 convssswb ayuv2, aq +x4 addb ayuv, ayuv2, c128 + +#.function video_orc_resample_h_near_u32 +#.source 4 src guint32 +#.source 4 idx +#.dest 4 dest guint32 +#.temp 4 t +# +#loadidxl t, src, idx +#storel dest, t + +.function video_orc_resample_h_near_u32_lq +.dest 4 d1 guint32 +.source 4 s1 guint32 +.param 4 p1 +.param 4 p2 + +ldresnearl d1, s1, p1, p2 + +.function video_orc_resample_h_2tap_1u8_lq +.dest 1 d1 guint8 +.source 1 s1 guint8 +.param 4 p1 +.param 4 p2 + +ldreslinb d1, s1, p1, p2 + +.function video_orc_resample_h_2tap_4u8_lq +.dest 4 d1 guint32 +.source 4 s1 guint32 +.param 4 p1 +.param 4 p2 + +ldreslinl d1, s1, p1, p2 + +.function video_orc_resample_h_2tap_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 2 t1 gint16 +.source 2 t2 gint16 +.dest 1 d guint8 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +addw w1, w1, 32 +shrsw w1, w1, 6 +convsuswb d, w1 + +.function video_orc_resample_h_2tap_u16 +.source 2 s1 guint16 +.source 2 s2 guint16 +.source 2 t1 gint16 +.source 2 t2 gint16 +.dest 2 d guint16 +.temp 4 w1 +.temp 4 w2 +.temp 4 tl1 +.temp 4 tl2 + +convuwl w1, s1 +convswl tl1, t1 +mulll w1, w1, tl1 +convuwl w2, s2 +convswl tl2, t2 +mulll w2, w2, tl2 +addl w1, w1, w2 +addl w1, w1, 4096 +shrsl w1, w1, 12 +convsuslw d, w1 + +.function video_orc_resample_v_2tap_u8_lq +.source 1 src1 guint8 +.source 1 src2 guint8 +.dest 1 dest guint8 +.param 2 p1 gint16 +.temp 1 t +.temp 2 w1 +.temp 2 w2 + +convubw w1, src1 +convubw w2, src2 +subw w2, w2, w1 +mullw w2, w2, p1 +addw w2, w2, 128 +convhwb t, w2 +addb dest, t, src1 + +.function video_orc_resample_v_2tap_u16 +.source 2 src1 guint16 +.source 2 src2 guint16 +.dest 2 dest guint16 +.param 2 p1 gint16 +.temp 4 l1 +.temp 4 l2 +.temp 4 l3 + +convuwl l1, src1 +convuwl l2, src2 +subl l2, l2, l1 +convuwl l3, p1 +mulll l2, l2, l3 +addl l2, l2, 4096 +shrsl l2, l2, 12 +addl l1, l1, l2 +convsuslw dest, l1 + +.function video_orc_resample_v_2tap_u8 +.source 1 s1 guint8 +.source 1 s2 guint8 +.dest 1 d1 guint8 +.param 2 p1 gint16 +.temp 1 t +.temp 2 w1 +.temp 2 w2 +.temp 4 t1 +.temp 4 t2 + +convubw w1, s1 +convubw w2, s2 +subw w2, w2, w1 +mulswl t2, w2, p1 +addl t2, t2, 4095 +shrsl t2, t2, 12 +convlw w2, t2 +addw w2, w2, w1 +convsuswb d1, w2 + +.function video_orc_resample_v_4tap_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 1 s4 guint8 +.dest 1 d1 guint8 +.param 2 p1 gint16 +.param 2 p2 gint16 +.param 2 p3 gint16 +.param 2 p4 gint16 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, p1 +convubw w2, s2 +mullw w2, w2, p2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, p3 +addw w1, w1, w2 +convubw w2, s4 +mullw w2, w2, p4 +addw w1, w1, w2 +addw w1, w1, 32 +shrsw w1, w1, 6 +convsuswb d1, w1 + +.function video_orc_resample_v_4tap_u8 +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 1 s4 guint8 +.dest 1 d1 guint8 +.param 2 p1 gint16 +.param 2 p2 gint16 +.param 2 p3 gint16 +.param 2 p4 gint16 +.temp 2 w1 +.temp 2 w2 +.temp 4 t1 +.temp 4 t2 + +convubw w1, s1 +mulswl t1, w1, p1 +convubw w2, s2 +mulswl t2, w2, p2 +addl t1, t1, t2 +convubw w2, s3 +mulswl t2, w2, p3 +addl t1, t1, t2 +convubw w2, s4 +mulswl t2, w2, p4 +addl t1, t1, t2 +addl t1, t1, 4095 +shrsl t1, t1, 12 +convsuslw w1, t1 +convsuswb d1, w1 + +# crashes ORC for now but is potentially faster +#.function video_orc_resample_h_4tap_u8 +#.source 1 s1 guint8 +#.source 1 s2 guint8 +#.source 1 s3 guint8 +#.source 1 s4 guint8 +#.source 2 t1 gint16 +#.source 2 t2 gint16 +#.source 2 t3 gint16 +#.source 2 t4 gint16 +#.dest 1 d1 guint8 +#.temp 2 w1 +#.temp 2 w2 +#.temp 4 l1 +#.temp 4 l2 +# +#convubw w1, s1 +#mulswl l1, w1, t1 +#convubw w2, s2 +#mulswl l2, w2, t2 +#addl l1, l1, l2 +#convubw w2, s3 +#mulswl l2, w2, t3 +#addl l1, l1, l2 +#convubw w2, s4 +#mulswl l2, w2, t4 +#addl l1, l1, l2 +#addl l1, l1, 4095 +#shrsl l1, l1, 12 +#convsuslw w1, l1 +#convsuswb d1, w1 + +.function video_orc_resample_h_multaps_u8 +.source 1 s guint8 +.source 2 t gint16 +.dest 4 d gint32 +.temp 2 w1 + +convubw w1, s +mulswl d, w1, t + +.function video_orc_resample_h_muladdtaps_u8 +.flags 2d +.source 1 s guint8 +.source 2 t gint16 +.dest 4 d gint32 +.temp 2 w1 +.temp 4 t1 + +convubw w1, s +mulswl t1, w1, t +addl d, d, t1 + +.function video_orc_resample_scaletaps_u8 +.source 4 s gint32 +.dest 1 d guint8 +.temp 2 w1 +.temp 4 t1 + +addl t1, s, 4095 +shrsl t1, t1, 12 +convsuslw w1, t1 +convsuswb d, w1 + +.function video_orc_resample_h_multaps_u8_lq +.source 1 s guint8 +.source 2 t gint16 +.dest 2 d gint16 +.temp 2 w1 + +convubw w1, s +mullw d, w1, t + +.function video_orc_resample_h_muladdtaps_u8_lq +.flags 2d +.source 1 s guint8 +.source 2 t gint16 +.dest 2 d gint16 +.temp 2 w1 + +convubw w1, s +mullw w1, w1, t +addw d, d, w1 + +.function video_orc_resample_h_multaps3_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 2 t1 gint16 +.source 2 t2 gint16 +.source 2 t3 gint16 +.dest 2 d gint16 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw d, w1, w2 + +.function video_orc_resample_h_muladdtaps3_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 2 t1 gint16 +.source 2 t2 gint16 +.source 2 t3 gint16 +.dest 2 d gint16 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw w1, w1, w2 +addw d, d, w1 + +.function video_orc_resample_h_muladdscaletaps3_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 2 t1 gint16 +.source 2 t2 gint16 +.source 2 t3 gint16 +.source 2 temp gint16 +.dest 1 d guint8 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw w1, w1, w2 +addw w1, w1, temp +addw w1, w1, 32 +shrsw w1, w1, 6 +convsuswb d, w1 + +.function video_orc_resample_scaletaps_u8_lq +.source 2 s gint16 +.dest 1 d guint8 +.temp 2 w1 + +addw w1, s, 32 +shrsw w1, w1, 6 +convsuswb d, w1 + +.function video_orc_resample_h_multaps_u16 +.source 2 s guint16 +.source 2 t gint16 +.dest 4 d gint32 +.temp 4 l1 +.temp 4 l2 + +convuwl l1, s +convswl l2, t +mulll d, l1, l2 + +.function video_orc_resample_h_muladdtaps_u16 +.flags 2d +.source 2 s guint16 +.source 2 t gint16 +.dest 4 d gint32 +.temp 4 l1 +.temp 4 l2 + +convuwl l1, s +convswl l2, t +mulll l1, l1, l2 +addl d, d, l1 + +.function video_orc_resample_scaletaps_u16 +.source 4 s gint32 +.dest 2 d guint16 +.temp 4 t1 + +addl t1, s, 4095 +shrsl t1, t1, 12 +convsuslw d, t1 + +.function video_orc_resample_v_multaps_u8 +.source 1 s guint8 +.param 2 t gint16 +.dest 4 d gint32 +.temp 2 w1 + +convubw w1, s +mulswl d, w1, t + +.function video_orc_resample_v_muladdtaps_u8 +.source 1 s guint8 +.param 2 t gint16 +.dest 4 d gint32 +.temp 2 w1 +.temp 4 t1 + +convubw w1, s +mulswl t1, w1, t +addl d, d, t1 + +.function video_orc_resample_v_multaps_u16 +.source 2 s guint16 +.param 2 t gint16 +.dest 4 d gint32 +.temp 4 l1 + +convuwl l1, s +mulll d, l1, t + +.function video_orc_resample_v_muladdtaps_u16 +.source 2 s guint16 +.param 2 t gint16 +.dest 4 d gint32 +.temp 4 t1 +.temp 4 t2 + +convuwl t1, s +convswl t2, t +mulll t1, t1, t2 +addl d, d, t1 + +.function video_orc_resample_v_multaps_u8_lq +.source 1 s guint8 +.param 2 t gint16 +.dest 2 d gint16 +.temp 2 w1 + +convubw w1, s +mullw d, w1, t + +.function video_orc_resample_v_multaps4_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 1 s4 guint8 +.param 2 t1 gint16 +.param 2 t2 gint16 +.param 2 t3 gint16 +.param 2 t4 gint16 +.dest 2 d gint16 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw w1, w1, w2 +convubw w2, s4 +mullw w2, w2, t4 +addw d, w1, w2 + +.function video_orc_resample_v_muladdtaps_u8_lq +.source 1 s guint8 +.param 2 t gint16 +.dest 2 d gint16 +.temp 2 w1 + +convubw w1, s +mullw w1, w1, t +addw d, d, w1 + +.function video_orc_resample_v_muladdtaps4_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 1 s4 guint8 +.param 2 t1 gint16 +.param 2 t2 gint16 +.param 2 t3 gint16 +.param 2 t4 gint16 +.dest 2 d gint16 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw w1, w1, w2 +convubw w2, s4 +mullw w2, w2, t4 +addw w1, w1, w2 +addw d, d, w1 + +.function video_orc_resample_v_muladdscaletaps4_u8_lq +.source 1 s1 guint8 +.source 1 s2 guint8 +.source 1 s3 guint8 +.source 1 s4 guint8 +.source 2 temp gint16 +.param 2 t1 gint16 +.param 2 t2 gint16 +.param 2 t3 gint16 +.param 2 t4 gint16 +.dest 1 d guint8 +.temp 2 w1 +.temp 2 w2 + +convubw w1, s1 +mullw w1, w1, t1 +convubw w2, s2 +mullw w2, w2, t2 +addw w1, w1, w2 +convubw w2, s3 +mullw w2, w2, t3 +addw w1, w1, w2 +convubw w2, s4 +mullw w2, w2, t4 +addw w1, w1, w2 +addw w1, w1, temp +addw w1, w1, 32 +shrsw w1, w1, 6 +convsuswb d, w1 + +.function video_orc_chroma_down_h2_u8 +.source 8 s guint8 +.dest 8 d guint8 +.temp 4 ayuv1 +.temp 4 ayuv2 +.temp 2 ay1 +.temp 2 uv1 +.temp 2 uv2 + +splitql ayuv2, ayuv1, s +splitlw uv1, ay1, ayuv1 +select1lw uv2, ayuv2 +x2 avgub uv1, uv1, uv2 +mergewl ayuv1, ay1, uv1 +mergelq d, ayuv1, ayuv2 + +#.function video_orc_chroma_up_h2_cs_u8 +#.source 8 s guint8 +#.source 4 s1 guint8 +#.dest 8 d guint8 +#.temp 4 ayuv1 +#.temp 4 ayuv2 +#.temp 4 ayuv3 +#.temp 2 ay2 +#.temp 2 uv2 +#.temp 2 uv3 +# +#splitql ayuv2, ayuv1, s +#ldresnearl ayuv3, s1, 0x20000, 0x20000 +#splitlw uv2, ay2, ayuv2 +#select1lw uv3, ayuv3 +#x2 avgub uv2, uv2, uv3 +#mergewl ayuv2, ay2, uv2 +#mergelq d, ayuv1, ayuv2 + +.function video_orc_chroma_down_v2_u8 +.source 4 s1 guint8 +.source 4 s2 guint8 +.dest 4 d guint8 +.temp 2 ay1 +.temp 2 uv1 +.temp 2 uv2 + +splitlw uv1, ay1, s1 +select1lw uv2, s2 +x2 avgub uv1, uv1, uv2 +mergewl d, ay1, uv1 + +.function video_orc_chroma_up_v2_u8 +.source 4 s1 guint8 +.source 4 s2 guint8 +.dest 4 d1 guint8 +.dest 4 d2 guint8 +.temp 2 ay1 +.temp 2 ay2 +.temp 2 uv1 +.temp 2 uv2 +.temp 4 uuvv1 +.temp 4 uuvv2 +.temp 4 uuvv3 + +splitlw uv1, ay1, s1 +splitlw uv2, ay2, s2 +x2 convubw uuvv1, uv1 +x2 convubw uuvv2, uv2 + +x2 mullw uuvv3, uuvv1, 3 +x2 addw uuvv3, uuvv3, uuvv2 +x2 addw uuvv3, uuvv3, 2 +x2 shruw uuvv3, uuvv3, 2 +x2 convsuswb uv1, uuvv3 +mergewl d1, ay1, uv1 + +x2 mullw uuvv3, uuvv2, 3 +x2 addw uuvv3, uuvv3, uuvv1 +x2 addw uuvv3, uuvv3, 2 +x2 shruw uuvv3, uuvv3, 2 +x2 convsuswb uv2, uuvv3 +mergewl d2, ay2, uv2 + +.function video_orc_chroma_up_v2_u16 +.source 8 s1 guint16 +.source 8 s2 guint16 +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.temp 4 ay1 +.temp 4 ay2 +.temp 4 uv1 +.temp 4 uv2 +.temp 8 uuvv1 +.temp 8 uuvv2 +.temp 8 uuvv3 + +splitql uv1, ay1, s1 +splitql uv2, ay2, s2 +x2 convuwl uuvv1, uv1 +x2 convuwl uuvv2, uv2 + +x2 mulll uuvv3, uuvv1, 3 +x2 addl uuvv3, uuvv3, uuvv2 +x2 addl uuvv3, uuvv3, 2 +x2 shrul uuvv3, uuvv3, 2 +x2 convsuslw uv1, uuvv3 +mergelq d1, ay1, uv1 + +x2 mulll uuvv3, uuvv2, 3 +x2 addl uuvv3, uuvv3, uuvv1 +x2 addl uuvv3, uuvv3, 2 +x2 shrul uuvv3, uuvv3, 2 +x2 convsuslw uv2, uuvv3 +mergelq d2, ay2, uv2 + +.function video_orc_chroma_down_v2_u16 +.source 8 s1 guint16 +.source 8 s2 guint16 +.dest 8 d guint16 +.temp 4 ay1 +.temp 4 uv1 +.temp 4 uv2 + +splitql uv1, ay1, s1 +select1ql uv2, s2 +x2 avguw uv1, uv1, uv2 +mergelq d, ay1, uv1 + + +.function video_orc_chroma_down_v4_u8 +.source 4 s1 guint8 +.source 4 s2 guint8 +.source 4 s3 guint8 +.source 4 s4 guint8 +.dest 4 d guint8 +.temp 2 ay1 +.temp 2 uv1 +.temp 4 uuvv1 +.temp 4 uuvv2 +.temp 4 uuvv3 + +splitlw uv1, ay1, s1 +x2 convubw uuvv1, uv1 +select1lw uv1, s4 +x2 convubw uuvv2, uv1 +x2 addw uuvv3, uuvv1, uuvv2 +select1lw uv1, s2 +x2 convubw uuvv1, uv1 +select1lw uv1, s3 +x2 convubw uuvv2, uv1 +x2 addw uuvv1, uuvv1, uuvv2 +x2 shlw uuvv2, uuvv1, 1 +x2 addw uuvv1, uuvv1, uuvv2 +x2 addw uuvv3, uuvv3, uuvv1 +x2 addw uuvv3, uuvv3, 4 +x2 shruw uuvv3, uuvv3, 3 +x2 convsuswb uv1, uuvv3 +mergewl d, ay1, uv1 + +.function video_orc_chroma_down_v4_u16 +.source 8 s1 guint16 +.source 8 s2 guint16 +.source 8 s3 guint16 +.source 8 s4 guint16 +.dest 8 d guint16 +.temp 4 ay1 +.temp 4 uv1 +.temp 8 uuvv1 +.temp 8 uuvv2 +.temp 8 uuvv3 + +splitql uv1, ay1, s1 +x2 convuwl uuvv1, uv1 +select1ql uv1, s4 +x2 convuwl uuvv2, uv1 +x2 addl uuvv3, uuvv1, uuvv2 +select1ql uv1, s2 +x2 convuwl uuvv1, uv1 +select1ql uv1, s3 +x2 convuwl uuvv2, uv1 +x2 addl uuvv1, uuvv1, uuvv2 +x2 shll uuvv2, uuvv1, 1 +x2 addl uuvv1, uuvv1, uuvv2 +x2 addl uuvv3, uuvv3, uuvv1 +x2 addl uuvv3, uuvv3, 4 +x2 shrul uuvv3, uuvv3, 3 +x2 convsuslw uv1, uuvv3 +mergelq d, ay1, uv1 + +.function video_orc_dither_none_4u8_mask +.dest 4 p guint8 +.param 4 masks +.temp 4 m + +loadpl m, masks +x4 andnb p, m, p + +.function video_orc_dither_none_4u16_mask +.dest 8 p guint16 +.longparam 8 masks +.temp 8 m + +loadpq m, masks +x4 andnw p, m, p + +.function video_orc_dither_verterr_4u8_mask +.dest 4 p guint8 +.dest 8 e guint16 +.longparam 8 masks +.temp 8 m +.temp 8 t1 + +loadpq m, masks +x4 convubw t1, p +x4 addw t1, e, t1 +x4 andw e, m, t1 +x4 andnw t1, m, t1 +x4 convsuswb p, t1 + +.function video_orc_dither_fs_muladd_u8 +.dest 2 e guint16 +.temp 2 t1 +.temp 2 t2 + +loadoffw t2, e, 4 +mullw t2, t2, 5 +addw t1, t2, e +loadoffw t2, e, 8 +mullw t2, t2, 3 +addw e, t1, t2 + +# due to error propagation we should disable +# loop_shift for this function and only work on +# 4 pixels at a time. +#.function video_orc_dither_fs_add_4u8_mask +#.flags no-unroll +#.dest 4 d guint8 +#.dest 8 e1 guint16 +#.dest 8 e2 guint16 +#.longparam 8 masks +#.temp 8 p +#.temp 8 t1 +#.temp 8 t2 +# +#x4 mullw t1, e1, 7 +#x4 addw t1, t1, e2 +#x4 shruw t1, t1, 4 +#x4 convubw p, d +#x4 addw t1, t1, p +#x4 andnw p, masks, t1 +#x4 convsuswb d, p +#x4 andw e2, t1, masks + +.function video_orc_dither_ordered_u8 +.source 1 e guint8 +.dest 1 d guint8 + +addusb d, d, e + +.function video_orc_dither_ordered_4u8_mask +.source 8 e1 guint16 +.dest 4 d guint8 +.longparam 8 masks +.temp 8 p +.temp 8 m + +loadpq m, masks +x4 convubw p, d +x4 addw p, p, e1 +x4 andnw p, m, p +x4 convsuswb d, p + +.function video_orc_dither_ordered_4u16_mask +.source 8 e1 guint16 +.dest 8 d guint16 +.longparam 8 masks +.temp 8 p +.temp 8 m + +loadpq m, masks +x4 addusw p, d, e1 +x4 andnw d, m, p diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/videooverlay.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/videooverlay.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/videooverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/videooverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -312,6 +312,9 @@ #include "videooverlay.h" +GST_DEBUG_CATEGORY_STATIC (gst_video_overlay_debug); +#define GST_CAT_DEFAULT gst_video_overlay_debug + GType gst_video_overlay_get_type (void) { @@ -332,6 +335,9 @@ gst_video_overlay_type = g_type_register_static (G_TYPE_INTERFACE, "GstVideoOverlay", &gst_video_overlay_info, 0); + + GST_DEBUG_CATEGORY_INIT (gst_video_overlay_debug, "videooverlay", 0, + "videooverlay interface"); } return gst_video_overlay_type; diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-overlay-composition.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-overlay-composition.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-overlay-composition.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-overlay-composition.c 2015-10-22 08:01:34.000000000 +0000 @@ -215,8 +215,14 @@ dmeta = (GstVideoOverlayCompositionMeta *) gst_buffer_add_meta (dest, GST_VIDEO_OVERLAY_COMPOSITION_META_INFO, NULL); + if (!dmeta) + return FALSE; + dmeta->overlay = gst_video_overlay_composition_ref (smeta->overlay); } + } else { + /* return FALSE, if transform type is not supported */ + return FALSE; } return TRUE; } @@ -262,6 +268,8 @@ * Sets an overlay composition on a buffer. The buffer will obtain its own * reference to the composition, meaning this function does not take ownership * of @comp. + * + * Returns: (transfer none): a #GstVideoOverlayCompositionMeta */ GstVideoOverlayCompositionMeta * gst_buffer_add_video_overlay_composition_meta (GstBuffer * buf, @@ -1485,12 +1493,13 @@ /** * gst_video_overlay_rectangle_set_global_alpha: * @rectangle: a #GstVideoOverlayRectangle + * @global_alpha: Global alpha value (0 to 1.0) * * Sets the global alpha value associated with a #GstVideoOverlayRectangle. Per- * pixel alpha values are multiplied with this value. Valid * values: 0 <= global_alpha <= 1; 1 to deactivate. * - # @rectangle must be writable, meaning its refcount must be 1. You can + * @rectangle must be writable, meaning its refcount must be 1. You can * make the rectangles inside a #GstVideoOverlayComposition writable using * gst_video_overlay_composition_make_writable() or * gst_video_overlay_composition_copy(). diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-overlay-composition.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-overlay-composition.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-overlay-composition.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-overlay-composition.h 2015-10-27 15:14:33.000000000 +0000 @@ -36,7 +36,7 @@ #define GST_TYPE_VIDEO_OVERLAY_RECTANGLE \ (gst_video_overlay_rectangle_get_type ()) #define GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj) \ - ((GstVideoOverlayRectangle *)(obj) + ((GstVideoOverlayRectangle *)(obj)) #define GST_VIDEO_OVERLAY_RECTANGLE(obj) \ (GST_VIDEO_OVERLAY_RECTANGLE_CAST(obj)) #define GST_IS_VIDEO_OVERLAY_RECTANGLE(obj) \ @@ -190,7 +190,7 @@ #define GST_TYPE_VIDEO_OVERLAY_COMPOSITION \ (gst_video_overlay_composition_get_type ()) #define GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj) \ - ((GstVideoOverlayComposition *)(obj) + ((GstVideoOverlayComposition *)(obj)) #define GST_VIDEO_OVERLAY_COMPOSITION(obj) \ (GST_VIDEO_OVERLAY_COMPOSITION_CAST(obj)) #define GST_IS_VIDEO_OVERLAY_COMPOSITION(obj) \ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-resampler.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-resampler.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-resampler.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-resampler.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,445 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "video-resampler.h" + +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-resampler", 0, + "video-resampler object"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + +/** + * SECTION:gstvideoresampler + * @short_description: Utility structure for resampler information + * + * #GstVideoResampler is a structure which holds the information + * required to perform various kinds of resampling filtering. + * + */ + + +#define DEFAULT_OPT_CUBIC_B (1.0 / 3.0) +#define DEFAULT_OPT_CUBIC_C (1.0 / 3.0) + +#define DEFAULT_OPT_ENVELOPE 2.0 +#define DEFAULT_OPT_SHARPNESS 1.0 +#define DEFAULT_OPT_SHARPEN 0.0 + +#define DEFAULT_OPT_MAX_TAPS 128 + +typedef struct _ResamplerParams ResamplerParams; + +struct _ResamplerParams +{ + GstVideoResamplerMethod method; + GstVideoResamplerFlags flags; + + gdouble shift; + + gdouble (*get_tap) (ResamplerParams * params, gint l, gint xi, gdouble x); + + /* for cubic */ + gdouble b, c; + /* used by lanczos */ + gdouble ex, fx, dx; + /* extra params */ + gdouble envelope; + gdouble sharpness; + gdouble sharpen; + + GstVideoResampler *resampler; +}; + +static gdouble +get_opt_double (GstStructure * options, const gchar * name, gdouble def) +{ + gdouble res; + if (!options || !gst_structure_get_double (options, name, &res)) + res = def; + return res; +} + +static gint +get_opt_int (GstStructure * options, const gchar * name, gint def) +{ + gint res; + if (!options || !gst_structure_get_int (options, name, &res)) + res = def; + return res; +} + +#define GET_OPT_CUBIC_B(options) get_opt_double(options, \ + GST_VIDEO_RESAMPLER_OPT_CUBIC_B, DEFAULT_OPT_CUBIC_B) +#define GET_OPT_CUBIC_C(options) get_opt_double(options, \ + GST_VIDEO_RESAMPLER_OPT_CUBIC_C, DEFAULT_OPT_CUBIC_C) +#define GET_OPT_ENVELOPE(options) get_opt_double(options, \ + GST_VIDEO_RESAMPLER_OPT_ENVELOPE, DEFAULT_OPT_ENVELOPE) +#define GET_OPT_SHARPNESS(options) get_opt_double(options, \ + GST_VIDEO_RESAMPLER_OPT_SHARPNESS, DEFAULT_OPT_SHARPNESS) +#define GET_OPT_SHARPEN(options) get_opt_double(options, \ + GST_VIDEO_RESAMPLER_OPT_SHARPEN, DEFAULT_OPT_SHARPEN) +#define GET_OPT_MAX_TAPS(options) get_opt_int(options, \ + GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, DEFAULT_OPT_MAX_TAPS) + +static double +sinc (double x) +{ + if (x == 0) + return 1; + + return sin (G_PI * x) / (G_PI * x); +} + +static double +envelope (double x) +{ + if (x <= -1 || x >= 1) + return 0; + return sinc (x); +} + +static gdouble +get_nearest_tap (ResamplerParams * params, gint l, gint xi, gdouble x) +{ + return 1.0; +} + +static gdouble +get_linear_tap (ResamplerParams * params, gint l, gint xi, gdouble x) +{ + gdouble res, a; + gint xl = xi + l; + + a = fabs (x - xl) * params->fx; + + if (a < 1.0) + res = 1.0 - a; + else + res = 0.0; + + return res; +} + +static gdouble +get_cubic_tap (ResamplerParams * params, gint l, gint xi, gdouble x) +{ + gdouble a, a2, a3, b, c; + gint xl = xi + l; + + a = fabs (x - xl) * params->fx; + a2 = a * a; + a3 = a2 * a; + + b = params->b; + c = params->c; + + if (a <= 1.0) + return ((12.0 - 9.0 * b - 6.0 * c) * a3 + + (-18.0 + 12.0 * b + 6.0 * c) * a2 + (6.0 - 2.0 * b)) / 6.0; + else if (a <= 2.0) + return ((-b - 6.0 * c) * a3 + + (6.0 * b + 30.0 * c) * a2 + + (-12.0 * b - 48.0 * c) * a + (8.0 * b + 24.0 * c)) / 6.0; + else + return 0.0; +} + +static gdouble +get_sinc_tap (ResamplerParams * params, gint l, gint xi, gdouble x) +{ + gint xl = xi + l; + return sinc ((x - xl) * params->fx); +} + +static gdouble +get_lanczos_tap (ResamplerParams * params, gint l, gint xi, gdouble x) +{ + gint xl = xi + l; + gdouble env = envelope ((x - xl) * params->ex); + return (sinc ((x - xl) * params->fx) - params->sharpen) * env; +} + +static void +resampler_calculate_taps (ResamplerParams * params) +{ + GstVideoResampler *resampler = params->resampler; + gint j; + guint32 *offset, *n_taps, *phase; + gint tap_offs; + gint max_taps; + gint in_size, out_size; + gdouble shift; + gdouble corr; + + in_size = resampler->in_size; + out_size = resampler->out_size; + + max_taps = resampler->max_taps; + tap_offs = (max_taps - 1) / 2; + corr = (max_taps == 1 ? 0.0 : 0.5); + + shift = params->shift; + + resampler->taps = g_malloc (sizeof (gdouble) * max_taps * out_size); + n_taps = resampler->n_taps = g_malloc (sizeof (guint32) * out_size); + offset = resampler->offset = g_malloc (sizeof (guint32) * out_size); + phase = resampler->phase = g_malloc (sizeof (guint32) * out_size); + + for (j = 0; j < out_size; j++) { + gdouble ox, x; + gint xi; + gint l; + gdouble weight; + gdouble *taps; + + /* center of the output pixel */ + ox = (0.5 + (gdouble) j - shift) / out_size; + /* x is the source pixel to use, can be fractional */ + x = ox * (gdouble) in_size - corr; + x = CLAMP (x, 0, in_size - 1); + /* this is the first source pixel to use */ + xi = floor (x - tap_offs); + + offset[j] = xi; + phase[j] = j; + n_taps[j] = max_taps; + weight = 0; + taps = resampler->taps + j * max_taps; + + for (l = 0; l < max_taps; l++) { + taps[l] = params->get_tap (params, l, xi, x); + weight += taps[l]; + } + + for (l = 0; l < max_taps; l++) + taps[l] /= weight; + + if (xi < 0) { + gint sh = -xi; + + for (l = 0; l < sh; l++) { + taps[sh] += taps[l]; + } + for (l = 0; l < max_taps - sh; l++) { + taps[l] = taps[sh + l]; + } + for (; l < max_taps; l++) { + taps[l] = 0; + } + offset[j] += sh; + } + if (xi > in_size - max_taps) { + gint sh = xi - (in_size - max_taps); + + for (l = 0; l < sh; l++) { + taps[max_taps - sh - 1] += taps[max_taps - sh + l]; + } + for (l = 0; l < max_taps - sh; l++) { + taps[max_taps - 1 - l] = taps[max_taps - 1 - sh - l]; + } + for (l = 0; l < sh; l++) { + taps[l] = 0; + } + offset[j] -= sh; + } + } +} + +static void +resampler_dump (GstVideoResampler * resampler) +{ +#if 0 + gint i, max_taps, out_size; + + out_size = resampler->out_size; + max_taps = resampler->max_taps; + + for (i = 0; i < out_size; i++) { + gint j, o, phase, n_taps; + gdouble sum; + + o = resampler->offset[i]; + n_taps = resampler->n_taps[i]; + phase = resampler->phase[i]; + + printf ("%u: \t%d ", i, o); + sum = 0; + for (j = 0; j < n_taps; j++) { + gdouble tap; + tap = resampler->taps[phase * max_taps + j]; + printf ("\t%f ", tap); + sum += tap; + } + printf ("\t: sum %f\n", sum); + } +#endif +} + + +/** + * gst_video_resampler_new: + * @resampler: a #GstVideoResampler + * @method: a #GstVideoResamplerMethod + * @flags: #GstVideoResamplerFlags + * @n_phases: number of phases to use + * @n_taps: number of taps to use + * @in_size: number of source elements + * @out_size: number of destination elements + * @options: extra options + * + * Make a new resampler. @in_size source elements will + * be resampled to @out_size destination elements. + * + * @n_taps specifies the amount of elements to use from the source for one output + * element. If n_taps is 0, this function chooses a good value automatically based + * on the @method and @in_size/@out_size. + * + * Returns: %TRUE on success + * + * Since: 1.6 + */ +gboolean +gst_video_resampler_init (GstVideoResampler * resampler, + GstVideoResamplerMethod method, GstVideoResamplerFlags flags, + guint n_phases, guint n_taps, gdouble shift, guint in_size, guint out_size, + GstStructure * options) +{ + ResamplerParams params; + gint max_taps; + gdouble scale_factor; + + g_return_val_if_fail (in_size != 0, FALSE); + g_return_val_if_fail (out_size != 0, FALSE); + g_return_val_if_fail (n_phases == out_size, FALSE); + + resampler->in_size = in_size; + resampler->out_size = out_size; + resampler->n_phases = n_phases; + + params.method = method; + params.flags = flags; + params.shift = shift; + params.resampler = resampler; + + GST_DEBUG ("%d %u %u->%u", method, n_taps, in_size, out_size); + + params.sharpness = GET_OPT_SHARPNESS (options); + params.sharpen = GET_OPT_SHARPEN (options); + + scale_factor = in_size / (gdouble) out_size; + if (scale_factor > 1.0) { + params.fx = (1.0 / scale_factor) * params.sharpness; + } else { + params.fx = (1.0) * params.sharpness; + } + + max_taps = GET_OPT_MAX_TAPS (options); + n_taps = MIN (n_taps, max_taps); + + switch (method) { + case GST_VIDEO_RESAMPLER_METHOD_NEAREST: + params.envelope = GET_OPT_ENVELOPE (options); + params.get_tap = get_nearest_tap; + if (n_taps == 0) + n_taps = 1; + break; + case GST_VIDEO_RESAMPLER_METHOD_LINEAR: + params.get_tap = get_linear_tap; + params.envelope = 1.0; + break; + case GST_VIDEO_RESAMPLER_METHOD_CUBIC: + params.b = GET_OPT_CUBIC_B (options); + params.c = GET_OPT_CUBIC_C (options); + params.envelope = 2.0; + params.get_tap = get_cubic_tap; + break; + case GST_VIDEO_RESAMPLER_METHOD_SINC: + params.envelope = GET_OPT_ENVELOPE (options); + params.get_tap = get_sinc_tap; + break; + case GST_VIDEO_RESAMPLER_METHOD_LANCZOS: + params.envelope = GET_OPT_ENVELOPE (options); + params.get_tap = get_lanczos_tap; + break; + default: + break; + } + + if (n_taps == 0) { + params.dx = ceil (2.0 * params.envelope / params.fx); + n_taps = CLAMP (params.dx, 0, max_taps); + } + params.fx = 2.0 * params.envelope / n_taps; + params.ex = 2.0 / n_taps; + + if (n_taps > in_size) + n_taps = in_size; + + resampler->max_taps = n_taps; + + resampler_calculate_taps (¶ms); + + resampler_dump (resampler); + + return TRUE; +} + +/** + * gst_video_resampler_clear: + * @resampler: a #GstVideoResampler + * + * Clear a previously initialized #GstVideoResampler @resampler. + * + * Since: 1.6 + */ +void +gst_video_resampler_clear (GstVideoResampler * resampler) +{ + g_return_if_fail (resampler != NULL); + + g_free (resampler->phase); + g_free (resampler->offset); + g_free (resampler->n_taps); + g_free (resampler->taps); +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-resampler.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-resampler.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-resampler.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-resampler.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,171 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_RESAMPLER_H__ +#define __GST_VIDEO_RESAMPLER_H__ + +#include + +G_BEGIN_DECLS + +typedef struct _GstVideoResampler GstVideoResampler; + +/** + * GstVideoResamplerMethod: + * @GST_VIDEO_RESAMPLER_METHOD_NEAREST: Duplicates the samples when + * upsampling and drops when downsampling + * @GST_VIDEO_RESAMPLER_METHOD_LINEAR: Uses linear interpolation to reconstruct + * missing samples and averaging to downsample + * @GST_VIDEO_RESAMPLER_METHOD_CUBIC: Uses cubic interpolation + * @GST_VIDEO_RESAMPLER_METHOD_SINC: Uses sinc interpolation + * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS: Uses lanczos interpolation + * + * Different subsampling and upsampling methods + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_RESAMPLER_METHOD_NEAREST, + GST_VIDEO_RESAMPLER_METHOD_LINEAR, + GST_VIDEO_RESAMPLER_METHOD_CUBIC, + GST_VIDEO_RESAMPLER_METHOD_SINC, + GST_VIDEO_RESAMPLER_METHOD_LANCZOS +} GstVideoResamplerMethod; + +/** + * GST_VIDEO_RESAMPLER_OPT_CUBIC_B: + * + * G_TYPE_DOUBLE, B parameter of the cubic filter. The B + * parameter controls the bluriness. Values between 0.0 and + * 2.0 are accepted. 1/3 is the default. + * + * Below are some values of popular filters: + * B C + * Hermite 0.0 0.0 + * Spline 1.0 0.0 + * Catmull-Rom 0.0 1/2 + * Mitchell 1/3 1/3 + * Robidoux 0.3782 0.3109 + * Robidoux + * Sharp 0.2620 0.3690 + * Robidoux + * Soft 0.6796 0.1602 + */ +#define GST_VIDEO_RESAMPLER_OPT_CUBIC_B "GstVideoResampler.cubic-b" +/** + * GST_VIDEO_RESAMPLER_OPT_CUBIC_C: + * + * G_TYPE_DOUBLE, C parameter of the cubic filter. The C + * parameter controls the Keys alpha value. Values between 0.0 and + * 2.0 are accepted. 1/3 is the default. + * + * See #GST_VIDEO_RESAMPLER_OPT_CUBIC_B for some more common values + */ +#define GST_VIDEO_RESAMPLER_OPT_CUBIC_C "GstVideoResampler.cubic-c" + +/** + * GST_VIDEO_RESAMPLER_OPT_ENVELOPE: + * + * G_TYPE_DOUBLE, specifies the size of filter envelope for + * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between + * 1.0 and 5.0. 2.0 is the default. + */ +#define GST_VIDEO_RESAMPLER_OPT_ENVELOPE "GstVideoResampler.envelope" + +/** + * GST_VIDEO_RESAMPLER_OPT_SHARPNESS: + * + * G_TYPE_DOUBLE, specifies sharpness of the filter for + * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between + * 0.5 and 1.5. 1.0 is the default. + */ +#define GST_VIDEO_RESAMPLER_OPT_SHARPNESS "GstVideoResampler.sharpness" + +/** + * GST_VIDEO_RESAMPLER_OPT_SHARPEN: + * + * G_TYPE_DOUBLE, specifies sharpening of the filter for + * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between + * 0.0 and 1.0. 0.0 is the default. + */ +#define GST_VIDEO_RESAMPLER_OPT_SHARPEN "GstVideoResampler.sharpen" +/** + * GST_VIDEO_RESAMPLER_OPT_MAX_TAPS: + * + * G_TYPE_INT, limits the maximum number of taps to use. + * 16 is the default. + */ +#define GST_VIDEO_RESAMPLER_OPT_MAX_TAPS "GstVideoResampler.max-taps" + +/** + * GstVideoResamplerFlags: + * @GST_VIDEO_RESAMPLER_FLAG_NONE: no flags + * + * Different resampler flags. + * + * Since: 1.6 + */ +typedef enum { + GST_VIDEO_RESAMPLER_FLAG_NONE = (0), +} GstVideoResamplerFlags; + +/** + * GstVideoResampler: + * @in_size: the input size + * @out_size: the output size + * @max_taps: the maximum number of taps + * @n_phases: the number of phases + * @offset: array with the source offset for each output element + * @phase: array with the phase to use for each output element + * @n_taps: array with new number of taps for each phase + * @taps: the taps for all phases + * + * A structure holding resampler information. + * + * Since: 1.6 + */ +struct _GstVideoResampler +{ + gint in_size; + gint out_size; + guint max_taps; + guint n_phases; + guint32 *offset; + guint32 *phase; + guint32 *n_taps; + gdouble *taps; + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + + +gboolean gst_video_resampler_init (GstVideoResampler *resampler, + GstVideoResamplerMethod method, + GstVideoResamplerFlags flags, + guint n_phases, guint n_taps, + gdouble shift, + guint in_size, guint out_size, + GstStructure *options); + +void gst_video_resampler_clear (GstVideoResampler *resampler); + +G_END_DECLS + +#endif /* __GST_VIDEO_RESAMPLER_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-scaler.c gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-scaler.c --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-scaler.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-scaler.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,1578 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +/** + * SECTION:gstvideoscaler + * @short_description: Utility object for rescaling video frames + * + * #GstVideoScaler is a utility object for rescaling and resampling + * video frames using various interpolation / sampling methods. + * + */ + +#ifndef DISABLE_ORC +#include +#else +#define orc_memcpy memcpy +#endif + +#include "video-orc.h" +#include "video-scaler.h" + +#ifndef GST_DISABLE_GST_DEBUG +#define GST_CAT_DEFAULT ensure_debug_category() +static GstDebugCategory * +ensure_debug_category (void) +{ + static gsize cat_gonce = 0; + + if (g_once_init_enter (&cat_gonce)) { + gsize cat_done; + + cat_done = (gsize) _gst_debug_category_new ("video-scaler", 0, + "video-scaler object"); + + g_once_init_leave (&cat_gonce, cat_done); + } + + return (GstDebugCategory *) cat_gonce; +} + +#else +#define ensure_debug_category() /* NOOP */ +#endif /* GST_DISABLE_GST_DEBUG */ + +#define SCALE_U8 12 +#define SCALE_U8_ROUND (1 << (SCALE_U8 -1)) +#define SCALE_U8_LQ 6 +#define SCALE_U8_LQ_ROUND (1 << (SCALE_U8_LQ -1)) +#define SCALE_U16 12 +#define SCALE_U16_ROUND (1 << (SCALE_U16 -1)) + +#define LQ + +typedef void (*GstVideoScalerHFunc) (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems); +typedef void (*GstVideoScalerVFunc) (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems); + +struct _GstVideoScaler +{ + GstVideoResamplerMethod method; + GstVideoScalerFlags flags; + + GstVideoResampler resampler; + + gboolean merged; + gint in_y_offset; + gint out_y_offset; + + /* cached integer coefficients */ + gint16 *taps_s16; + gint16 *taps_s16_4; + guint32 *offset_n; + /* for ORC */ + gint inc; + + gint tmpwidth; + gpointer tmpline1; + gpointer tmpline2; +}; + +static void +resampler_zip (GstVideoResampler * resampler, const GstVideoResampler * r1, + const GstVideoResampler * r2) +{ + guint i, out_size, max_taps, n_phases; + gdouble *taps; + guint32 *offset, *phase; + + g_return_if_fail (r1->max_taps == r2->max_taps); + + out_size = r1->out_size + r2->out_size; + max_taps = r1->max_taps; + n_phases = out_size; + offset = g_malloc (sizeof (guint32) * out_size); + phase = g_malloc (sizeof (guint32) * n_phases); + taps = g_malloc (sizeof (gdouble) * max_taps * n_phases); + + resampler->in_size = r1->in_size + r2->in_size; + resampler->out_size = out_size; + resampler->max_taps = max_taps; + resampler->n_phases = n_phases; + resampler->offset = offset; + resampler->phase = phase; + resampler->n_taps = g_malloc (sizeof (guint32) * out_size); + resampler->taps = taps; + + for (i = 0; i < out_size; i++) { + guint idx = i / 2; + const GstVideoResampler *r; + + r = (i & 1) ? r2 : r1; + + offset[i] = r->offset[idx] * 2 + (i & 1); + phase[i] = i; + + memcpy (taps + i * max_taps, r->taps + r->phase[idx] * max_taps, + max_taps * sizeof (gdouble)); + } +} + +static void +realloc_tmplines (GstVideoScaler * scale, gint n_elems, gint width) +{ + scale->tmpline1 = + g_realloc (scale->tmpline1, + sizeof (gint32) * width * n_elems * scale->resampler.max_taps); + scale->tmpline2 = + g_realloc (scale->tmpline2, sizeof (gint32) * width * n_elems); + scale->tmpwidth = width; +} + +static void +scaler_dump (GstVideoScaler * scale) +{ +#if 0 + gint i, j, in_size, out_size, max_taps; + guint32 *offset, *phase; + gdouble *taps; + GstVideoResampler *r = &scale->resampler; + + in_size = r->in_size; + out_size = r->out_size; + offset = r->offset; + phase = r->phase; + max_taps = r->max_taps; + taps = r->taps; + + g_print ("in %d, out %d, max_taps %d, n_phases %d\n", in_size, out_size, + max_taps, r->n_phases); + + for (i = 0; i < out_size; i++) { + g_print ("%d: \t%d \t%d:", i, offset[i], phase[i]); + + for (j = 0; j < max_taps; j++) { + g_print ("\t%f", taps[i * max_taps + j]); + } + g_print ("\n"); + } +#endif +} + +/** + * gst_video_scaler_new: (skip) + * @method: a #GstVideoResamplerMethod + * @flags: #GstVideoScalerFlags + * @n_taps: number of taps to use + * @in_size: number of source elements + * @out_size: number of destination elements + * @options: (allow-none): extra options + * + * Make a new @method video scaler. @in_size source lines/pixels will + * be scaled to @out_size destination lines/pixels. + * + * @n_taps specifies the amount of pixels to use from the source for one output + * pixel. If n_taps is 0, this function chooses a good value automatically based + * on the @method and @in_size/@out_size. + * + * Returns: a #GstVideoResample + */ +GstVideoScaler * +gst_video_scaler_new (GstVideoResamplerMethod method, GstVideoScalerFlags flags, + guint n_taps, guint in_size, guint out_size, GstStructure * options) +{ + GstVideoScaler *scale; + + g_return_val_if_fail (in_size != 0, NULL); + g_return_val_if_fail (out_size != 0, NULL); + + scale = g_slice_new0 (GstVideoScaler); + + GST_DEBUG ("%d %u %u->%u", method, n_taps, in_size, out_size); + + scale->method = method; + scale->flags = flags; + + if (flags & GST_VIDEO_SCALER_FLAG_INTERLACED) { + GstVideoResampler tresamp, bresamp; + + gst_video_resampler_init (&tresamp, method, 0, (out_size + 1) / 2, n_taps, + -0.5, (in_size + 1) / 2, (out_size + 1) / 2, options); + + n_taps = tresamp.max_taps; + + gst_video_resampler_init (&bresamp, method, 0, out_size - tresamp.out_size, + n_taps, 0.5, in_size - tresamp.in_size, + out_size - tresamp.out_size, options); + + resampler_zip (&scale->resampler, &tresamp, &bresamp); + gst_video_resampler_clear (&tresamp); + gst_video_resampler_clear (&bresamp); + } else { + gst_video_resampler_init (&scale->resampler, method, + GST_VIDEO_RESAMPLER_FLAG_NONE, out_size, n_taps, 0.0, in_size, out_size, + options); + } + + if (out_size == 1) + scale->inc = 0; + else + scale->inc = ((in_size - 1) << 16) / (out_size - 1) - 1; + + scaler_dump (scale); + GST_DEBUG ("max_taps %d", scale->resampler.max_taps); + + return scale; +} + +/** + * gst_video_scaler_free: + * @scale: a #GstVideoScaler + * + * Free a previously allocated #GstVideoScaler @scale. + */ +void +gst_video_scaler_free (GstVideoScaler * scale) +{ + g_return_if_fail (scale != NULL); + + gst_video_resampler_clear (&scale->resampler); + g_free (scale->taps_s16); + g_free (scale->taps_s16_4); + g_free (scale->offset_n); + g_free (scale->tmpline1); + g_free (scale->tmpline2); + g_slice_free (GstVideoScaler, scale); +} + +/** + * gst_video_scaler_get_max_taps: + * @scale: a #GstVideoScaler + * + * Get the maximum number of taps for @scale. + * + * Returns: the maximum number of taps + */ +guint +gst_video_scaler_get_max_taps (GstVideoScaler * scale) +{ + g_return_val_if_fail (scale != NULL, 0); + + return scale->resampler.max_taps; +} + +/** + * gst_video_scaler_get_coeff: + * @scale: a #GstVideoScaler + * @out_offset: an output offset + * @in_offset: result input offset + * @n_taps: result n_taps + * + * For a given pixel at @out_offset, get the first required input pixel at + * @in_offset and the @n_taps filter coefficients. + * + * Note that for interlaced content, @in_offset needs to be incremented with + * 2 to get the next input line. + * + * Returns: an array of @n_tap gdouble values with filter coefficients. + */ +const gdouble * +gst_video_scaler_get_coeff (GstVideoScaler * scale, + guint out_offset, guint * in_offset, guint * n_taps) +{ + guint offset, phase; + + g_return_val_if_fail (scale != NULL, NULL); + g_return_val_if_fail (out_offset < scale->resampler.out_size, NULL); + + offset = scale->resampler.offset[out_offset]; + phase = scale->resampler.phase[out_offset]; + + if (in_offset) + *in_offset = offset; + if (n_taps) { + *n_taps = scale->resampler.max_taps; + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + *n_taps *= 2; + } + return scale->resampler.taps + phase * scale->resampler.max_taps; +} + +static gboolean +resampler_convert_coeff (const gdouble * src, + gpointer dest, guint n, guint bits, guint precision) +{ + gdouble multiplier; + gint i, j; + gdouble offset, l_offset, h_offset; + gboolean exact = FALSE; + + multiplier = (1 << precision); + + /* Round to integer, but with an adjustable bias that we use to + * eliminate the DC error. */ + l_offset = 0.0; + h_offset = 1.0; + offset = 0.5; + + for (i = 0; i < 64; i++) { + gint sum = 0; + + for (j = 0; j < n; j++) { + gint16 tap = floor (offset + src[j] * multiplier); + + ((gint16 *) dest)[j] = tap; + + sum += tap; + } + if (sum == (1 << precision)) { + exact = TRUE; + break; + } + + if (l_offset == h_offset) + break; + + if (sum < (1 << precision)) { + if (offset > l_offset) + l_offset = offset; + offset += (h_offset - l_offset) / 2; + } else { + if (offset < h_offset) + h_offset = offset; + offset -= (h_offset - l_offset) / 2; + } + } + + if (!exact) + GST_WARNING ("can't find exact taps"); + + return exact; +} + +static void +make_s16_taps (GstVideoScaler * scale, gint n_elems, gint precision) +{ + gint i, j, max_taps, n_phases, out_size, src_inc; + gint16 *taps_s16, *taps_s16_4; + gdouble *taps; + guint32 *phase, *offset, *offset_n; + + n_phases = scale->resampler.n_phases; + max_taps = scale->resampler.max_taps; + + taps = scale->resampler.taps; + taps_s16 = scale->taps_s16 = g_malloc (sizeof (gint16) * n_phases * max_taps); + + for (i = 0; i < n_phases; i++) { + resampler_convert_coeff (taps, taps_s16, max_taps, 16, precision); + + taps += max_taps; + taps_s16 += max_taps; + } + + out_size = scale->resampler.out_size; + + taps_s16 = scale->taps_s16; + phase = scale->resampler.phase; + offset = scale->resampler.offset; + + taps_s16_4 = scale->taps_s16_4 = + g_malloc (sizeof (gint16) * out_size * max_taps * 4); + offset_n = scale->offset_n = + g_malloc (sizeof (guint32) * out_size * max_taps); + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + for (j = 0; j < max_taps; j++) { + for (i = 0; i < out_size; i++) { + gint16 tap; + + if (scale->merged) { + if ((i & 1) == scale->out_y_offset) + offset_n[j * out_size + i] = offset[i] + (2 * j); + else + offset_n[j * out_size + i] = offset[i] + (4 * j); + } else { + offset_n[j * out_size + i] = offset[i] + j * src_inc; + } + tap = taps_s16[phase[i] * max_taps + j]; + taps_s16_4[(j * out_size + i) * n_elems + 0] = tap; + if (n_elems > 1) + taps_s16_4[(j * out_size + i) * n_elems + 1] = tap; + if (n_elems > 2) + taps_s16_4[(j * out_size + i) * n_elems + 2] = tap; + if (n_elems > 3) + taps_s16_4[(j * out_size + i) * n_elems + 3] = tap; + } + } +} + +#undef ACC_SCALE + +static void +video_scale_h_near_u8 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint8 *s, *d; + gint i; + + d = (guint8 *) dest + dest_offset; + s = (guint8 *) src; + + { +#ifndef ACC_SCALE + guint32 *offset = scale->resampler.offset + dest_offset; + + for (i = 0; i < width; i++) + d[i] = s[offset[i]]; +#else + gint acc = 0; + + for (i = 0; i < width; i++) { + gint j = (acc + 0x8000) >> 16; + d[i] = s[j]; + acc += scale->inc; + } +#endif + } +} + +static void +video_scale_h_near_3u8 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint8 *s, *d; + gint i; + + d = (guint8 *) dest + dest_offset; + s = (guint8 *) src; + + { +#ifndef ACC_SCALE + guint32 *offset = scale->resampler.offset + dest_offset; + + for (i = 0; i < width; i++) { + gint j = offset[i] * 3; + + d[i * 3 + 0] = s[j + 0]; + d[i * 3 + 1] = s[j + 1]; + d[i * 3 + 2] = s[j + 2]; + } +#else + gint acc = 0; + + for (i = 0; i < width; i++) { + gint j = ((acc + 0x8000) >> 16) * 3; + + d[i * 3 + 0] = s[j + 0]; + d[i * 3 + 1] = s[j + 1]; + d[i * 3 + 2] = s[j + 2]; + acc += scale->inc; + } +#endif + } +} + +static void +video_scale_h_near_u16 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint16 *s, *d; + gint i; + + d = (guint16 *) dest + dest_offset; + s = (guint16 *) src; + + { +#ifndef ACC_SCALE + guint32 *offset = scale->resampler.offset + dest_offset; + + for (i = 0; i < width; i++) + d[i] = s[offset[i]]; +#else + gint acc = 0; + + for (i = 0; i < width; i++) { + gint j = (acc + 0x8000) >> 16; + d[i] = s[j]; + acc += scale->inc; + } +#endif + } +} + +static void +video_scale_h_near_u32 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint32 *s, *d; + + d = (guint32 *) dest + dest_offset; + s = (guint32 *) src; + +#if 0 + /* ORC is slower on this */ + video_orc_resample_h_near_u32_lq (d, s, 0, scale->inc, width); +#elif 0 + video_orc_resample_h_near_u32 (d, s, offset, width); +#else + { + gint i; +#ifndef ACC_SCALE + guint32 *offset = scale->resampler.offset + dest_offset; + + for (i = 0; i < width; i++) + d[i] = s[offset[i]]; +#else + gint acc = 0; + + for (i = 0; i < width; i++) { + gint j = (acc + 0x8000) >> 16; + d[i] = s[j]; + acc += scale->inc; + } +#endif + } +#endif +} + +static void +video_scale_h_near_u64 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint64 *s, *d; + gint i; + guint32 *offset; + + d = (guint64 *) dest + dest_offset; + s = (guint64 *) src; + + offset = scale->resampler.offset + dest_offset; + for (i = 0; i < width; i++) + d[i] = s[offset[i]]; +} + +static void +video_scale_h_2tap_1u8 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint8 *s, *d; + + d = (guint8 *) dest + dest_offset; + s = (guint8 *) src; + + video_orc_resample_h_2tap_1u8_lq (d, s, 0, scale->inc, width); +} + +static void +video_scale_h_2tap_4u8 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + guint32 *s, *d; + + d = (guint32 *) dest + dest_offset; + s = (guint32 *) src; + + video_orc_resample_h_2tap_4u8_lq (d, s, 0, scale->inc, width); +} + +static void +video_scale_h_ntap_u8 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + gint16 *taps; + gint i, max_taps, count; + gpointer d; + guint32 *offset_n; + guint8 *pixels; + gint16 *temp; + + if (scale->taps_s16 == NULL) +#ifdef LQ + make_s16_taps (scale, n_elems, SCALE_U8_LQ); +#else + make_s16_taps (scale, n_elems, SCALE_U8); +#endif + + max_taps = scale->resampler.max_taps; + offset_n = scale->offset_n; + + pixels = (guint8 *) scale->tmpline1; + + /* prepare the arrays */ + count = width * max_taps; + switch (n_elems) { + case 1: + { + guint8 *s = (guint8 *) src; + + for (i = 0; i < count; i++) + pixels[i] = s[offset_n[i]]; + + d = (guint8 *) dest + dest_offset; + break; + } + case 2: + { + guint16 *p16 = (guint16 *) pixels; + guint16 *s = (guint16 *) src; + + for (i = 0; i < count; i++) + p16[i] = s[offset_n[i]]; + + d = (guint16 *) dest + dest_offset; + break; + } + case 3: + { + guint8 *s = (guint8 *) src; + + for (i = 0; i < count; i++) { + gint j = offset_n[i] * 3; + pixels[i * 3 + 0] = s[j + 0]; + pixels[i * 3 + 1] = s[j + 1]; + pixels[i * 3 + 2] = s[j + 2]; + } + d = (guint8 *) dest + dest_offset * 3; + break; + } + case 4: + { + guint32 *p32 = (guint32 *) pixels; + guint32 *s = (guint32 *) src; +#if 0 + video_orc_resample_h_near_u32 (p32, s, offset_n, count); +#else + for (i = 0; i < count; i++) + p32[i] = s[offset_n[i]]; +#endif + d = (guint32 *) dest + dest_offset; + break; + } + default: + return; + } + temp = (gint16 *) scale->tmpline2; + taps = scale->taps_s16_4; + count = width * n_elems; + +#ifdef LQ + if (max_taps == 2) { + video_orc_resample_h_2tap_u8_lq (d, pixels, pixels + count, taps, + taps + count, count); + } else { + /* first pixels with first tap to temp */ + if (max_taps >= 3) { + video_orc_resample_h_multaps3_u8_lq (temp, pixels, pixels + count, + pixels + count * 2, taps, taps + count, taps + count * 2, count); + max_taps -= 3; + pixels += count * 3; + taps += count * 3; + } else { + gint first = max_taps % 3; + + video_orc_resample_h_multaps_u8_lq (temp, pixels, taps, count); + video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels + count, count, + taps + count, count * 2, count, first - 1); + max_taps -= first; + pixels += count * first; + taps += count * first; + } + while (max_taps > 3) { + if (max_taps >= 6) { + video_orc_resample_h_muladdtaps3_u8_lq (temp, pixels, pixels + count, + pixels + count * 2, taps, taps + count, taps + count * 2, count); + max_taps -= 3; + pixels += count * 3; + taps += count * 3; + } else { + video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels, count, + taps, count * 2, count, max_taps - 3); + pixels += count * (max_taps - 3); + taps += count * (max_taps - 3); + max_taps = 3; + } + } + if (max_taps == 3) { + video_orc_resample_h_muladdscaletaps3_u8_lq (d, pixels, pixels + count, + pixels + count * 2, taps, taps + count, taps + count * 2, temp, + count); + } else { + if (max_taps) { + /* add other pixels with other taps to t4 */ + video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels, count, + taps, count * 2, count, max_taps); + } + /* scale and write final result */ + video_orc_resample_scaletaps_u8_lq (d, temp, count); + } + } +#else + /* first pixels with first tap to t4 */ + video_orc_resample_h_multaps_u8 (temp, pixels, taps, count); + /* add other pixels with other taps to t4 */ + video_orc_resample_h_muladdtaps_u8 (temp, 0, pixels + count, count, + taps + count, count * 2, count, max_taps - 1); + /* scale and write final result */ + video_orc_resample_scaletaps_u8 (d, temp, count); +#endif +} + +static void +video_scale_h_ntap_u16 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems) +{ + gint16 *taps; + gint i, max_taps, count; + gpointer d; + guint32 *offset_n; + guint16 *pixels; + gint32 *temp; + + if (scale->taps_s16 == NULL) + make_s16_taps (scale, n_elems, SCALE_U16); + + max_taps = scale->resampler.max_taps; + offset_n = scale->offset_n; + + pixels = (guint16 *) scale->tmpline1; + /* prepare the arrays FIXME, we can add this into ORC */ + count = width * max_taps; + switch (n_elems) { + case 1: + { + guint16 *s = (guint16 *) src; + + for (i = 0; i < count; i++) + pixels[i] = s[offset_n[i]]; + + d = (guint16 *) dest + dest_offset; + break; + } + case 4: + { + guint64 *p64 = (guint64 *) pixels; + guint64 *s = (guint64 *) src; +#if 0 + video_orc_resample_h_near_u32 (p32, s, offset_n, count); +#else + for (i = 0; i < count; i++) + p64[i] = s[offset_n[i]]; +#endif + d = (guint64 *) dest + dest_offset; + break; + } + default: + return; + } + + temp = (gint32 *) scale->tmpline2; + taps = scale->taps_s16_4; + count = width * n_elems; + + if (max_taps == 2) { + video_orc_resample_h_2tap_u16 (d, pixels, pixels + count, taps, + taps + count, count); + } else { + /* first pixels with first tap to t4 */ + video_orc_resample_h_multaps_u16 (temp, pixels, taps, count); + /* add other pixels with other taps to t4 */ + video_orc_resample_h_muladdtaps_u16 (temp, 0, pixels + count, count * 2, + taps + count, count * 2, count, max_taps - 1); + /* scale and write final result */ + video_orc_resample_scaletaps_u16 (d, temp, count); + } +} + +static void +video_scale_v_near_u8 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + if (dest != srcs[0]) + memcpy (dest, srcs[0], n_elems * width); +} + +static void +video_scale_v_near_u16 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + if (dest != srcs[0]) + memcpy (dest, srcs[0], n_elems * 2 * width); +} + +static void +video_scale_v_2tap_u8 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + gint max_taps, src_inc; + guint8 *s1, *s2, *d; + gint16 p1; + + if (scale->taps_s16 == NULL) +#ifdef LQ + make_s16_taps (scale, n_elems, SCALE_U8_LQ + 2); +#else + make_s16_taps (scale, n_elems, SCALE_U8); +#endif + + max_taps = scale->resampler.max_taps; + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + d = (guint8 *) dest; + s1 = (guint8 *) srcs[0 * src_inc]; + s2 = (guint8 *) srcs[1 * src_inc]; + p1 = scale->taps_s16[dest_offset * max_taps + 1]; + +#ifdef LQ + video_orc_resample_v_2tap_u8_lq (d, s1, s2, p1, width * n_elems); +#else + video_orc_resample_v_2tap_u8 (d, s1, s2, p1, width * n_elems); +#endif +} + +static void +video_scale_v_2tap_u16 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + gint max_taps, src_inc; + guint16 *s1, *s2, *d; + gint16 p1; + + if (scale->taps_s16 == NULL) + make_s16_taps (scale, n_elems, SCALE_U16); + + max_taps = scale->resampler.max_taps; + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + d = (guint16 *) dest; + s1 = (guint16 *) srcs[0 * src_inc]; + s2 = (guint16 *) srcs[1 * src_inc]; + p1 = scale->taps_s16[dest_offset * max_taps + 1]; + + video_orc_resample_v_2tap_u16 (d, s1, s2, p1, width * n_elems); +} + +#if 0 +static void +video_scale_h_4tap_8888 (GstVideoScaler * scale, + gpointer src, gpointer dest, guint dest_offset, guint width) +{ + gint16 *taps; + gint i, max_taps, count; + guint8 *d; + guint32 *offset_n; + guint32 *pixels; + + if (scale->taps_s16 == NULL) + make_s16_taps (scale, n_elems, S16_SCALE); + + max_taps = scale->resampler.max_taps; + offset_n = scale->offset_n; + + d = (guint8 *) dest + 4 * dest_offset; + + /* prepare the arrays FIXME, we can add this into ORC */ + count = width * max_taps; + pixels = (guint32 *) scale->tmpline1; + for (i = 0; i < count; i++) + pixels[i] = ((guint32 *) src)[offset_n[i]]; + + taps = scale->taps_s16_4; + count = width * 4; + + video_orc_resample_h_4tap_8 (d, pixels, pixels + width, pixels + 2 * width, + pixels + 3 * width, taps, taps + count, taps + 2 * count, + taps + 3 * count, count); +} +#endif + +static void +video_scale_v_4tap_u8 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + gint max_taps; + guint8 *s1, *s2, *s3, *s4, *d; + gint p1, p2, p3, p4, src_inc; + gint16 *taps; + + if (scale->taps_s16 == NULL) +#ifdef LQ + make_s16_taps (scale, n_elems, SCALE_U8_LQ); +#else + make_s16_taps (scale, n_elems, SCALE_U8); +#endif + + max_taps = scale->resampler.max_taps; + taps = scale->taps_s16 + dest_offset * max_taps; + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + d = (guint8 *) dest; + s1 = (guint8 *) srcs[0 * src_inc]; + s2 = (guint8 *) srcs[1 * src_inc]; + s3 = (guint8 *) srcs[2 * src_inc]; + s4 = (guint8 *) srcs[3 * src_inc]; + p1 = taps[0]; + p2 = taps[1]; + p3 = taps[2]; + p4 = taps[3]; + +#ifdef LQ + video_orc_resample_v_4tap_u8_lq (d, s1, s2, s3, s4, p1, p2, p3, p4, + width * n_elems); +#else + video_orc_resample_v_4tap_u8 (d, s1, s2, s3, s4, p1, p2, p3, p4, + width * n_elems); +#endif +} + +static void +video_scale_v_ntap_u8 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + gint16 *taps; + gint i, max_taps, count, src_inc; + gpointer d; + gint16 *temp; + + if (scale->taps_s16 == NULL) +#ifdef LQ + make_s16_taps (scale, n_elems, SCALE_U8_LQ); +#else + make_s16_taps (scale, n_elems, SCALE_U8); +#endif + + max_taps = scale->resampler.max_taps; + taps = scale->taps_s16 + (scale->resampler.phase[dest_offset] * max_taps); + + d = (guint32 *) dest; + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + temp = (gint16 *) scale->tmpline2; + count = width * n_elems; + +#ifdef LQ + if (max_taps >= 4) { + video_orc_resample_v_multaps4_u8_lq (temp, srcs[0], srcs[1 * src_inc], + srcs[2 * src_inc], srcs[3 * src_inc], taps[0], taps[1], taps[2], + taps[3], count); + max_taps -= 4; + srcs += 4 * src_inc; + taps += 4; + } else { + gint first = (max_taps % 4); + + video_orc_resample_v_multaps_u8_lq (temp, srcs[0], taps[0], count); + for (i = 1; i < first; i++) { + video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i], + count); + } + max_taps -= first; + srcs += first * src_inc; + taps += first; + } + while (max_taps > 4) { + if (max_taps >= 8) { + video_orc_resample_v_muladdtaps4_u8_lq (temp, srcs[0], srcs[1 * src_inc], + srcs[2 * src_inc], srcs[3 * src_inc], taps[0], taps[1], taps[2], + taps[3], count); + max_taps -= 4; + srcs += 4 * src_inc; + taps += 4; + } else { + for (i = 0; i < max_taps - 4; i++) + video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i], + count); + srcs += (max_taps - 4) * src_inc; + taps += (max_taps - 4); + max_taps = 4; + } + } + if (max_taps == 4) { + video_orc_resample_v_muladdscaletaps4_u8_lq (d, srcs[0], srcs[1 * src_inc], + srcs[2 * src_inc], srcs[3 * src_inc], temp, taps[0], taps[1], taps[2], + taps[3], count); + } else { + for (i = 0; i < max_taps; i++) + video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i], + count); + video_orc_resample_scaletaps_u8_lq (d, temp, count); + } + +#else + video_orc_resample_v_multaps_u8 (temp, srcs[0], taps[0], count); + for (i = 1; i < max_taps; i++) { + video_orc_resample_v_muladdtaps_u8 (temp, srcs[i * src_inc], taps[i], + count); + } + video_orc_resample_scaletaps_u8 (d, temp, count); +#endif +} + +static void +video_scale_v_ntap_u16 (GstVideoScaler * scale, + gpointer srcs[], gpointer dest, guint dest_offset, guint width, + guint n_elems) +{ + gint16 *taps; + gint i, max_taps, count, src_inc; + gpointer d; + gint32 *temp; + + if (scale->taps_s16 == NULL) + make_s16_taps (scale, n_elems, SCALE_U16); + + max_taps = scale->resampler.max_taps; + taps = scale->taps_s16 + (scale->resampler.phase[dest_offset] * max_taps); + + d = (guint16 *) dest; + + if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED) + src_inc = 2; + else + src_inc = 1; + + temp = (gint32 *) scale->tmpline2; + count = width * n_elems; + + video_orc_resample_v_multaps_u16 (temp, srcs[0], taps[0], count); + for (i = 1; i < max_taps; i++) { + video_orc_resample_v_muladdtaps_u16 (temp, srcs[i * src_inc], taps[i], + count); + } + video_orc_resample_scaletaps_u16 (d, temp, count); +} + +static gint +get_y_offset (GstVideoFormat format) +{ + switch (format) { + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_YVYU: + return 0; + default: + case GST_VIDEO_FORMAT_UYVY: + return 1; + } +} + +/** + * gst_video_scaler_combine_packed_YUV: (skip) + * @y_scale: a scaler for the Y component + * @uv_scale: a scaler for the U and V components + * @in_format: the input video format + * @out_format: the output video format + * + * Combine a scaler for Y and UV into one scaler for the packed @format. + * + * Returns: a new horizontal videoscaler for @format. + * + * Since: 1.6 + */ +GstVideoScaler * +gst_video_scaler_combine_packed_YUV (GstVideoScaler * y_scale, + GstVideoScaler * uv_scale, GstVideoFormat in_format, + GstVideoFormat out_format) +{ + GstVideoScaler *scale; + GstVideoResampler *resampler; + guint i, out_size, max_taps, n_phases; + gdouble *taps; + guint32 *offset, *phase; + + g_return_val_if_fail (y_scale != NULL, NULL); + g_return_val_if_fail (uv_scale != NULL, NULL); + g_return_val_if_fail (uv_scale->resampler.max_taps == + y_scale->resampler.max_taps, NULL); + + scale = g_slice_new0 (GstVideoScaler); + + scale->method = y_scale->method; + scale->flags = y_scale->flags; + scale->merged = TRUE; + + resampler = &scale->resampler; + + out_size = GST_ROUND_UP_4 (y_scale->resampler.out_size * 2); + max_taps = y_scale->resampler.max_taps; + n_phases = out_size; + offset = g_malloc (sizeof (guint32) * out_size); + phase = g_malloc (sizeof (guint32) * n_phases); + taps = g_malloc (sizeof (gdouble) * max_taps * n_phases); + + resampler->in_size = y_scale->resampler.in_size * 2; + resampler->out_size = out_size; + resampler->max_taps = max_taps; + resampler->n_phases = n_phases; + resampler->offset = offset; + resampler->phase = phase; + resampler->n_taps = g_malloc (sizeof (guint32) * out_size); + resampler->taps = taps; + + scale->in_y_offset = get_y_offset (in_format); + scale->out_y_offset = get_y_offset (out_format); + scale->inc = y_scale->inc; + + for (i = 0; i < out_size; i++) { + gint ic; + + if ((i & 1) == scale->out_y_offset) { + ic = MIN (i / 2, y_scale->resampler.out_size - 1); + offset[i] = y_scale->resampler.offset[ic] * 2 + scale->in_y_offset; + memcpy (taps + i * max_taps, y_scale->resampler.taps + + y_scale->resampler.phase[ic] * max_taps, max_taps * sizeof (gdouble)); + } else { + ic = MIN (i / 4, uv_scale->resampler.out_size - 1); + offset[i] = uv_scale->resampler.offset[ic] * 4 + (i & 3); + memcpy (taps + i * max_taps, uv_scale->resampler.taps + + uv_scale->resampler.phase[ic] * max_taps, + max_taps * sizeof (gdouble)); + } + phase[i] = i; + } + + scaler_dump (scale); + + return scale; +} + +static gboolean +get_functions (GstVideoScaler * hscale, GstVideoScaler * vscale, + GstVideoFormat format, + GstVideoScalerHFunc * hfunc, GstVideoScalerVFunc * vfunc, + gint * n_elems, guint * width) +{ + gint bits; + gboolean mono = FALSE; + + switch (format) { + case GST_VIDEO_FORMAT_GRAY8: + bits = 8; + *n_elems = 1; + mono = TRUE; + break; + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_UYVY: + bits = 8; + *n_elems = 1; + *width = GST_ROUND_UP_4 (*width * 2); + break; + case GST_VIDEO_FORMAT_RGB: + case GST_VIDEO_FORMAT_BGR: + case GST_VIDEO_FORMAT_v308: + bits = 8; + *n_elems = 3; + break; + case GST_VIDEO_FORMAT_AYUV: + case GST_VIDEO_FORMAT_RGBx: + case GST_VIDEO_FORMAT_BGRx: + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_xBGR: + case GST_VIDEO_FORMAT_RGBA: + case GST_VIDEO_FORMAT_BGRA: + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_ABGR: + bits = 8; + *n_elems = 4; + break; + case GST_VIDEO_FORMAT_ARGB64: + case GST_VIDEO_FORMAT_AYUV64: + bits = 16; + *n_elems = 4; + break; + case GST_VIDEO_FORMAT_GRAY16_LE: + case GST_VIDEO_FORMAT_GRAY16_BE: + bits = 16; + *n_elems = 1; + mono = TRUE; + break; + case GST_VIDEO_FORMAT_NV12: + case GST_VIDEO_FORMAT_NV16: + case GST_VIDEO_FORMAT_NV21: + case GST_VIDEO_FORMAT_NV24: + case GST_VIDEO_FORMAT_NV61: + bits = 8; + *n_elems = 2; + break; + default: + return FALSE; + } + if (bits == 8) { + switch (hscale ? hscale->resampler.max_taps : 0) { + case 0: + break; + case 1: + if (*n_elems == 1) + *hfunc = video_scale_h_near_u8; + else if (*n_elems == 2) + *hfunc = video_scale_h_near_u16; + else if (*n_elems == 3) + *hfunc = video_scale_h_near_3u8; + else if (*n_elems == 4) + *hfunc = video_scale_h_near_u32; + break; + case 2: + if (*n_elems == 1 && mono) + *hfunc = video_scale_h_2tap_1u8; + else if (*n_elems == 4) + *hfunc = video_scale_h_2tap_4u8; + else + *hfunc = video_scale_h_ntap_u8; + break; + default: + *hfunc = video_scale_h_ntap_u8; + break; + } + switch (vscale ? vscale->resampler.max_taps : 0) { + case 0: + break; + case 1: + *vfunc = video_scale_v_near_u8; + break; + case 2: + *vfunc = video_scale_v_2tap_u8; + break; + case 4: + *vfunc = video_scale_v_4tap_u8; + break; + default: + *vfunc = video_scale_v_ntap_u8; + break; + } + } else if (bits == 16) { + switch (hscale ? hscale->resampler.max_taps : 0) { + case 0: + break; + case 1: + if (*n_elems == 1) + *hfunc = video_scale_h_near_u16; + else + *hfunc = video_scale_h_near_u64; + break; + default: + *hfunc = video_scale_h_ntap_u16; + break; + } + switch (vscale ? vscale->resampler.max_taps : 0) { + case 0: + break; + case 1: + *vfunc = video_scale_v_near_u16; + break; + case 2: + *vfunc = video_scale_v_2tap_u16; + break; + default: + *vfunc = video_scale_v_ntap_u16; + break; + } + } + return TRUE; +} + +/** + * gst_video_scaler_horizontal: + * @scale: a #GstVideoScaler + * @format: a #GstVideoFormat for @src and @dest + * @src: source pixels + * @dest: destination pixels + * @dest_offset: the horizontal destination offset + * @width: the number of pixels to scale + * + * Horizontally scale the pixels in @src to @dest, starting from @dest_offset + * for @width samples. + */ +void +gst_video_scaler_horizontal (GstVideoScaler * scale, GstVideoFormat format, + gpointer src, gpointer dest, guint dest_offset, guint width) +{ + gint n_elems; + GstVideoScalerHFunc func = NULL; + + g_return_if_fail (scale != NULL); + g_return_if_fail (src != NULL); + g_return_if_fail (dest != NULL); + g_return_if_fail (dest_offset + width <= scale->resampler.out_size); + + if (!get_functions (scale, NULL, format, &func, NULL, &n_elems, &width) + || func == NULL) + goto no_func; + + if (scale->tmpwidth < width) + realloc_tmplines (scale, n_elems, width); + + func (scale, src, dest, dest_offset, width, n_elems); + return; + +no_func: + { + GST_WARNING ("no scaler function for format"); + } +} + +/** + * gst_video_scaler_vertical: + * @scale: a #GstVideoScaler + * @format: a #GstVideoFormat for @srcs and @dest + * @src_lines: source pixels lines + * @dest: destination pixels + * @dest_offset: the vertical destination offset + * @width: the number of pixels to scale + * + * Vertically combine @width pixels in the lines in @src_lines to @dest. + * @dest is the location of the target line at @dest_offset and + * @srcs are the input lines for @dest_offset, as obtained with + * gst_video_scaler_get_info(). + */ +void +gst_video_scaler_vertical (GstVideoScaler * scale, GstVideoFormat format, + gpointer src_lines[], gpointer dest, guint dest_offset, guint width) +{ + gint n_elems; + GstVideoScalerVFunc func = NULL; + + g_return_if_fail (scale != NULL); + g_return_if_fail (src_lines != NULL); + g_return_if_fail (dest != NULL); + g_return_if_fail (dest_offset < scale->resampler.out_size); + + if (!get_functions (NULL, scale, format, NULL, &func, &n_elems, &width) + || func == NULL) + goto no_func; + + if (scale->tmpwidth < width) + realloc_tmplines (scale, n_elems, width); + + func (scale, src_lines, dest, dest_offset, width, n_elems); + + return; + +no_func: + { + GST_WARNING ("no scaler function for format"); + } +} + + +/** + * gst_video_scaler_2d: + * @hscale: a horzontal #GstVideoScaler + * @vscale: a vertical #GstVideoScaler + * @format: a #GstVideoFormat for @srcs and @dest + * @src: source pixels + * @src_stride: source pixels stride + * @dest: destination pixels + * @dest_stride: destination pixels stride + * @x: the horizontal destination offset + * @y: the vertical destination offset + * @width: the number of output pixels to scale + * @height: the number of output lines to scale + * + * Scale a rectangle of pixels in @src with @src_stride to @dest with + * @dest_stride using the horizontal scaler @hscaler and the vertical + * scaler @vscale. + * + * One or both of @hscale and @vscale can be NULL to only perform scaling in + * one dimension or do a copy without scaling. + * + * @x and @y are the coordinates in the destination image to process. + */ +void +gst_video_scaler_2d (GstVideoScaler * hscale, GstVideoScaler * vscale, + GstVideoFormat format, gpointer src, gint src_stride, + gpointer dest, gint dest_stride, guint x, guint y, + guint width, guint height) +{ + gint n_elems; + GstVideoScalerHFunc hfunc = NULL; + GstVideoScalerVFunc vfunc = NULL; + gint i; + + g_return_if_fail (src != NULL); + g_return_if_fail (dest != NULL); + + if (!get_functions (hscale, vscale, format, &hfunc, &vfunc, &n_elems, &width)) + goto no_func; + +#define LINE(s,ss,i) ((guint8 *)(s) + ((i) * (ss))) +#define TMP_LINE(s,i,v) ((guint8 *)(s->tmpline1) + (((i) % (v)) * (sizeof (gint32) * width * n_elems))) + + if (vscale == NULL) { + if (hscale == NULL) { + guint xo, xw; + guint8 *s, *d; + + xo = x * n_elems; + xw = width * n_elems; + + s = LINE (src, src_stride, y) + xo; + d = LINE (dest, dest_stride, y) + xo; + + /* no scaling, do memcpy */ + for (i = y; i < height; i++) { + memcpy (d, s, xw); + d += dest_stride; + s += src_stride; + } + } else { + if (hscale->tmpwidth < width) + realloc_tmplines (hscale, n_elems, width); + + /* only horizontal scaling */ + for (i = y; i < height; i++) { + hfunc (hscale, LINE (src, src_stride, i), LINE (dest, dest_stride, i), + x, width, n_elems); + } + } + } else { + guint v_taps; + gpointer *lines; + + if (vscale->tmpwidth < width) + realloc_tmplines (vscale, n_elems, width); + + v_taps = vscale->resampler.max_taps; + lines = g_alloca (v_taps * sizeof (gpointer)); + + if (hscale == NULL) { + /* only vertical scaling */ + for (i = y; i < height; i++) { + guint in, j; + + in = vscale->resampler.offset[i]; + for (j = 0; j < v_taps; j++) + lines[j] = LINE (src, src_stride, in + j); + + vfunc (vscale, lines, LINE (dest, dest_stride, i), i, width, n_elems); + } + } else { + gint tmp_in = y; + gint s1, s2; + + if (hscale->tmpwidth < width) + realloc_tmplines (hscale, n_elems, width); + + s1 = width * vscale->resampler.offset[height - 1]; + s2 = width * height; + + if (s1 <= s2) { + for (i = y; i < height; i++) { + guint in, j; + + in = vscale->resampler.offset[i]; + while (tmp_in < in) + tmp_in++; + while (tmp_in < in + v_taps) { + hfunc (hscale, LINE (src, src_stride, tmp_in), TMP_LINE (vscale, + tmp_in, v_taps), x, width, n_elems); + tmp_in++; + } + for (j = 0; j < v_taps; j++) + lines[j] = TMP_LINE (vscale, in + j, v_taps); + + vfunc (vscale, lines, LINE (dest, dest_stride, i), i, width, n_elems); + } + } else { + guint vx, vw, w1, ws; + guint h_taps; + + h_taps = hscale->resampler.max_taps; + w1 = x + width - 1; + ws = hscale->resampler.offset[w1]; + + /* we need to estimate the area that we first need to scale in the + * vertical direction. Scale x and width to find the lower bound and + * overshoot the width to find the upper bound */ + vx = (hscale->inc * x) >> 16; + vx = MIN (vx, hscale->resampler.offset[x]); + vw = (hscale->inc * (x + width)) >> 16; + if (hscale->merged) { + if ((w1 & 1) == hscale->out_y_offset) + vw = MAX (vw, ws + (2 * h_taps)); + else + vw = MAX (vw, ws + (4 * h_taps)); + } else { + vw = MAX (vw, ws + h_taps); + } + vw += 1; + /* but clamp to max size */ + vw = MIN (vw, hscale->resampler.in_size); + + if (vscale->tmpwidth < vw) + realloc_tmplines (vscale, n_elems, vw); + + for (i = y; i < height; i++) { + guint in, j; + + in = vscale->resampler.offset[i]; + for (j = 0; j < v_taps; j++) + lines[j] = LINE (src, src_stride, in + j) + vx * n_elems; + + vfunc (vscale, lines, TMP_LINE (vscale, 0, v_taps) + vx * n_elems, i, + vw - vx, n_elems); + + hfunc (hscale, TMP_LINE (vscale, 0, v_taps), LINE (dest, dest_stride, + i), x, width, n_elems); + } + } + } + } + return; + +no_func: + { + GST_WARNING ("no scaler function for format"); + } +} diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-scaler.h gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-scaler.h --- gst-plugins-base1.0-1.4.3/gst-libs/gst/video/video-scaler.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/gst/video/video-scaler.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,90 @@ +/* GStreamer + * Copyright (C) <2014> Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_VIDEO_SCALER_H__ +#define __GST_VIDEO_SCALER_H__ + +#include + +#include +#include +#include + +G_BEGIN_DECLS + +/** + * GST_VIDEO_SCALER_OPT_DITHER_METHOD: + * + * #GST_TYPE_VIDEO_DITHER_METHOD, The dither method to use for propagating + * quatization errors. + */ +#define GST_VIDEO_SCALER_OPT_DITHER_METHOD "GstVideoScaler.dither-method" + +/** + * GstVideoScalerFlags: + * @GST_VIDEO_SCALER_FLAG_NONE: no flags + * @GST_VIDEO_SCALER_FLAG_INTERLACED: Set up a scaler for interlaced content + * + * Different scale flags. + */ +typedef enum { + GST_VIDEO_SCALER_FLAG_NONE = (0), + GST_VIDEO_SCALER_FLAG_INTERLACED = (1 << 0), +} GstVideoScalerFlags; + +typedef struct _GstVideoScaler GstVideoScaler; + +GstVideoScaler * gst_video_scaler_new (GstVideoResamplerMethod method, + GstVideoScalerFlags flags, + guint n_taps, + guint in_size, guint out_size, + GstStructure * options); +void gst_video_scaler_free (GstVideoScaler *scale); + +guint gst_video_scaler_get_max_taps (GstVideoScaler *scale); +const gdouble * gst_video_scaler_get_coeff (GstVideoScaler *scale, + guint out_offset, + guint *in_offset, + guint *n_taps); + +void gst_video_scaler_horizontal (GstVideoScaler *scale, + GstVideoFormat format, + gpointer src, gpointer dest, + guint dest_offset, guint width); +void gst_video_scaler_vertical (GstVideoScaler *scale, + GstVideoFormat format, + gpointer src_lines[], gpointer dest, + guint dest_offset, guint width); + +GstVideoScaler * gst_video_scaler_combine_packed_YUV (GstVideoScaler * y_scale, + GstVideoScaler *uv_scale, + GstVideoFormat in_format, + GstVideoFormat out_format); + +void gst_video_scaler_2d (GstVideoScaler *hscale, + GstVideoScaler *vscale, + GstVideoFormat format, + gpointer src, gint src_stride, + gpointer dest, gint dest_stride, + guint x, guint y, + guint width, guint height); + +G_END_DECLS + +#endif /* __GST_VIDEO_SCALER_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/gst-libs/Makefile.in gst-plugins-base1.0-1.6.1/gst-libs/Makefile.in --- gst-plugins-base1.0-1.4.3/gst-libs/Makefile.in 2014-09-24 08:16:01.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-libs/Makefile.in 2015-10-30 14:20:32.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = gst-libs -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -176,6 +185,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -261,6 +271,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -290,6 +302,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -317,7 +331,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -332,6 +345,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -421,13 +435,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -480,6 +493,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -508,7 +522,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gst-libs/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -803,6 +816,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/gst-plugins-base.doap gst-plugins-base1.0-1.6.1/gst-plugins-base.doap --- gst-plugins-base1.0-1.4.3/gst-plugins-base.doap 2014-09-24 08:02:19.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-plugins-base.doap 2015-10-30 12:09:01.000000000 +0000 @@ -36,31 +36,61 @@ - 1.4.3 - 1.4 + 1.6.1 + 1.6 - 2014-09-24 - + 2015-10-30 + - 1.4.2 - 1.4 + 1.6.0 + 1.6 - 2014-09-19 - + 2015-09-25 + - 1.4.1 - 1.4 + 1.5.91 + 1.5 - 2014-08-27 - + 2015-09-18 + + + + + + + 1.5.90 + 1.5 + + 2015-08-19 + + + + + + + 1.5.2 + 1.5 + + 2015-06-24 + + + + + + + 1.5.1 + 1.5 + + 2015-06-07 + diff -Nru gst-plugins-base1.0-1.4.3/gst-plugins-base.spec gst-plugins-base1.0-1.6.1/gst-plugins-base.spec --- gst-plugins-base1.0-1.4.3/gst-plugins-base.spec 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-plugins-base.spec 2015-10-30 14:20:35.000000000 +0000 @@ -4,7 +4,7 @@ %define gst_minver 0.11.0 Name: %{gstreamer}-plugins-base -Version: 1.4.3 +Version: 1.6.1 Release: 1.gst Summary: GStreamer streaming media framework plug-ins @@ -81,8 +81,10 @@ # helper programs %{_bindir}/gst-discoverer-%{majorminor} %{_bindir}/gst-play-%{majorminor} +%{_bindir}/gst-device-monitor-%{majorminor} %{_mandir}/man1/gst-discoverer-%{majorminor}* %{_mandir}/man1/gst-play-%{majorminor}* +%{_mandir}/man1/gst-device-monitor-%{majorminor}* # libraries %{_libdir}/libgstaudio-%{majorminor}.so.* diff -Nru gst-plugins-base1.0-1.4.3/gst-plugins-base.spec.in gst-plugins-base1.0-1.6.1/gst-plugins-base.spec.in --- gst-plugins-base1.0-1.4.3/gst-plugins-base.spec.in 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/gst-plugins-base.spec.in 2015-10-22 08:01:34.000000000 +0000 @@ -81,8 +81,10 @@ # helper programs %{_bindir}/gst-discoverer-%{majorminor} %{_bindir}/gst-play-%{majorminor} +%{_bindir}/gst-device-monitor-%{majorminor} %{_mandir}/man1/gst-discoverer-%{majorminor}* %{_mandir}/man1/gst-play-%{majorminor}* +%{_mandir}/man1/gst-device-monitor-%{majorminor}* # libraries %{_libdir}/libgstaudio-%{majorminor}.so.* diff -Nru gst-plugins-base1.0-1.4.3/INSTALL gst-plugins-base1.0-1.6.1/INSTALL --- gst-plugins-base1.0-1.4.3/INSTALL 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/INSTALL 2015-10-30 12:09:09.000000000 +0000 @@ -1,48 +1,80 @@ +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + Basic Installation ================== - These are generic installation instructions. + Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. + `./configure' to configure the package for your system. - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. - 5. You can remove the program binaries and object files from the + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -51,62 +83,119 @@ all sorts of other programs in order to regenerate files that came with the distribution. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + Compilers and Options ===================== Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the +own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. Installation Names ================== - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular +options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE @@ -119,25 +208,80 @@ you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + CPU-COMPANY-SYSTEM -See the file `config.sub' for the possible values of each field. If +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't -need to know the host type. +need to know the machine type. - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. Sharing Defaults ================ @@ -150,19 +294,56 @@ `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. -Operation Controls +Defining Variables ================== + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + `configure' recognizes the following options to control how it operates. -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - `--help' - Print a summary of the options to `configure', and exit. +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. `--quiet' `--silent' @@ -175,8 +356,15 @@ Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. -`configure' also accepts some other, not widely useful, options. +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff -Nru gst-plugins-base1.0-1.4.3/install-sh gst-plugins-base1.0-1.6.1/install-sh --- gst-plugins-base1.0-1.4.3/install-sh 2014-08-27 10:22:33.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/install-sh 2015-10-30 12:09:09.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -97,7 +82,7 @@ dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -208,6 +204,15 @@ fi if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 @@ -223,16 +228,16 @@ *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -269,41 +274,15 @@ # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +293,81 @@ if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +377,51 @@ # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue + test X"$d" = X && continue - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +456,12 @@ # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +474,24 @@ # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 diff -Nru gst-plugins-base1.0-1.4.3/ltmain.sh gst-plugins-base1.0-1.6.1/ltmain.sh --- gst-plugins-base1.0-1.4.3/ltmain.sh 2014-09-24 07:21:51.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/ltmain.sh 2015-10-30 12:09:05.000000000 +0000 @@ -70,7 +70,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.10 +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.11 # automake: $automake_version # autoconf: $autoconf_version # @@ -80,7 +80,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1.10" +VERSION="2.4.2 Debian-2.4.2-1.11" TIMESTAMP="" package_revision=1.3337 diff -Nru gst-plugins-base1.0-1.4.3/m4/Makefile.in gst-plugins-base1.0-1.6.1/m4/Makefile.in --- gst-plugins-base1.0-1.4.3/m4/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/m4/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = m4 -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -141,6 +150,7 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -201,6 +211,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -230,6 +242,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -257,7 +271,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -272,6 +285,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -361,13 +375,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -420,6 +433,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -471,7 +485,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu m4/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -646,6 +659,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/Makefile.am gst-plugins-base1.0-1.6.1/Makefile.am --- gst-plugins-base1.0-1.4.3/Makefile.am 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -44,14 +44,18 @@ include $(top_srcdir)/common/po.mak check-valgrind: - cd tests/check && make check-valgrind + $(MAKE) -C tests/check check-valgrind if HAVE_GST_CHECK check-torture: - cd tests/check && make torture + $(MAKE) -C tests/check torture +build-checks: + $(MAKE) -C tests/check build-checks else check-torture: true +build-checks: + true endif WIN32_COPY = \ @@ -85,6 +89,7 @@ $(top_builddir)/tools/gst-discoverer CRUFT_DIRS = \ + $(top_srcdir)/docs/plugins/tmpl \ $(top_srcdir)/ext/gio \ $(top_srcdir)/gst/gdp \ $(top_srcdir)/sys/v4l \ diff -Nru gst-plugins-base1.0-1.4.3/Makefile.in gst-plugins-base1.0-1.6.1/Makefile.in --- gst-plugins-base1.0-1.4.3/Makefile.in 2014-09-24 08:16:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/Makefile.in 2015-10-30 14:20:31.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -25,7 +25,17 @@ # # set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -89,15 +99,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/win32.mak \ - $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak \ - $(top_srcdir)/common/coverage/lcov.mak \ - $(top_srcdir)/common/cruft.mak INSTALL NEWS README AUTHORS \ - ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.h.in $(srcdir)/gst-plugins-base.spec.in \ - ABOUT-NLS COPYING COPYING.LIB compile config.guess \ - config.rpath config.sub depcomp install-sh missing ltmain.sh subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -119,7 +120,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -136,6 +136,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d @@ -198,6 +200,14 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/gst-plugins-base.spec.in \ + $(top_srcdir)/common/coverage/lcov.mak \ + $(top_srcdir)/common/cruft.mak $(top_srcdir)/common/po.mak \ + $(top_srcdir)/common/release.mak \ + $(top_srcdir)/common/win32.mak ABOUT-NLS AUTHORS COPYING \ + COPYING.LIB ChangeLog INSTALL NEWS README compile config.guess \ + config.rpath config.sub depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -299,6 +309,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -328,6 +340,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -355,7 +369,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -370,6 +383,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -459,13 +473,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -518,6 +531,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -592,6 +606,7 @@ $(top_builddir)/tools/gst-discoverer CRUFT_DIRS = \ + $(top_srcdir)/docs/plugins/tmpl \ $(top_srcdir)/ext/gio \ $(top_srcdir)/gst/gdp \ $(top_srcdir)/sys/v4l \ @@ -616,7 +631,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -626,7 +640,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak: +$(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck @@ -852,15 +866,15 @@ $(am__post_remove_distdir) dist-tarZ: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) @@ -896,18 +910,18 @@ esac chmod -R a-w $(distdir) chmod u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_inst + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=.. --prefix="$$dc_install_base" \ + --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ @@ -1085,6 +1099,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + win32-debug: @echo; \ @@ -1187,12 +1203,16 @@ $(top_srcdir)/common/download-translations $(PACKAGE) check-valgrind: - cd tests/check && make check-valgrind + $(MAKE) -C tests/check check-valgrind @HAVE_GST_CHECK_TRUE@check-torture: -@HAVE_GST_CHECK_TRUE@ cd tests/check && make torture +@HAVE_GST_CHECK_TRUE@ $(MAKE) -C tests/check torture +@HAVE_GST_CHECK_TRUE@build-checks: +@HAVE_GST_CHECK_TRUE@ $(MAKE) -C tests/check build-checks @HAVE_GST_CHECK_FALSE@check-torture: @HAVE_GST_CHECK_FALSE@ true +@HAVE_GST_CHECK_FALSE@build-checks: +@HAVE_GST_CHECK_FALSE@ true win32-update: for f in $(WIN32_COPY); do cp -v $$f win32/common; done; \ diff -Nru gst-plugins-base1.0-1.4.3/missing gst-plugins-base1.0-1.6.1/missing --- gst-plugins-base1.0-1.4.3/missing 2014-08-27 10:22:33.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/missing 2015-10-30 12:09:09.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify diff -Nru gst-plugins-base1.0-1.4.3/NEWS gst-plugins-base1.0-1.6.1/NEWS --- gst-plugins-base1.0-1.4.3/NEWS 2014-09-24 08:18:43.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/NEWS 2015-10-30 14:21:38.000000000 +0000 @@ -1,2 +1,29 @@ -This is GStreamer Base Plugins 1.4.3 +This is GStreamer 1.6.1 + +The GStreamer team is proud to announce the first bugfix release in the stable +1.6 release series of your favourite cross-platform multimedia framework! + +This release only contains bugfixes and it is safe to update from 1.6.0. For a +full list of bugfixes see Bugzilla: + https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=73005&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.1 + +See http://gstreamer.freedesktop.org/releases/1.6/ for the latest version of this document. + +Major bugfixes + +- Crashes in the gst-libav encoders were fixed +- More DASH-IF test streams are working now +- Live DASH, HLS and MS SmoothStreaming streams work more reliable and other + fixes for the adaptive streaming protocols +- Reverse playback works with scaletempo to keep the audio pitch +- Correct stream-time is reported for negative applied_rate +- SRTP packet validation during decoding does not reject valid packets anymore +- Fixes for audioaggregator and aggregator to start producing output at the + right time, and e.g. not outputting lots of silence in the beginning +- gst-libav's internal ffmpeg snapshot was updated to 2.8.1 +- cerbero has support for Mac OS X 10.11 (El Capitan) +- Various memory leaks were fixed, including major leaks in playbin, playsink + and decodebin +- Various GObject-Introspection annotation fixes for bindings +- and many, many more: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=73005&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.1 diff -Nru gst-plugins-base1.0-1.4.3/pkgconfig/Makefile.in gst-plugins-base1.0-1.6.1/pkgconfig/Makefile.in --- gst-plugins-base1.0-1.4.3/pkgconfig/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/pkgconfig/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,31 +90,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = pkgconfig -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(srcdir)/gstreamer-allocators.pc.in \ - $(srcdir)/gstreamer-allocators-uninstalled.pc.in \ - $(srcdir)/gstreamer-audio.pc.in \ - $(srcdir)/gstreamer-audio-uninstalled.pc.in \ - $(srcdir)/gstreamer-app.pc.in \ - $(srcdir)/gstreamer-app-uninstalled.pc.in \ - $(srcdir)/gstreamer-fft.pc.in \ - $(srcdir)/gstreamer-fft-uninstalled.pc.in \ - $(srcdir)/gstreamer-pbutils.pc.in \ - $(srcdir)/gstreamer-pbutils-uninstalled.pc.in \ - $(srcdir)/gstreamer-riff.pc.in \ - $(srcdir)/gstreamer-riff-uninstalled.pc.in \ - $(srcdir)/gstreamer-rtp.pc.in \ - $(srcdir)/gstreamer-rtp-uninstalled.pc.in \ - $(srcdir)/gstreamer-rtsp.pc.in \ - $(srcdir)/gstreamer-rtsp-uninstalled.pc.in \ - $(srcdir)/gstreamer-sdp.pc.in \ - $(srcdir)/gstreamer-sdp-uninstalled.pc.in \ - $(srcdir)/gstreamer-tag.pc.in \ - $(srcdir)/gstreamer-tag-uninstalled.pc.in \ - $(srcdir)/gstreamer-video.pc.in \ - $(srcdir)/gstreamer-video-uninstalled.pc.in \ - $(srcdir)/gstreamer-plugins-base.pc.in \ - $(srcdir)/gstreamer-plugins-base-uninstalled.pc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -125,7 +110,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -142,6 +126,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gstreamer-allocators.pc \ @@ -207,6 +192,31 @@ am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(srcdir)/gstreamer-allocators-uninstalled.pc.in \ + $(srcdir)/gstreamer-allocators.pc.in \ + $(srcdir)/gstreamer-app-uninstalled.pc.in \ + $(srcdir)/gstreamer-app.pc.in \ + $(srcdir)/gstreamer-audio-uninstalled.pc.in \ + $(srcdir)/gstreamer-audio.pc.in \ + $(srcdir)/gstreamer-fft-uninstalled.pc.in \ + $(srcdir)/gstreamer-fft.pc.in \ + $(srcdir)/gstreamer-pbutils-uninstalled.pc.in \ + $(srcdir)/gstreamer-pbutils.pc.in \ + $(srcdir)/gstreamer-plugins-base-uninstalled.pc.in \ + $(srcdir)/gstreamer-plugins-base.pc.in \ + $(srcdir)/gstreamer-riff-uninstalled.pc.in \ + $(srcdir)/gstreamer-riff.pc.in \ + $(srcdir)/gstreamer-rtp-uninstalled.pc.in \ + $(srcdir)/gstreamer-rtp.pc.in \ + $(srcdir)/gstreamer-rtsp-uninstalled.pc.in \ + $(srcdir)/gstreamer-rtsp.pc.in \ + $(srcdir)/gstreamer-sdp-uninstalled.pc.in \ + $(srcdir)/gstreamer-sdp.pc.in \ + $(srcdir)/gstreamer-tag-uninstalled.pc.in \ + $(srcdir)/gstreamer-tag.pc.in \ + $(srcdir)/gstreamer-video-uninstalled.pc.in \ + $(srcdir)/gstreamer-video.pc.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -267,6 +277,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -296,6 +308,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -323,7 +337,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -338,6 +351,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -427,13 +441,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -486,6 +499,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -565,7 +579,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pkgconfig/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -815,6 +828,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-pkgconfigDATA +.PRECIOUS: Makefile + all-local: $(pcverfiles) $(pcverfiles_uninstalled) Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/af.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/af.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/af.po gst-plugins-base1.0-1.6.1/po/af.po --- gst-plugins-base1.0-1.4.3/po/af.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/af.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins 0.7.6\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2004-03-18 14:16+0200\n" "Last-Translator: Petri Jooste \n" "Language-Team: Afrikaans \n" @@ -83,10 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - #, fuzzy msgid "Could not determine type of stream" msgstr "Kon nie skryf na lêer \"%s\" nie." @@ -520,12 +516,96 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volume" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Kon nie CD-toestel oopmaak om te lees nie." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volume" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -538,7 +618,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -547,6 +627,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -554,6 +637,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + #~ msgid "Bass" #~ msgstr "Bas" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/az.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/az.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/az.po gst-plugins-base1.0-1.6.1/po/az.po --- gst-plugins-base1.0-1.4.3/po/az.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/az.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2004-03-19 18:29+0200\n" "Last-Translator: Metin Amiroff \n" "Language-Team: Azerbaijani \n" @@ -84,10 +84,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - #, fuzzy msgid "Could not determine type of stream" msgstr "\"%s\" faylına yazıla bilmədi." @@ -521,12 +517,96 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Səs" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "CD avadanlığı oxuma üçün açıla bilmədi." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Səs" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -539,7 +619,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -548,6 +628,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -555,6 +638,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + #~ msgid "Bass" #~ msgstr "Bas" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/bg.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/bg.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/bg.po gst-plugins-base1.0-1.6.1/po/bg.po --- gst-plugins-base1.0-1.4.3/po/bg.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/bg.po 2015-10-30 14:21:45.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2011-04-26 22:31+0300\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" @@ -80,12 +80,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Елементът „%s“ липсва — проверете инсталацията на GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"За да пуснете този поток, се нуждаете от приставка за %s. Такава не е " -"инсталирана." - msgid "Could not determine type of stream" msgstr "Видът на потока не може да бъде определен" @@ -524,12 +518,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Устройството не може да се отвори за изпълнение в стерео режим." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "В това CD липсва аудио" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Субтитри, формат Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -542,7 +621,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -551,6 +630,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -558,6 +640,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "За да пуснете този поток, се нуждаете от приставка за %s. Такава не е " +#~ "инсталирана." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Некомпресирано видео YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/ca.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/ca.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/ca.po gst-plugins-base1.0-1.6.1/po/ca.po --- gst-plugins-base1.0-1.4.3/po/ca.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/ca.po 2015-10-30 14:21:45.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2012-01-01 14:19+0100\n" "Last-Translator: Gil Forcada \n" "Language-Team: Catalan \n" @@ -85,12 +85,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Manca l'element «%s» - comproveu la vostra instaŀlació del GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Es requereix un connector %s per a reproduir aquest flux, però no és " -"instaŀlat." - msgid "Could not determine type of stream" msgstr "No s'ha pogut determinar el tipus de flux" @@ -536,12 +530,98 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "" +"No s'ha pogut obrir el dispositiu per a la reproducció en mode estèreo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Aquest CD no té pistes d'àudio" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Format de subtítols Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -554,7 +634,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -563,6 +643,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -570,6 +653,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Es requereix un connector %s per a reproduir aquest flux, però no és " +#~ "instaŀlat." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "YUV sense comprimir" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/cs.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/cs.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/cs.po gst-plugins-base1.0-1.6.1/po/cs.po --- gst-plugins-base1.0-1.4.3/po/cs.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/cs.po 2015-10-30 14:21:45.000000000 +0000 @@ -4,14 +4,14 @@ # # Miloslav Trmac , 2004. # Petr Kovar , 2007, 2008, 2009, 2010, 2011. -# Marek Černocký , 2013, 2014. +# Marek Černocký , 2013, 2014, 2015. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base-1.2.1\n" +"Project-Id-Version: gst-plugins-base-1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-03-09 12:37+0100\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-26 08:29+0200\n" "Last-Translator: Marek Černocký \n" "Language-Team: Czech \n" "Language: cs\n" @@ -83,12 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Schází prvek „%s“ – zkontrolujte prosím instalaci systému GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"K přehrání tohoto proudu je vyžadován zásuvný modul %s, ale není " -"nainstalován." - msgid "Could not determine type of stream" msgstr "Nezdařilo se určit typ proudu" @@ -522,12 +516,97 @@ "Don't exit after showing the initial device list, but wait for devices to " "added/removed." msgstr "" +"Po zobrazení počátečního seznamu zařízení neskončit, ale ček na přidání/" +"odebrání zařízení." + +#, c-format +msgid "Volume: %.0f%%" +msgstr "Hlasitost: %.0f %%" msgid "Buffering..." msgstr "Ukládá se do vyrovnávací paměti…" msgid "Clock lost, selecting a new one\n" -msgstr "" +msgstr "Bylo ztraceno časování, vybírá se nové\n" + +msgid "Reached end of play list." +msgstr "Dosažen konec seznamu k přehrání" + +msgid "Paused" +msgstr "Pozastaveno" + +#, c-format +msgid "Now playing %s\n" +msgstr "Nyní se přehrává %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Blíží se konec, připravuje se následující titul: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Rychlost přehrávání: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nezdařilo se změnit rychlost přehrávání na %.2f" + +msgid "space" +msgstr "mezerník" + +msgid "pause/unpause" +msgstr "pozastavit/pokračovat" + +msgid "q or ESC" +msgstr "q nebo ESC" + +msgid "quit" +msgstr "ukončit" + +msgid "play next" +msgstr "přehrát následující" + +msgid "play previous" +msgstr "přehrát předchozí" + +msgid "seek forward" +msgstr "posounout vpřed" + +msgid "seek backward" +msgstr "posunout zpět" + +msgid "volume up" +msgstr "zvýšit hlasitost" + +msgid "volume down" +msgstr "snížit hlasitost" + +msgid "increase playback rate" +msgstr "zvýšit rychlost přehrávání" + +msgid "decrease playback rate" +msgstr "snížti rychlost přehrávání" + +msgid "change playback direction" +msgstr "změnit směr přehrávání" + +msgid "enable/disable trick modes" +msgstr "zapnout/vypnout trikový režim" + +msgid "change audio track" +msgstr "změnit stopu zvuku" + +msgid "change video track" +msgstr "změnit stopu videa" + +msgid "change subtitle track" +msgstr "změnit stopu titulků" + +msgid "show keyboard shortcuts" +msgstr "zobrazit klávesové zkratky" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktivní režim – ovládání klávesnicí:" msgid "Video sink to use (default is autovideosink)" msgstr "Spotřebič videa, který se má použít (výchozí je autovideosink)" @@ -539,16 +618,19 @@ msgstr "Zapnout přehrávání bez mezer" msgid "Shuffle playlist" -msgstr "" +msgstr "Náhodně zamíchat seznam k přehrání" -msgid "Interactive control via keyboard" -msgstr "" +msgid "Disable interactive control via the keyboard" +msgstr "Zakázat interaktivní ovládání klávesnicí" msgid "Volume" -msgstr "" +msgstr "Hlasitost" msgid "Playlist file containing input media files" -msgstr "" +msgstr "Soubor se seznamem k přehrání obsahující vstupní multimediální soubory" + +msgid "Do not print any output (apart from errors)" +msgstr "Nevypisovat žádný výstup (mimo chyb)" #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." @@ -556,3 +638,6 @@ msgid "You must provide at least one filename or URI to play." msgstr "Musíte zadat minimálně jeden název souboru nebo adresu URI k přehrání." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Zmáčknutím „k“ si zobrazíte seznam klávesových zkratek.\n" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/da.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/da.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/da.po gst-plugins-base1.0-1.6.1/po/da.po --- gst-plugins-base1.0-1.4.3/po/da.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/da.po 2015-10-30 14:21:45.000000000 +0000 @@ -3,7 +3,7 @@ # This file is distributed under the same license as the gst-plugins-base package. # # Mogens Jaeger , 2007. -# Joe Hansen , 2009, 2010, 2011, 2013, 2014. +# Joe Hansen , 2009, 2010, 2011, 2013, 2014, 2015. # # capture -> optage # gain -> forstærkning @@ -31,10 +31,10 @@ # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.1\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-08-29 16:38+0100\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-27 16:38+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -103,12 +103,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Elementet »%s« mangler - kontroller din GStreamer-installation." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Et %s plugin er nødvendigt ved afspilning af denne sekvens, men ikke " -"installeret." - msgid "Could not determine type of stream" msgstr "Kunne ikke afgøre strømtypen" @@ -561,12 +555,95 @@ "Afslut ikke efter visning af den oprindelige enhedsliste, men vent på at " "enheder bliver tilføjet/fjernet." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Lydstyrke: %.0f%%" + msgid "Buffering..." msgstr "Mellemlagrer ..." msgid "Clock lost, selecting a new one\n" msgstr "Ur tabt, vælger et nyt ur\n" +msgid "Reached end of play list." +msgstr "Nåede slutningen af afspilningslisten." + +msgid "Paused" +msgstr "På pause" + +#, c-format +msgid "Now playing %s\n" +msgstr "Afspiller %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Ved at afslutte, forbereder næste titel: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Afspilningshastighed: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Kunne ikke ændre afspilningshastighed til %.2f" + +msgid "space" +msgstr "mellemrum" + +msgid "pause/unpause" +msgstr "pause/start" + +msgid "q or ESC" +msgstr "q eller ESC" + +msgid "quit" +msgstr "afslut" + +msgid "play next" +msgstr "afspil næste" + +msgid "play previous" +msgstr "afspil forrige" + +msgid "seek forward" +msgstr "søg fremad" + +msgid "seek backward" +msgstr "søg baglæns" + +msgid "volume up" +msgstr "lydstyrke op" + +msgid "volume down" +msgstr "lydstyrke ned" + +msgid "increase playback rate" +msgstr "øg afspilningshastighed" + +msgid "decrease playback rate" +msgstr "sænk afspilningshastighed" + +msgid "change playback direction" +msgstr "ændr afspilningsretning" + +msgid "enable/disable trick modes" +msgstr "aktiver/deaktiver trick-tilstande" + +msgid "change audio track" +msgstr "ændr lydspor" + +msgid "change video track" +msgstr "ændr videospor" + +msgid "change subtitle track" +msgstr "ændr undertekstspor" + +msgid "show keyboard shortcuts" +msgstr "vis genvejstaster" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktiv tilstand - kontrol via tastatur:" + msgid "Video sink to use (default is autovideosink)" msgstr "Brug denne videokanal (standard er autovideosink)" @@ -579,8 +656,8 @@ msgid "Shuffle playlist" msgstr "Bland afspilningsliste" -msgid "Interactive control via keyboard" -msgstr "Interaktiv kontrol via tastatur" +msgid "Disable interactive control via the keyboard" +msgstr "Deaktiver interaktiv kontrol via tastaturet" msgid "Volume" msgstr "Lydstyrke" @@ -588,9 +665,15 @@ msgid "Playlist file containing input media files" msgstr "Afspilningsfil der indeholder mediefiler" +msgid "Do not print any output (apart from errors)" +msgstr "Udskriv ikke noget (undtagen fejl)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Brug: %s FIL1|URI1 [FIL2|URI2] [FIL3|URI3] ..." msgid "You must provide at least one filename or URI to play." msgstr "Du skal angive mindst et filnavn eller en adresse for at afspille." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Tryk »k« for at se en liste over genvejstaster.\n" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/de.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/de.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/de.po gst-plugins-base1.0-1.6.1/po/de.po --- gst-plugins-base1.0-1.4.3/po/de.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/de.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-24 23:58+0100\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-07-12 23:00+0100\n" "Last-Translator: Christian Kirbach \n" "Language-Team: German \n" "Language: de\n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.7.5\n" msgid "Could not open device for playback in mono mode." msgstr "Gerät konnte nicht zur Wiedergabe in Mono geöffnet werden." @@ -83,12 +83,6 @@ msgstr "" "Das Element »%s« fehlt - überprüfen Sie Ihre Installation von GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber " -"nicht installiert." - msgid "Could not determine type of stream" msgstr "Der Typ des Datenstroms konnte nicht bestimmt werden" @@ -528,12 +522,95 @@ "Nicht nach dem Anzeigen der anfänglichen Geräteliste beenden, sondern auf " "das Hinzufügen/Entfernen von Geräten warten." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Lautstärke: %.0f%%" + msgid "Buffering..." msgstr "Zwischenspeichern …" msgid "Clock lost, selecting a new one\n" msgstr "Uhrzeit verloren, es wird eine neue gewählt\n" +msgid "Reached end of play list." +msgstr "Das Ende der Wiedergabeliste wurde erreicht." + +msgid "Paused" +msgstr "Angehalten" + +#, c-format +msgid "Now playing %s\n" +msgstr "Momentan wird %s wiedergegeben\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Kurz vor dem Abschluss. Nächster Titel wird vorbereitet: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Wiedergabegeschwindigkeit: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Wiedergabegeschwindigkeit konnte nicht auf %.2f geändert werden" + +msgid "space" +msgstr "Leertaste" + +msgid "pause/unpause" +msgstr "Anhalten/Fortsetzen" + +msgid "q or ESC" +msgstr "q oder ESC" + +msgid "quit" +msgstr "Beenden" + +msgid "play next" +msgstr "Nächsten wiedergeben" + +msgid "play previous" +msgstr "Vorherigen wiedergeben" + +msgid "seek forward" +msgstr "Vorspulen" + +msgid "seek backward" +msgstr "Zurückspulen" + +msgid "volume up" +msgstr "Lauter" + +msgid "volume down" +msgstr "Leiser" + +msgid "increase playback rate" +msgstr "Schneller wiedergeben" + +msgid "decrease playback rate" +msgstr "Langsamer wiedergeben" + +msgid "change playback direction" +msgstr "Wiedergaberichtung ändern" + +msgid "enable/disable trick modes" +msgstr "Trickmodi einschalten/ausschalten" + +msgid "change audio track" +msgstr "Audio-Titel wechseln" + +msgid "change video track" +msgstr "Videl-Titel wechseln" + +msgid "change subtitle track" +msgstr "Untertitel wechseln" + +msgid "show keyboard shortcuts" +msgstr "Tastenkombinationen anzeigen" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktiver Modus - Tastatursteuerung:" + msgid "Video sink to use (default is autovideosink)" msgstr "Zu verwendende Video-Ziel (Voreinstellung ist »autovideosink«)" @@ -546,8 +623,8 @@ msgid "Shuffle playlist" msgstr "Wiedergabeliste mischen" -msgid "Interactive control via keyboard" -msgstr "Interaktive Steuerung via Tastatur" +msgid "Disable interactive control via the keyboard" +msgstr "Interaktive Steuerung via Tastatur deaktivieren" msgid "Volume" msgstr "Lautstärke" @@ -555,6 +632,9 @@ msgid "Playlist file containing input media files" msgstr "Datei mit Wiedergabeliste enthält Eingabe-Mediendateien" +msgid "Do not print any output (apart from errors)" +msgstr "Nichts ausgeben (außer Fehlermeldungen)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Aufruf: %s DATEI1|URI1 [DATEI2|URI2] [DATEI3|URI3] ..." @@ -564,6 +644,14 @@ "Sie müssen mindestens einen Dateinamen oder eine Adresse zur Wiedergabe " "angeben." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber " +#~ "nicht installiert." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Unkomprimiertes %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/el.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/el.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/el.po gst-plugins-base1.0-1.6.1/po/el.po --- gst-plugins-base1.0-1.4.3/po/el.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/el.po 2015-10-30 14:21:45.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2012-05-05 19:13+0100\n" "Last-Translator: Savvas Radevic \n" "Language-Team: Greek \n" @@ -83,12 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Λείπει το στοιχείο '%s' - ελέγξτε την εγκατάσταση του GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Απαιτείται μια πρόσθετη λειτουργία %s για την αναπαραγωγή αυτής της ροής, " -"αλλά δεν έχει εγκατασταθεί." - msgid "Could not determine type of stream" msgstr "Αδυναμία προσδιορισμού τύπου ροής" @@ -542,12 +536,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Αδυναμία ανοίγματος συσκευής για στερεοφωνική αναπαραγωγή." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Αυτό το CD δεν έχει ηχητικά κομμάτια" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Μορφή υποτίτλων Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -560,7 +639,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -569,6 +648,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -576,6 +658,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Απαιτείται μια πρόσθετη λειτουργία %s για την αναπαραγωγή αυτής της ροής, " +#~ "αλλά δεν έχει εγκατασταθεί." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Ασυμπίεστο YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/en_GB.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/en_GB.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/en_GB.po gst-plugins-base1.0-1.6.1/po/en_GB.po --- gst-plugins-base1.0-1.4.3/po/en_GB.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/en_GB.po 2015-10-30 14:21:45.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: gst-plugins 0.8.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2004-04-26 10:41-0400\n" "Last-Translator: Gareth Owen \n" "Language-Team: English (British) \n" @@ -82,10 +82,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - #, fuzzy msgid "Could not determine type of stream" msgstr "Could not write to file \"%s\"." @@ -519,12 +515,96 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volume" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Could not open CD device for reading." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volume" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -537,7 +617,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -546,6 +626,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -553,6 +636,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + #~ msgid "Bass" #~ msgstr "Bass" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/eo.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/eo.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/eo.po gst-plugins-base1.0-1.6.1/po/eo.po --- gst-plugins-base1.0-1.4.3/po/eo.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/eo.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2011-06-04 21:11+0100\n" "Last-Translator: Kristjan SCHMIDT \n" "Language-Team: Esperanto \n" @@ -79,10 +79,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "%s-kromprogramo bezonatas, sed tia ne estas instalite." - msgid "Could not determine type of stream" msgstr "Ne eblis rekoni la tipon de la fluo" @@ -515,12 +511,95 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Ne eblis malfermi aparaton por reproduktado per dukanala reĝimo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -533,7 +612,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -542,6 +621,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -549,6 +631,12 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "%s-kromprogramo bezonatas, sed tia ne estas instalite." + #~ msgid "Master" #~ msgstr "Ĉefa regilo" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/es.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/es.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/es.po gst-plugins-base1.0-1.6.1/po/es.po --- gst-plugins-base1.0-1.4.3/po/es.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/es.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2011-10-02 15:46+0200\n" "Last-Translator: Jorge González González \n" "Language-Team: Spanish \n" @@ -79,12 +79,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Falta el elemento «%s»; compruebe su instalación de GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Se requiere un complemento de %s para reproducir este medio, pero no está " -"instalado." - msgid "Could not determine type of stream" msgstr "No se pudo determinar el tipo de flujo" @@ -525,12 +519,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "No se pudo abrir el dispositivo para la reproducir en modo estéreo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Este CD no tiene pistas de sonido" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Formato de subtítulos kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -543,7 +622,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -552,6 +631,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -559,6 +641,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Se requiere un complemento de %s para reproducir este medio, pero no está " +#~ "instalado." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "YUV sin comprimir" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/eu.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/eu.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/eu.po gst-plugins-base1.0-1.6.1/po/eu.po --- gst-plugins-base1.0-1.4.3/po/eu.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/eu.po 2015-10-30 14:21:45.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base-0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2010-03-25 12:32+0100\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Basque \n" @@ -81,11 +81,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "'%s' elementua falta da. Begiratu GStreamer ondo instalatua dagoen." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"%s plugina behar da korronte hori erreproduzitzeko, baina ez dago instalatua." - msgid "Could not determine type of stream" msgstr "Ezin izan da korronte mota zehaztu" @@ -526,12 +521,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Ezin izan da gailua ireki estereo moduan erreproduzitzeko." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "CD honek ez du audio-pistarik" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "'Kate' azpititulu-formatua" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -544,7 +624,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -553,6 +633,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -560,6 +643,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "%s plugina behar da korronte hori erreproduzitzeko, baina ez dago " +#~ "instalatua." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Konprimitu gabeko YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/fi.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/fi.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/fi.po gst-plugins-base1.0-1.6.1/po/fi.po --- gst-plugins-base1.0-1.4.3/po/fi.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/fi.po 2015-10-30 14:21:45.000000000 +0000 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2010-12-31 23:21+0200\n" "Last-Translator: Tommi Vainikainen \n" "Language-Team: Finnish \n" @@ -83,11 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Puuttuva elementti \"%s\" - tarkista GStreamer-asennuksesi." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Virran toistamiseen tarvitaan %s-liitännäinen, mutta se ei ole asennettu." - msgid "Could not determine type of stream" msgstr "Virran tyyppiä ei voitu määrittää" @@ -528,12 +523,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Laitetta ei voitu avata toistoa varten stereona." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Tällä CD-levyllä ei ole ääniraitoja" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Kate-tekstitysmuoto" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -546,7 +626,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -555,6 +635,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -562,6 +645,13 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Virran toistamiseen tarvitaan %s-liitännäinen, mutta se ei ole asennettu." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Pakkaamaton YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/fr.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/fr.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/fr.po gst-plugins-base1.0-1.6.1/po/fr.po --- gst-plugins-base1.0-1.4.3/po/fr.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/fr.po 2015-10-30 14:21:45.000000000 +0000 @@ -4,14 +4,15 @@ # # Nicolas Velin , 2008. # Claude Paroz , 2008-2011. +# Stéphane Aulery , 2015. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 0.10.32.2\n" +"Project-Id-Version: gst-plugins-base 1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2011-04-28 09:19+0200\n" -"Last-Translator: Claude Paroz \n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-04-26 19:42+0200\n" +"Last-Translator: Stéphane Aulery \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -86,20 +87,14 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Élément « %s » manquant, contrôlez votre installation de GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Un greffon %s est requis pour lire ce flux, mais il n'est pas installé." - msgid "Could not determine type of stream" msgstr "Impossible de déterminer le type de flux" msgid "This appears to be a text file" msgstr "Ce fichier semble être un fichier texte" -#, fuzzy msgid "Could not create \"uridecodebin\" element." -msgstr "Impossible de créer un élément « decodebin »." +msgstr "Impossible de créer un élément « uridecodebin »." #, c-format msgid "Both autovideosink and %s elements are missing." @@ -215,19 +210,16 @@ msgstr "" msgid "Subtitle" -msgstr "" +msgstr "Sous-titre" -#, fuzzy msgid "MPL2 subtitle format" -msgstr "Format de sous-titres TMPlayer" +msgstr "Format de sous-titres MPL2" -#, fuzzy msgid "DKS subtitle format" -msgstr "Format de sous-titres Sami" +msgstr "Format de sous-titres DKS" -#, fuzzy msgid "QTtext subtitle format" -msgstr "Format de sous-titres Kate" +msgstr "Format de sous-titres QTtext" msgid "Sami subtitle format" msgstr "Format de sous-titres Sami" @@ -238,45 +230,42 @@ msgid "Kate subtitle format" msgstr "Format de sous-titres Kate" -#, fuzzy msgid "Uncompressed video" -msgstr "YUV non compressé" +msgstr "Video non compressée" -#, fuzzy msgid "Uncompressed gray" -msgstr "Image niveaux de gris non compressée" +msgstr "Niveaux de gris non compressés" -#, fuzzy, c-format +#, c-format msgid "Uncompressed packed YUV %s" -msgstr "YUV empaqueté 4:2:2 non compressé" +msgstr "YUV %s empaqueté non compressé" -#, fuzzy, c-format +#, c-format msgid "Uncompressed semi-planar YUV %s" -msgstr "YUV planaire 4:2:0 non compressé" +msgstr "YUV semi-planaire %s non compressé" -#, fuzzy, c-format +#, c-format msgid "Uncompressed planar YUV %s" -msgstr "YUV planaire 4:2:0 non compressé" +msgstr "YUV planaire %s non compressé" -#, fuzzy, c-format +#, c-format msgid "Uncompressed palettized %d-bit %s" msgstr "%2$s %1$d bits en palette non compressé" -#, fuzzy, c-format +#, c-format msgid "Uncompressed %d-bit %s" -msgstr "%2$s %1$d bits en palette non compressé" +msgstr "%2$s %1$d bits non compressé" #, c-format msgid "DivX MPEG-4 Version %d" msgstr "MPEG-4 DivX version %d" -#, fuzzy msgid "Uncompressed audio" -msgstr "YUV non compressé" +msgstr "Audio non compressé" -#, fuzzy, c-format +#, c-format msgid "Raw %d-bit %s audio" -msgstr "Audio PCM brut %d bits" +msgstr "Audio brut %2$s %1$d bits" msgid "Audio CD source" msgstr "Source CD audio" @@ -332,7 +321,7 @@ #, c-format msgid "%s encoder" -msgstr "Codeur %s" +msgstr "Encodeur %s" #, c-format msgid "GStreamer element %s" @@ -417,7 +406,7 @@ msgstr "Valeur du zoom numérique utilisé lors de la capture de l'image" msgid "capturing iso speed" -msgstr "sensibilité iso de la capture" +msgstr "sensibilité ISO de la capture" msgid "The ISO speed used when capturing an image" msgstr "La sensibilité ISO utilisée lors de la capture de l'image" @@ -494,7 +483,7 @@ msgstr "Le mode de flash sélectionné lors de la capture d'une image" msgid "capturing metering mode" -msgstr "mode de msure de la capture" +msgstr "mode de mesure de la capture" msgid "" "The metering mode used while determining exposure for capturing an image" @@ -544,175 +533,132 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volume" + msgid "Buffering..." -msgstr "" +msgstr "Mise en cache…" msgid "Clock lost, selecting a new one\n" msgstr "" -msgid "Video sink to use (default is autovideosink)" +msgid "Reached end of play list." msgstr "" -msgid "Audio sink to use (default is autoaudiosink)" +msgid "Paused" msgstr "" -msgid "Enable gapless playback" +#, c-format +msgid "Now playing %s\n" msgstr "" -msgid "Shuffle playlist" +#, c-format +msgid "About to finish, preparing next title: %s" msgstr "" -msgid "Interactive control via keyboard" +#, c-format +msgid "Playback rate: %.2f" msgstr "" -msgid "Volume" -msgstr "" +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Impossible d'utiliser le périphérique pour la lecture en mode stéréo." -msgid "Playlist file containing input media files" +msgid "space" msgstr "" -#, c-format -msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." +msgid "pause/unpause" msgstr "" -msgid "You must provide at least one filename or URI to play." +msgid "q or ESC" msgstr "" -#, fuzzy -#~ msgid "Uncompressed %s YUV %s" -#~ msgstr "YUV non compressé" - -#~ msgid "Master" -#~ msgstr "Volume général" - -#~ msgid "Bass" -#~ msgstr "Basses" - -#~ msgid "Treble" -#~ msgstr "Aiguës" - -#~ msgid "PCM" -#~ msgstr "PCM" - -#~ msgid "Synth" -#~ msgstr "Synth" - -#~ msgid "Line-in" -#~ msgstr "Entrée ligne" - -#~ msgid "CD" -#~ msgstr "CD" - -#~ msgid "Microphone" -#~ msgstr "Micro" - -#~ msgid "PC Speaker" -#~ msgstr "Haut-parleur PC" - -#~ msgid "Playback" -#~ msgstr "Lecture" - -#~ msgid "Capture" -#~ msgstr "Enregistrement" - -#~ msgid "Connection to %s:%d refused." -#~ msgstr "Connexion refusée vers %s:%d." - -#~ msgid "Uncompressed planar YVU 4:2:0" -#~ msgstr "YVU planaire 4:2:0 non compressé" +msgid "quit" +msgstr "" -#~ msgid "Uncompressed packed YUV 4:1:0" -#~ msgstr "YUV empaqueté 4:1:0 non compressé" +msgid "play next" +msgstr "" -#~ msgid "Uncompressed packed YVU 4:1:0" -#~ msgstr "YVU empaqueté 4:1:0 non compressé" +msgid "play previous" +msgstr "" -#~ msgid "Uncompressed packed YUV 4:1:1" -#~ msgstr "YUV empaqueté 4:1:1 non compressé" +msgid "seek forward" +msgstr "" -#~ msgid "Uncompressed packed YUV 4:4:4" -#~ msgstr "YUV empaqueté 4:4:4 non compressé" +msgid "seek backward" +msgstr "" -#~ msgid "Uncompressed planar YUV 4:2:2" -#~ msgstr "YUV planaire 4:2:2 non compressé" +#, fuzzy +msgid "volume up" +msgstr "Volume" -#~ msgid "Uncompressed planar YUV 4:1:1" -#~ msgstr "YUV planaire 4:1:1 non compressé" +msgid "volume down" +msgstr "" -#~ msgid "Uncompressed black and white Y-plane" -#~ msgstr "Plan Y noir et blanc non compressé" +msgid "increase playback rate" +msgstr "" -#~ msgid "Raw PCM audio" -#~ msgstr "Audio PCM brut" +msgid "decrease playback rate" +msgstr "" -#~ msgid "Raw %d-bit floating-point audio" -#~ msgstr "Audio brut virgule flottante %d bits" +msgid "change playback direction" +msgstr "" -#~ msgid "Raw floating-point audio" -#~ msgstr "Audio brut virgule flottante" +msgid "enable/disable trick modes" +msgstr "" -#~ msgid "Could not open vfs file \"%s\" for writing: %s." -#~ msgstr "Impossible d'ouvrir le fichier vfs « %s » en écriture : %s." +#, fuzzy +msgid "change audio track" +msgstr "Ce CD ne contient aucune piste audio" -#~ msgid "No filename given" -#~ msgstr "Aucun nom de fichier indiqué" +msgid "change video track" +msgstr "" -#~ msgid "Could not close vfs file \"%s\"." -#~ msgstr "Impossible de fermer le fichier vfs « %s »." +#, fuzzy +msgid "change subtitle track" +msgstr "Format de sous-titres Kate" -#~ msgid "Error while writing to file \"%s\"." -#~ msgstr "Erreur lors de l'écriture dans le fichier « %s »." +msgid "show keyboard shortcuts" +msgstr "" -#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled." -#~ msgstr "" -#~ "URI de sous-titres « %s » non valide, les sous-titres sont désactivés." +msgid "Interactive mode - keyboard controls:" +msgstr "" -#~ msgid "RTSP streams cannot be played yet." -#~ msgstr "Il n'est pas encore possible de lire les flux RTSP." +msgid "Video sink to use (default is autovideosink)" +msgstr "" -#~ msgid "" -#~ "Only a subtitle stream was detected. Either you are loading a subtitle " -#~ "file or some other type of text file, or the media file was not " -#~ "recognized." -#~ msgstr "" -#~ "Seul un flux de sous-titres a été détecté. Soit vous essayez d'ouvrir un " -#~ "fichier de sous-titres ou un autre type de fichier texte, soit le fichier " -#~ "multimédia n'a pas été reconnu." - -#~ msgid "" -#~ "You do not have a decoder installed to handle this file. You might need " -#~ "to install the necessary plugins." -#~ msgstr "" -#~ "Aucun décodeur n'est installé pour gérer ce fichier. Vous devriez " -#~ "probablement installer des greffons supplémentaires." +msgid "Audio sink to use (default is autoaudiosink)" +msgstr "" -#~ msgid "This is not a media file" -#~ msgstr "Ceci n'est pas un fichier multimédia" +msgid "Enable gapless playback" +msgstr "" -#~ msgid "A subtitle stream was detected, but no video stream." -#~ msgstr "Un flux de sous-titres a été détecté, mais pas de flux vidéo." +msgid "Shuffle playlist" +msgstr "" -#~ msgid "Both autovideosink and xvimagesink elements are missing." -#~ msgstr "Les éléments autovideosink et xvimagesink sont tous deux manquants." +msgid "Disable interactive control via the keyboard" +msgstr "" -#~ msgid "Both autoaudiosink and alsasink elements are missing." -#~ msgstr "Les éléments autoaudiosink et alsasink sont tous deux manquants." +msgid "Volume" +msgstr "Volume" -#~ msgid "No device specified." -#~ msgstr "Aucun périphérique indiqué." +msgid "Playlist file containing input media files" +msgstr "" -#~ msgid "Device \"%s\" does not exist." -#~ msgstr "Le périphérique « %s » n'existe pas." +msgid "Do not print any output (apart from errors)" +msgstr "" -#~ msgid "Device \"%s\" is already being used." -#~ msgstr "Le périphérique « %s » est déjà en cours d'utilisation." +#, c-format +msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." +msgstr "Usage : %s FICHIER1|URI1 [FICHIER2|URI2] [FICHIER3|URI3] …" -#~ msgid "Could not open device \"%s\" for reading and writing." -#~ msgstr "Impossible d'ouvrir le périphérique « %s » en lecture et écriture." +msgid "You must provide at least one filename or URI to play." +msgstr "" -#~ msgid "Error while sending gdp header data to \"%s:%d\"." -#~ msgstr "Erreur lors de l'envoi de données d'en-tête gdp vers « %s:%d »." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" -#~ msgid "Error while sending gdp payload data to \"%s:%d\"." +#~ msgid "A %s plugin is required to play this stream, but not installed." #~ msgstr "" -#~ "Erreur lors de l'envoi de données de charge utile gdp vers « %s:%d »." +#~ "Un greffon %s est requis pour lire ce flux, mais il n'est pas installé." Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/gl.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/gl.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/gl.po gst-plugins-base1.0-1.6.1/po/gl.po --- gst-plugins-base1.0-1.4.3/po/gl.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/gl.po 2015-10-30 14:21:45.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2012-12-15 03:40+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Galician \n" @@ -84,11 +84,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Falta o elemento «%s» - comprobe a instalación do GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Precísase un engadido %s que non está instalado para reproducir este fluxo." - msgid "Could not determine type of stream" msgstr "Non foi posíbel determinar o tipo de fluxo." @@ -523,12 +518,98 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "" +"Non foi posíbel abrir o dispositivo para a reprodución en modo estéreo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Este CD non contén pistas de son" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Formato de subtítulos Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -541,7 +622,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -550,6 +631,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -557,6 +641,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Precísase un engadido %s que non está instalado para reproducir este " +#~ "fluxo." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "%s YUV %s sen comprimir" diff -Nru gst-plugins-base1.0-1.4.3/po/gst-plugins-base-1.0.pot gst-plugins-base1.0-1.6.1/po/gst-plugins-base-1.0.pot --- gst-plugins-base1.0-1.4.3/po/gst-plugins-base-1.0.pot 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/gst-plugins-base-1.0.pot 2015-10-30 12:26:20.000000000 +0000 @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.3\n" +"Project-Id-Version: gst-plugins-base 1.6.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,57 +16,57 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/alsa/gstalsasink.c:573 +#: ext/alsa/gstalsasink.c:577 msgid "Could not open device for playback in mono mode." msgstr "" -#: ext/alsa/gstalsasink.c:575 +#: ext/alsa/gstalsasink.c:579 msgid "Could not open device for playback in stereo mode." msgstr "" -#: ext/alsa/gstalsasink.c:579 +#: ext/alsa/gstalsasink.c:583 #, c-format msgid "Could not open device for playback in %d-channel mode." msgstr "" -#: ext/alsa/gstalsasink.c:852 +#: ext/alsa/gstalsasink.c:856 msgid "" "Could not open audio device for playback. Device is being used by another " "application." msgstr "" -#: ext/alsa/gstalsasink.c:857 +#: ext/alsa/gstalsasink.c:861 msgid "Could not open audio device for playback." msgstr "" -#: ext/alsa/gstalsasink.c:1074 +#: ext/alsa/gstalsasink.c:1082 msgid "Error outputting to audio device. The device has been disconnected." msgstr "" -#: ext/alsa/gstalsasrc.c:436 +#: ext/alsa/gstalsasrc.c:440 msgid "Could not open device for recording in mono mode." msgstr "" -#: ext/alsa/gstalsasrc.c:438 +#: ext/alsa/gstalsasrc.c:442 msgid "Could not open device for recording in stereo mode." msgstr "" -#: ext/alsa/gstalsasrc.c:442 +#: ext/alsa/gstalsasrc.c:446 #, c-format msgid "Could not open device for recording in %d-channel mode" msgstr "" -#: ext/alsa/gstalsasrc.c:734 +#: ext/alsa/gstalsasrc.c:737 msgid "" "Could not open audio device for recording. Device is being used by another " "application." msgstr "" -#: ext/alsa/gstalsasrc.c:739 +#: ext/alsa/gstalsasrc.c:742 msgid "Could not open audio device for recording." msgstr "" -#: ext/alsa/gstalsasrc.c:993 +#: ext/alsa/gstalsasrc.c:996 msgid "Error recording from audio device. The device has been disconnected." msgstr "" @@ -82,40 +82,34 @@ msgid "Could not read CD." msgstr "" -#: ext/ogg/gstoggdemux.c:4564 +#: ext/ogg/gstoggdemux.c:4834 msgid "Internal data stream error." msgstr "" -#: gst/encoding/gstencodebin.c:1487 gst/playback/gstplaybin2.c:3148 +#: gst/encoding/gstencodebin.c:1571 gst/playback/gstplaybin2.c:3362 #: gst/playback/gstplaysink.c:1483 gst/playback/gstplaysink.c:1500 #: gst/playback/gstplaysink.c:1834 gst/playback/gstplaysink.c:1863 #: gst/playback/gstplaysink.c:2443 gst/playback/gstplaysink.c:2492 #: gst/playback/gstplaysink.c:2507 gst/playback/gstplaysink.c:2532 #: gst/playback/gstplaysink.c:2564 gst/playback/gstplaysink.c:2709 -#: gst/playback/gstplaysink.c:2737 gst/playback/gstplaysink.c:3128 -#: gst/playback/gstplaysink.c:3137 gst/playback/gstplaysink.c:3146 -#: gst/playback/gstplaysink.c:3155 gst/playback/gstplaysink.c:4361 -#: gst/playback/gstplaysinkconvertbin.c:97 -#: gst/playback/gstplaysinkconvertbin.c:117 -#: gst/playback/gsturidecodebin.c:1479 +#: gst/playback/gstplaysink.c:2737 gst/playback/gstplaysink.c:3115 +#: gst/playback/gstplaysink.c:3124 gst/playback/gstplaysink.c:3133 +#: gst/playback/gstplaysink.c:3142 gst/playback/gstplaysink.c:3519 +#: gst/playback/gstplaysink.c:4391 gst/playback/gstplaysinkconvertbin.c:97 +#: gst/playback/gstplaysinkconvertbin.c:117 gst/playback/gsturidecodebin.c:1490 #, c-format msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#: gst/playback/gstdecodebin2.c:1810 -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - -#: gst/playback/gstdecodebin2.c:1817 +#: gst/playback/gstdecodebin2.c:1847 msgid "Could not determine type of stream" msgstr "" -#: gst/playback/gstdecodebin2.c:2514 +#: gst/playback/gstdecodebin2.c:2818 msgid "This appears to be a text file" msgstr "" -#: gst/playback/gstplaybin2.c:5213 +#: gst/playback/gstplaybin2.c:5377 msgid "Could not create \"uridecodebin\" element." msgstr "" @@ -146,34 +140,34 @@ msgid "Custom text sink element is not usable." msgstr "" -#: gst/playback/gstplaysink.c:2862 +#: gst/playback/gstplaysink.c:2852 msgid "No volume control found" msgstr "" -#: gst/playback/gstplaysink.c:2892 +#: gst/playback/gstplaysink.c:2882 #, c-format msgid "Both autoaudiosink and %s elements are missing." msgstr "" -#: gst/playback/gstplaysink.c:2896 +#: gst/playback/gstplaysink.c:2886 msgid "The autoaudiosink element is missing." msgstr "" -#: gst/playback/gstplaysink.c:2901 +#: gst/playback/gstplaysink.c:2891 #, c-format msgid "Configured audiosink %s is not working." msgstr "" -#: gst/playback/gstplaysink.c:2905 +#: gst/playback/gstplaysink.c:2895 #, c-format msgid "Both autoaudiosink and %s elements are not working." msgstr "" -#: gst/playback/gstplaysink.c:2909 +#: gst/playback/gstplaysink.c:2899 msgid "The autoaudiosink element is not working." msgstr "" -#: gst/playback/gstplaysink.c:3231 gst/playback/gstplaysink.c:3236 +#: gst/playback/gstplaysink.c:3218 gst/playback/gstplaysink.c:3223 msgid "Can't play a text file without video or visualizations." msgstr "" @@ -182,34 +176,34 @@ msgid "No decoder available for type '%s'." msgstr "" -#: gst/playback/gsturidecodebin.c:1385 +#: gst/playback/gsturidecodebin.c:1396 msgid "No URI specified to play from." msgstr "" -#: gst/playback/gsturidecodebin.c:1391 +#: gst/playback/gsturidecodebin.c:1402 #, c-format msgid "Invalid URI \"%s\"." msgstr "" -#: gst/playback/gsturidecodebin.c:1398 +#: gst/playback/gsturidecodebin.c:1409 msgid "This stream type cannot be played yet." msgstr "" -#: gst/playback/gsturidecodebin.c:1416 +#: gst/playback/gsturidecodebin.c:1427 #, c-format msgid "No URI handler implemented for \"%s\"." msgstr "" -#: gst/playback/gsturidecodebin.c:2285 +#: gst/playback/gsturidecodebin.c:2300 msgid "Source element is invalid." msgstr "" -#: gst/tcp/gsttcpclientsink.c:214 +#: gst/tcp/gsttcpclientsink.c:215 #, c-format msgid "Error while sending data to \"%s:%d\"." msgstr "" -#: gst-libs/gst/audio/gstaudiobasesrc.c:860 +#: gst-libs/gst/audio/gstaudiobasesrc.c:863 msgid "Can't record audio fast enough" msgstr "" @@ -234,188 +228,188 @@ msgid "Apple Lossless Audio (ALAC)" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:144 +#: gst-libs/gst/pbutils/descriptions.c:146 msgid "Free Lossless Audio Codec (FLAC)" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:174 -#: gst-libs/gst/pbutils/descriptions.c:175 +#: gst-libs/gst/pbutils/descriptions.c:176 +#: gst-libs/gst/pbutils/descriptions.c:177 msgid "Lossless True Audio (TTA)" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:183 +#: gst-libs/gst/pbutils/descriptions.c:185 msgid "Windows Media Speech" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:198 +#: gst-libs/gst/pbutils/descriptions.c:201 msgid "CYUV Lossless" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:203 +#: gst-libs/gst/pbutils/descriptions.c:205 msgid "FFMpeg v1" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:217 +#: gst-libs/gst/pbutils/descriptions.c:219 msgid "Lossless MSZH" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:228 +#: gst-libs/gst/pbutils/descriptions.c:230 msgid "Run-length encoding" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:274 +#: gst-libs/gst/pbutils/descriptions.c:276 msgid "Timed Text" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:278 +#: gst-libs/gst/pbutils/descriptions.c:280 msgid "Subtitle" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:279 +#: gst-libs/gst/pbutils/descriptions.c:281 msgid "MPL2 subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:280 +#: gst-libs/gst/pbutils/descriptions.c:282 msgid "DKS subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:281 +#: gst-libs/gst/pbutils/descriptions.c:283 msgid "QTtext subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:282 +#: gst-libs/gst/pbutils/descriptions.c:284 msgid "Sami subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:283 +#: gst-libs/gst/pbutils/descriptions.c:285 msgid "TMPlayer subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:287 +#: gst-libs/gst/pbutils/descriptions.c:289 msgid "Kate subtitle format" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:352 -#: gst-libs/gst/pbutils/descriptions.c:355 -#: gst-libs/gst/pbutils/descriptions.c:405 +#: gst-libs/gst/pbutils/descriptions.c:451 +#: gst-libs/gst/pbutils/descriptions.c:454 +#: gst-libs/gst/pbutils/descriptions.c:504 msgid "Uncompressed video" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:360 +#: gst-libs/gst/pbutils/descriptions.c:459 msgid "Uncompressed gray" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:383 +#: gst-libs/gst/pbutils/descriptions.c:482 #, c-format msgid "Uncompressed packed YUV %s" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:385 +#: gst-libs/gst/pbutils/descriptions.c:484 #, c-format msgid "Uncompressed semi-planar YUV %s" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:387 +#: gst-libs/gst/pbutils/descriptions.c:486 #, c-format msgid "Uncompressed planar YUV %s" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:398 +#: gst-libs/gst/pbutils/descriptions.c:497 #, c-format msgid "Uncompressed palettized %d-bit %s" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:401 +#: gst-libs/gst/pbutils/descriptions.c:500 #, c-format msgid "Uncompressed %d-bit %s" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:458 +#: gst-libs/gst/pbutils/descriptions.c:582 #, c-format msgid "DivX MPEG-4 Version %d" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:693 +#: gst-libs/gst/pbutils/descriptions.c:829 msgid "Uncompressed audio" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:699 +#: gst-libs/gst/pbutils/descriptions.c:835 #, c-format msgid "Raw %d-bit %s audio" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:799 +#: gst-libs/gst/pbutils/descriptions.c:935 msgid "Audio CD source" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:802 +#: gst-libs/gst/pbutils/descriptions.c:938 msgid "DVD source" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:805 +#: gst-libs/gst/pbutils/descriptions.c:941 msgid "Real Time Streaming Protocol (RTSP) source" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:809 +#: gst-libs/gst/pbutils/descriptions.c:945 msgid "Microsoft Media Server (MMS) protocol source" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:817 +#: gst-libs/gst/pbutils/descriptions.c:953 #, c-format msgid "%s protocol source" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:889 +#: gst-libs/gst/pbutils/descriptions.c:1025 #, c-format msgid "%s video RTP depayloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:891 +#: gst-libs/gst/pbutils/descriptions.c:1027 #, c-format msgid "%s audio RTP depayloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:893 +#: gst-libs/gst/pbutils/descriptions.c:1029 #, c-format msgid "%s RTP depayloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:900 +#: gst-libs/gst/pbutils/descriptions.c:1036 #, c-format msgid "%s demuxer" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:902 +#: gst-libs/gst/pbutils/descriptions.c:1038 #, c-format msgid "%s decoder" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:940 +#: gst-libs/gst/pbutils/descriptions.c:1076 #, c-format msgid "%s video RTP payloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:942 +#: gst-libs/gst/pbutils/descriptions.c:1078 #, c-format msgid "%s audio RTP payloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:944 +#: gst-libs/gst/pbutils/descriptions.c:1080 #, c-format msgid "%s RTP payloader" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:951 +#: gst-libs/gst/pbutils/descriptions.c:1087 #, c-format msgid "%s muxer" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:953 +#: gst-libs/gst/pbutils/descriptions.c:1089 #, c-format msgid "%s encoder" msgstr "" -#: gst-libs/gst/pbutils/descriptions.c:985 +#: gst-libs/gst/pbutils/descriptions.c:1121 #, c-format msgid "GStreamer element %s" msgstr "" @@ -665,57 +659,175 @@ msgid "Initial key in which the sound starts" msgstr "" -#: tools/gst-device-monitor.c:123 tools/gst-play.c:664 +#: tools/gst-device-monitor.c:141 tools/gst-play.c:1105 msgid "Print version information and exit" msgstr "" -#: tools/gst-device-monitor.c:125 +#: tools/gst-device-monitor.c:143 msgid "" "Don't exit after showing the initial device list, but wait for devices to " "added/removed." msgstr "" -#: tools/gst-play.c:218 +#: tools/gst-play.c:249 +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + +#: tools/gst-play.c:288 msgid "Buffering..." msgstr "" -#: tools/gst-play.c:239 +#: tools/gst-play.c:309 msgid "Clock lost, selecting a new one\n" msgstr "" -#: tools/gst-play.c:666 +#: tools/gst-play.c:339 tools/gst-play.c:385 tools/gst-play.c:737 +#: tools/gst-play.c:1019 +msgid "Reached end of play list." +msgstr "" + +#: tools/gst-play.c:467 +msgid "Paused" +msgstr "" + +#: tools/gst-play.c:525 +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#: tools/gst-play.c:588 +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#: tools/gst-play.c:833 +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#: tools/gst-play.c:837 +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "" + +#: tools/gst-play.c:961 +msgid "space" +msgstr "" + +#: tools/gst-play.c:961 +msgid "pause/unpause" +msgstr "" + +#: tools/gst-play.c:962 +msgid "q or ESC" +msgstr "" + +#: tools/gst-play.c:962 +msgid "quit" +msgstr "" + +#: tools/gst-play.c:963 +msgid "play next" +msgstr "" + +#: tools/gst-play.c:964 +msgid "play previous" +msgstr "" + +#: tools/gst-play.c:965 +msgid "seek forward" +msgstr "" + +#: tools/gst-play.c:966 +msgid "seek backward" +msgstr "" + +#: tools/gst-play.c:967 +msgid "volume up" +msgstr "" + +#: tools/gst-play.c:968 +msgid "volume down" +msgstr "" + +#: tools/gst-play.c:969 +msgid "increase playback rate" +msgstr "" + +#: tools/gst-play.c:970 +msgid "decrease playback rate" +msgstr "" + +#: tools/gst-play.c:971 +msgid "change playback direction" +msgstr "" + +#: tools/gst-play.c:972 +msgid "enable/disable trick modes" +msgstr "" + +#: tools/gst-play.c:973 +msgid "change audio track" +msgstr "" + +#: tools/gst-play.c:974 +msgid "change video track" +msgstr "" + +#: tools/gst-play.c:975 +msgid "change subtitle track" +msgstr "" + +#: tools/gst-play.c:976 +msgid "show keyboard shortcuts" +msgstr "" + +#: tools/gst-play.c:979 +msgid "Interactive mode - keyboard controls:" +msgstr "" + +#: tools/gst-play.c:1107 msgid "Video sink to use (default is autovideosink)" msgstr "" -#: tools/gst-play.c:668 +#: tools/gst-play.c:1109 msgid "Audio sink to use (default is autoaudiosink)" msgstr "" -#: tools/gst-play.c:670 +#: tools/gst-play.c:1111 msgid "Enable gapless playback" msgstr "" -#: tools/gst-play.c:672 +#: tools/gst-play.c:1113 msgid "Shuffle playlist" msgstr "" -#: tools/gst-play.c:674 -msgid "Interactive control via keyboard" +#: tools/gst-play.c:1116 +msgid "Disable interactive control via the keyboard" msgstr "" -#: tools/gst-play.c:676 +#: tools/gst-play.c:1118 msgid "Volume" msgstr "" -#: tools/gst-play.c:678 +#: tools/gst-play.c:1120 msgid "Playlist file containing input media files" msgstr "" -#: tools/gst-play.c:747 +#: tools/gst-play.c:1122 +msgid "Do not print any output (apart from errors)" +msgstr "" + +#: tools/gst-play.c:1191 #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" -#: tools/gst-play.c:751 +#: tools/gst-play.c:1195 msgid "You must provide at least one filename or URI to play." msgstr "" + +#: tools/gst-play.c:1234 +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/hr.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/hr.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/hr.po gst-plugins-base1.0-1.6.1/po/hr.po --- gst-plugins-base1.0-1.4.3/po/hr.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/hr.po 2015-10-30 14:21:45.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2012-04-16 04:19+0200\n" "Last-Translator: Tomislav Krznar \n" "Language-Team: Croatian \n" @@ -79,11 +79,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Nedostaje element „%s” - provjerite vašu GStreamer instalaciju." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran." - msgid "Could not determine type of stream" msgstr "Ne mogu odrediti vrstu niza" @@ -523,12 +518,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Ne mogu otvoriti uređaj za reprodukciju u stereo načinu." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Ovaj CD nema zvučne pjesme" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Kate oblik titlova" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -541,7 +621,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -550,6 +630,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -557,6 +640,13 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Nekomprimirani YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/hu.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/hu.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/hu.po gst-plugins-base1.0-1.6.1/po/hu.po --- gst-plugins-base1.0-1.4.3/po/hu.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/hu.po 2015-10-30 14:21:45.000000000 +0000 @@ -4,13 +4,13 @@ # # Laszlo Dvornik , 2004. # Gabor Kelemen , 2006, 2007, 2008, 2009, 2012. -# Balázs Úr , 2014. +# Balázs Úr , 2014, 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-26 00:28+0200\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-30 13:34+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -83,12 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "A(z) „%s” elem hiányzik - ellenőrizze a Gstreamer telepítését." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Az adatfolyam lejátszásához egy %s bővítmény szükséges, de az nincs " -"telepítve." - msgid "Could not determine type of stream" msgstr "Nem határozható meg az adatfolyam típusa" @@ -522,12 +516,95 @@ "Ne lépjen ki a kezdeti eszközlista megjelenítése után, de várjon az eszközök " "hozzáadására/eltávolítására." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Hangerő: %.0f%%" + msgid "Buffering..." msgstr "Pufferelés…" msgid "Clock lost, selecting a new one\n" msgstr "Óra elveszítve, egy új kiválasztása\n" +msgid "Reached end of play list." +msgstr "A lejátszólista vége elérve." + +msgid "Paused" +msgstr "Szüneteltetve" + +#, c-format +msgid "Now playing %s\n" +msgstr "Most játszott: %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Hamarosan befejeződik, következő cím előkészítése: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Lejátszási sebesség: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nem lehet megváltoztatni a lejátszási sebességet erre: %.2f" + +msgid "space" +msgstr "szóköz" + +msgid "pause/unpause" +msgstr "szünet/folytatás" + +msgid "q or ESC" +msgstr "q vagy ESC" + +msgid "quit" +msgstr "kilépés" + +msgid "play next" +msgstr "következő lejátszása" + +msgid "play previous" +msgstr "előző lejátszása" + +msgid "seek forward" +msgstr "tekerés előre" + +msgid "seek backward" +msgstr "tekerés hátra" + +msgid "volume up" +msgstr "hangerő fel" + +msgid "volume down" +msgstr "hangerő le" + +msgid "increase playback rate" +msgstr "lejátszási sebesség növelése" + +msgid "decrease playback rate" +msgstr "lejátszási sebesség csökkentése" + +msgid "change playback direction" +msgstr "lejátszási irány megváltoztatása" + +msgid "enable/disable trick modes" +msgstr "trükk módok engedélyezése/letiltása" + +msgid "change audio track" +msgstr "hangsáv megváltoztatása" + +msgid "change video track" +msgstr "videosáv megváltoztatása" + +msgid "change subtitle track" +msgstr "feliratsáv megváltoztatása" + +msgid "show keyboard shortcuts" +msgstr "gyorsbillentyűk megjelenítése" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktív mód - billentyűzetvezérlők:" + msgid "Video sink to use (default is autovideosink)" msgstr "Használandó videosüllyesztés (az alapértelmezett az autovideosink)" @@ -540,8 +617,8 @@ msgid "Shuffle playlist" msgstr "Lejátszólista keverése" -msgid "Interactive control via keyboard" -msgstr "Interaktív vezérlés billentyűzettel" +msgid "Disable interactive control via the keyboard" +msgstr "Interaktív vezérlés letiltása a billentyűzeten keresztül" msgid "Volume" msgstr "Hangerő" @@ -549,6 +626,9 @@ msgid "Playlist file containing input media files" msgstr "Bemeneti médiafájlokat tartalmazó lejátszólista fájl" +msgid "Do not print any output (apart from errors)" +msgstr "Ne írjon ki semmilyen kimenetet (a hibákon kívül)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Használat: %s FÁJL1|URI1 [FÁJL2|URI2] [FÁJL3|URI3] …" @@ -556,6 +636,15 @@ msgid "You must provide at least one filename or URI to play." msgstr "Meg kell adnia legalább egy fájlnevet vagy URI-t a lejátszáshoz." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" +"Nyomja meg a „k” billentyűt a gyorsbillentyűk listájának megtekintéséhez.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Az adatfolyam lejátszásához egy %s bővítmény szükséges, de az nincs " +#~ "telepítve." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Tömörítetlen %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/id.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/id.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/id.po gst-plugins-base1.0-1.6.1/po/id.po --- gst-plugins-base1.0-1.4.3/po/id.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/id.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 1.4.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2014-07-30 09:19+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" @@ -78,10 +78,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Elemen '%s' hilang - cek instalasi GStreamer anda." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Plugin %s dibutuhkan untuk memutar arus ini, tapi tidak diinstal." - msgid "Could not determine type of stream" msgstr "Tak dapat menentukan tipe arus" @@ -517,12 +513,99 @@ "Jangan keluar setelah menampilkan senarai divais awal, tapi tunggu hingga " "divais ditambahkan/dihapus." +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volume" + msgid "Buffering..." msgstr "Menyangga..." msgid "Clock lost, selecting a new one\n" msgstr "Jam hilang, pilih yang baru\n" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Tak dapat membuka divais untuk putar kembali dalam mode stereo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volume" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "CD ini tidak memiliki jalur audio" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Format subjudul Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +#, fuzzy +msgid "Interactive mode - keyboard controls:" +msgstr "Kontrol interaktif via papan ketik" + msgid "Video sink to use (default is autovideosink)" msgstr "Sink video yang digunakan (standar adalah autovideosink)" @@ -535,7 +618,8 @@ msgid "Shuffle playlist" msgstr "Acak senarai putar" -msgid "Interactive control via keyboard" +#, fuzzy +msgid "Disable interactive control via the keyboard" msgstr "Kontrol interaktif via papan ketik" msgid "Volume" @@ -544,6 +628,9 @@ msgid "Playlist file containing input media files" msgstr "Berkas senarai putar berisi masukan berkas media" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Penggunaan: %s BERKAS1|URI1 [BERKAS2|URI2] [BERKAS3|URI3] ..." @@ -551,3 +638,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" "Anda harus menyediakan setidaknya satu nama berkas atau URI untuk diputar." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "Plugin %s dibutuhkan untuk memutar arus ini, tapi tidak diinstal." Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/it.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/it.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/it.po gst-plugins-base1.0-1.6.1/po/it.po --- gst-plugins-base1.0-1.4.3/po/it.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/it.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2010-04-28 14:27+0200\n" "Last-Translator: Luca Ferretti \n" "Language-Team: Italian \n" @@ -83,12 +83,6 @@ "Risulta mancante l'elemento «%s» - verificare la propria installazione di " "GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Per riprodurre questo stream è richiesto un plugin %s, che però non risulta " -"installato. " - msgid "Could not determine type of stream" msgstr "Impossibile determinare il tipo di stream" @@ -556,12 +550,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Impossibile aprire il device per la riproduzione in modalità stereo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Questo CD non presenta alcuna traccia audio" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Sottotitoli formato Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -574,7 +653,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -583,6 +662,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -590,6 +672,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Per riprodurre questo stream è richiesto un plugin %s, che però non " +#~ "risulta installato. " + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "YUV non compresso" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/ja.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/ja.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/ja.po gst-plugins-base1.0-1.6.1/po/ja.po --- gst-plugins-base1.0-1.4.3/po/ja.po 2014-09-24 08:19:17.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/ja.po 2015-10-30 14:21:45.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2010-10-25 10:27+0900\n" "Last-Translator: Makoto Kato \n" "Language-Team: Japanese \n" @@ -81,12 +81,6 @@ "エレメント '%s' が見つかりません - GStreamer のインストールが失敗している可能" "性があります" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"%s プラグインはこのストリームを再生するのに必要ですが、インストールされていま" -"せん" - msgid "Could not determine type of stream" msgstr "ストリームの種類を判別できませんでした" @@ -527,12 +521,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "ステレオモードで再生用にデバイスをオープンできませんでした" + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "この CD にはオーディオトラックがありません" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Kate 字幕形式" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -545,7 +624,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -554,6 +633,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -561,6 +643,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "%s プラグインはこのストリームを再生するのに必要ですが、インストールされて" +#~ "いません" + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "非圧縮 YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/lt.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/lt.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/lt.po gst-plugins-base1.0-1.6.1/po/lt.po --- gst-plugins-base1.0-1.4.3/po/lt.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/lt.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base-0.10.15.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2008-03-07 23:43+0200\n" "Last-Translator: Gintautas Miliauskas \n" "Language-Team: Lithuanian \n" @@ -81,10 +81,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Trūksta elemento „%s“ - patikrinkite GStreamer įdiegimą." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Šiam srautui groti reikalingas %s įskiepis, bet jis nėra įdiegtas." - #, fuzzy msgid "Could not determine type of stream" msgstr "Nepavyko sukurti „decodebin“ elemento." @@ -529,12 +525,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nepavyko atverti įrenginio stereofoniniam grojimui." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Šiame CD nėra audio takelių" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Sami titrų formatas" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -547,7 +628,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -556,6 +637,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -563,6 +647,12 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "Šiam srautui groti reikalingas %s įskiepis, bet jis nėra įdiegtas." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Nekompresuotas YUV" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/lv.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/lv.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/lv.po gst-plugins-base1.0-1.6.1/po/lv.po --- gst-plugins-base1.0-1.4.3/po/lv.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/lv.po 2015-10-30 14:21:45.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 1.2.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2014-04-20 16:15+0300\n" "Last-Translator: Rihards Prieditis \n" "Language-Team: Latvian \n" @@ -85,11 +85,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Trūkst elements “%s” - pārbaudiet savu GStreamer instalāciju." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Nepieciešamas %s spraudnis, lai atskaņotu šo plūsmu, bet tas nav instalēts." - msgid "Could not determine type of stream" msgstr "Nevarēja noteikt straumes tipu" @@ -521,12 +516,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "Buferē..." msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nevarēja atvērt ierīci atskaņošanai stereo režīmā." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Šajā CD nav neviena audio celiņa" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Kate subtitru formāts" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "Izmantojamais video uztvērējs (pēc noklusējuma autovideosink)" @@ -539,7 +619,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -548,6 +628,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Lietojums: %s DATNE1|URI1 [DATNE2|URI2] [DATNE3|URI3] ..." @@ -555,6 +638,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "Jums jānorāda vismaz viens datnes nosaukums vai atskaņojamais URI." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Nepieciešamas %s spraudnis, lai atskaņotu šo plūsmu, bet tas nav " +#~ "instalēts." + #~ msgid "Master" #~ msgstr "Galvenais" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/nb.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/nb.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/nb.po gst-plugins-base1.0-1.6.1/po/nb.po --- gst-plugins-base1.0-1.4.3/po/nb.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/nb.po 2015-10-30 14:21:45.000000000 +0000 @@ -2,14 +2,14 @@ # This file is put in the public domain. # # Kjartan Maraas , 2004-2010. -# Johnny A. Solbu , 2012, +# Johnny A. Solbu , 2012-2015 # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-22 12:38+0100\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-07-11 01:33+0100\n" "Last-Translator: Johnny A. Solbu \n" "Language-Team: Norwegian Bokmaal \n" "Language: nb_NO\n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.5.7\n" msgid "Could not open device for playback in mono mode." msgstr "Kunne ikke åpne enheten for avspilling i mono-modus." @@ -80,12 +80,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Mangler elementet «%s» - kontroller GStreamer-installasjonen." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke " -"installert." - msgid "Could not determine type of stream" msgstr "Kunne ikke bestemme type strøm." @@ -520,12 +514,95 @@ "Ikke avslutt etter å ha vist den første enheteslisten, men vent på at " "enheter blir lagt til/fjernet." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Volum: %.0f%%" + msgid "Buffering..." msgstr "Bufrer ..." msgid "Clock lost, selecting a new one\n" msgstr "Klokke tapt, velger en ny\n" +msgid "Reached end of play list." +msgstr "Nådde slutten av spillelisten." + +msgid "Paused" +msgstr "Pauset" + +#, c-format +msgid "Now playing %s\n" +msgstr "Spiller nå %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "I ferd med å fullføre, forbereder neste tittel: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Avspillingshastighet: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Kunne ikke endre avspillingshastigheten til %.2f" + +msgid "space" +msgstr "avstand" + +msgid "pause/unpause" +msgstr "pause/opphev pause" + +msgid "q or ESC" +msgstr "q eller ESC" + +msgid "quit" +msgstr "Avslutt" + +msgid "play next" +msgstr "spill neste" + +msgid "play previous" +msgstr "spill forige" + +msgid "seek forward" +msgstr "søk forover" + +msgid "seek backward" +msgstr "søk bakover" + +msgid "volume up" +msgstr "Volum opp" + +msgid "volume down" +msgstr "volum opp" + +msgid "increase playback rate" +msgstr "øk avspillingshastigheten" + +msgid "decrease playback rate" +msgstr "reduser avspillingshastigheten" + +msgid "change playback direction" +msgstr "endre avspillingsretningen" + +msgid "enable/disable trick modes" +msgstr "aktivere/deaktivere trikse-moduser\t" + +msgid "change audio track" +msgstr "endre lydspor" + +msgid "change video track" +msgstr "endre videospor" + +msgid "change subtitle track" +msgstr "endre undertekstspor" + +msgid "show keyboard shortcuts" +msgstr "vis hurtigtaster" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktiv modus - tastaturkontroller:" + msgid "Video sink to use (default is autovideosink)" msgstr "Video-sink som skal brukes (standard er autovideosink)" @@ -538,8 +615,8 @@ msgid "Shuffle playlist" msgstr "Stokke spilleliste" -msgid "Interactive control via keyboard" -msgstr "Interaktiv kontroll via tastatur" +msgid "Disable interactive control via the keyboard" +msgstr "Deaktiver interaktiv kontroll via tastaturet" msgid "Volume" msgstr "Volum" @@ -547,6 +624,9 @@ msgid "Playlist file containing input media files" msgstr "Spillelistefil som inneholder inngangsmediefiler" +msgid "Do not print any output (apart from errors)" +msgstr "Ikke skriv noe utdata (bortsett fra feil)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Bruk: %s FIL1|URI1 [FILE|URI2] [FILE|URI3] ..." @@ -554,6 +634,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "Du må ha med minst ett filnavn eller nettadresse å spille." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Trykk «k» for å se en liste over hurtigtaster.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke " +#~ "installert." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Ukomprimert %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/nl.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/nl.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/nl.po gst-plugins-base1.0-1.6.1/po/nl.po --- gst-plugins-base1.0-1.4.3/po/nl.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/nl.po 2015-10-30 12:26:20.000000000 +0000 @@ -1,13 +1,13 @@ -# translation of gst-plugins-base-1.4.0.po to Dutch +# translation of gst-plugins-base.po to Dutch # This file is put in the public domain. # -# Freek de Kruijf , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. +# Freek de Kruijf , 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.6.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-22 10:50+0200\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-10-17 12:35+0200\n" "Last-Translator: Freek de Kruijf \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -81,12 +81,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Ontbrekend element '%s' - controleer de instalatie van uw GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Een %s plugin is vereist voor het afspelen van deze gegevens, echter deze is " -"niet geïnstalleerd." - msgid "Could not determine type of stream" msgstr "Kan het type stream niet bepalen" @@ -529,12 +523,95 @@ "Niet beëindigen na het tonen van de initiële lijst apparaten, maar wacht op " "toegevoegde/verwijderde apparaten." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Volume: %.0f%%" + msgid "Buffering..." msgstr "In buffer opslaan..." msgid "Clock lost, selecting a new one\n" msgstr "Klok verloren, een nieuwe wordt geselecteerd\n" +msgid "Reached end of play list." +msgstr "Einde van de afspeellijst bereikt." + +msgid "Paused" +msgstr "Gepauzeerd" + +#, c-format +msgid "Now playing %s\n" +msgstr "Nu aan het afspelen %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Op het punt te eindigen, voorbereiden van volgende titel: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Afspeelsnelheid: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Kon afspeelsnelheid niet wijzigen naar %.2f" + +msgid "space" +msgstr "spatie" + +msgid "pause/unpause" +msgstr "pauzeren/verder" + +msgid "q or ESC" +msgstr "q of ESC" + +msgid "quit" +msgstr "stoppen" + +msgid "play next" +msgstr "volgende afspelen" + +msgid "play previous" +msgstr "vorige afspelen" + +msgid "seek forward" +msgstr "vooruit zoeken" + +msgid "seek backward" +msgstr "achteruit zoeken" + +msgid "volume up" +msgstr "volume omhoog" + +msgid "volume down" +msgstr "volume omlaag" + +msgid "increase playback rate" +msgstr "afspeelsnelheid verhogen" + +msgid "decrease playback rate" +msgstr "afspeelsnelheid verlagen" + +msgid "change playback direction" +msgstr "afspeelrichting wijzigen" + +msgid "enable/disable trick modes" +msgstr "truc-modi in-/uitschakelen" + +msgid "change audio track" +msgstr "audiotrack wijzigen" + +msgid "change video track" +msgstr "videotrack wijzigen" + +msgid "change subtitle track" +msgstr "ondertiteltrack wijzigen" + +msgid "show keyboard shortcuts" +msgstr "sneltoetsen tonen" + +msgid "Interactive mode - keyboard controls:" +msgstr "Interactieve modus - besturing op toetsenbord" + msgid "Video sink to use (default is autovideosink)" msgstr "Te gebruiken video-sink (standaard is autovideosink)" @@ -547,8 +624,8 @@ msgid "Shuffle playlist" msgstr "Afspeellijst in willekeurige volgorde" -msgid "Interactive control via keyboard" -msgstr "Interactieve besturing via toetsenbord" +msgid "Disable interactive control via the keyboard" +msgstr "Interactieve besturing via toetsenbord uitschakelen" msgid "Volume" msgstr "Volume" @@ -556,6 +633,9 @@ msgid "Playlist file containing input media files" msgstr "Afspeellijstbestand met mediabestanden voor invoer" +msgid "Do not print any output (apart from errors)" +msgstr "Geen uitvoer afdrukken (los van fouten)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Gebruik: %s BESTAND1|URI1 [BESTAND2|URI2] [BESTAND3|URI3] ..." @@ -563,6 +643,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "U moet minstens één bestandsnaam of URI leveren om af te spelen." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Druk op 'k' om een lijst met sneltoetsen te zien.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Een %s plugin is vereist voor het afspelen van deze gegevens, echter deze " +#~ "is niet geïnstalleerd." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Niet-gecomprimeerd %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/or.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/or.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/or.po gst-plugins-base1.0-1.6.1/po/or.po --- gst-plugins-base1.0-1.4.3/po/or.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/or.po 2015-10-30 14:21:45.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gst-plugins-0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2004-09-27 13:32+0530\n" "Last-Translator: Gora Mohanty \n" "Language-Team: Oriya \n" @@ -84,10 +84,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - #, fuzzy msgid "Could not determine type of stream" msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ." @@ -521,12 +517,96 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "ପ୍ରବଳତା" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "ପ୍ରବଳତା" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -539,7 +619,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -548,6 +628,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -555,6 +638,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + #~ msgid "Bass" #~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/pl.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/pl.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/pl.po gst-plugins-base1.0-1.6.1/po/pl.po --- gst-plugins-base1.0-1.4.3/po/pl.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/pl.po 2015-10-30 14:21:45.000000000 +0000 @@ -1,13 +1,13 @@ # Polish translation for gst-plugins-base. # This file is distributed under the same license as the gst-plugins-base package. -# Jakub Bogusz , 2007-2014. +# Jakub Bogusz , 2007-2015. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-21 21:21+0200\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-26 21:00+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -88,12 +88,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Brak elementu '%s' - proszę sprawdzić instalację GStreamera." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Wtyczka %s jest wymagana do otworzenia tego strumienia, ale nie jest " -"zainstalowana." - msgid "Could not determine type of stream" msgstr "Nie udało się określić typu strumienia" @@ -527,12 +521,95 @@ "Bez kończenia po wyświetleniu początkowej listy urządzeń, oczekiwanie na " "dodanie/usunięcie urządzeń." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Głośność: %.0f%%" + msgid "Buffering..." msgstr "Buforowanie..." msgid "Clock lost, selecting a new one\n" msgstr "Utracono zegar, wybieranie nowego\n" +msgid "Reached end of play list." +msgstr "Osiągnięto koniec listy odtwarzania." + +msgid "Paused" +msgstr "Pauza" + +#, c-format +msgid "Now playing %s\n" +msgstr "Trwa odtwarzanie %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Blisko końca, przygotowywanie następnego tytułu: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Tempo odtwarzania: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nie udało się zmienić tempa odtwarzania na %.2f" + +msgid "space" +msgstr "spacja" + +msgid "pause/unpause" +msgstr "pauza/wznowienie" + +msgid "q or ESC" +msgstr "q lub ESC" + +msgid "quit" +msgstr "wyjście" + +msgid "play next" +msgstr "odtworzenie następnego" + +msgid "play previous" +msgstr "odtworzenie poprzedniego" + +msgid "seek forward" +msgstr "przewinięcie w przód" + +msgid "seek backward" +msgstr "przewinięcie w tył" + +msgid "volume up" +msgstr "większa głośność" + +msgid "volume down" +msgstr "mniejsza głośność" + +msgid "increase playback rate" +msgstr "większe tempo odtwarzania" + +msgid "decrease playback rate" +msgstr "mniejsze tempo odtwarzania" + +msgid "change playback direction" +msgstr "zmiana kierunku odtwarzania" + +msgid "enable/disable trick modes" +msgstr "włączenie/wyłączenie trybów trików" + +msgid "change audio track" +msgstr "zmiana ścieżki dźwiękowej" + +msgid "change video track" +msgstr "zmiana ścieżki filmowej" + +msgid "change subtitle track" +msgstr "zmiana ścieżki podpisów" + +msgid "show keyboard shortcuts" +msgstr "wyświetlenie skrótów klawiatury" + +msgid "Interactive mode - keyboard controls:" +msgstr "Tryb interaktywny - sterowanie z klawiatury:" + msgid "Video sink to use (default is autovideosink)" msgstr "Element pochłaniający obraz (domyślny to autovideosink)" @@ -545,8 +622,8 @@ msgid "Shuffle playlist" msgstr "Przetasowanie listy odtwarzania" -msgid "Interactive control via keyboard" -msgstr "Interaktywne sterowanie z klawiatury" +msgid "Disable interactive control via the keyboard" +msgstr "Wyłączenie interaktywnego sterowania z klawiatury" msgid "Volume" msgstr "Głośność" @@ -554,9 +631,15 @@ msgid "Playlist file containing input media files" msgstr "Plik listy odtwarzania zawierający wejściowe pliki multimedialne" +msgid "Do not print any output (apart from errors)" +msgstr "Bez wypisywania żadnego wyjścia (poza błędami)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Składnia: %s PLIK1|URI1 [PLIK2|URI2] [PLIK3|URI3] ..." msgid "You must provide at least one filename or URI to play." msgstr "Trzeba podać przynajmniej jedną nazwę pliku lub URI do odtworzenia." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Klawisz 'k' wyświetla listę skrótów klawiatury.\n" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/pt_BR.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/pt_BR.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/pt_BR.po gst-plugins-base1.0-1.6.1/po/pt_BR.po --- gst-plugins-base1.0-1.4.3/po/pt_BR.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/pt_BR.po 2015-10-30 14:21:45.000000000 +0000 @@ -1,7 +1,7 @@ # Brazilian Portuguese translation of gst-plugins-base. -# Copyright (C) 2008-2013 Free Software Foundation, Inc. +# Copyright (C) 2008-2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gst-plugins-base package. -# Fabrício Godoy , 2008-2013. +# Fabrício Godoy , 2008-2015. # # PCM -> PCM # buffering -> preenchendo buffer @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base-1.2.1\n" +"Project-Id-Version: gst-plugins-base-1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2013-12-29 17:33-0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-02-01 19:21-0200\n" "Last-Translator: Fabrício Godoy \n" "Language-Team: Brazilian Portuguese \n" @@ -87,11 +87,6 @@ msgstr "" "O elemento \"%s\" está faltando, verifique a instalação do seu GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"O plug-in %s é necessário para reproduzir este fluxo, mas não está instalado." - msgid "Could not determine type of stream" msgstr "Não foi possível determinar o tipo de fluxo" @@ -530,13 +525,102 @@ "Don't exit after showing the initial device list, but wait for devices to " "added/removed." msgstr "" +"Não sair após exibir a lista inicial de dispositivos, mas sim, esperar por " +"dispositivos serem adicionados ou removidos." + +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volume" msgid "Buffering..." msgstr "Preenchendo buffer..." msgid "Clock lost, selecting a new one\n" +msgstr "Temporizador perdido, selecionando um novo\n" + +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" msgstr "" +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Não foi possível abrir o dispositivo para reprodução em estéreo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volume" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Este CD não tem trilhas de áudio" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Formato de legendas Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +#, fuzzy +msgid "Interactive mode - keyboard controls:" +msgstr "Controle interativo via teclado" + msgid "Video sink to use (default is autovideosink)" msgstr "" "Elemento consumidor de vídeo utilizado (predefinido para autovideosink)" @@ -549,15 +633,19 @@ msgstr "Ativar reprodução sem intervalos" msgid "Shuffle playlist" -msgstr "" +msgstr "Embaralhar lista de reprodução" -msgid "Interactive control via keyboard" -msgstr "" +#, fuzzy +msgid "Disable interactive control via the keyboard" +msgstr "Controle interativo via teclado" msgid "Volume" -msgstr "" +msgstr "Volume" msgid "Playlist file containing input media files" +msgstr "Arquivo de lista de reprodução que contém arquivos de mídia de entrada" + +msgid "Do not print any output (apart from errors)" msgstr "" #, c-format @@ -567,6 +655,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "Você deve fornecer ao menos um nome de arquivo ou URI para reproduzir." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "O plug-in %s é necessário para reproduzir este fluxo, mas não está " +#~ "instalado." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "%2$s YUV %1$s sem compressão" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/ro.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/ro.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/ro.po gst-plugins-base1.0-1.6.1/po/ro.po --- gst-plugins-base1.0-1.4.3/po/ro.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/ro.po 2015-10-30 14:21:45.000000000 +0000 @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2010-08-16 01:21+0300\n" "Last-Translator: Lucian Adrian Grijincu \n" "Language-Team: Romanian \n" @@ -80,12 +80,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Element %s lipsă - verificați instalarea GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Un modul de extensie %s este necesar pentru a reda acest flux, dar acesta nu " -"este instalat." - msgid "Could not determine type of stream" msgstr "Nu s-a putut determina tipul fluxului" @@ -524,12 +518,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nu s-a putut deschide dispozitivul pentru redare în modul stereo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Acest CD nu conține piste audio" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Format subtitrare Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -542,7 +621,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -551,6 +630,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -558,6 +640,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Un modul de extensie %s este necesar pentru a reda acest flux, dar acesta " +#~ "nu este instalat." + #, fuzzy #~ msgid "Uncompressed %s YUV %s" #~ msgstr "YUV necomprimat" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/ru.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/ru.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/ru.po gst-plugins-base1.0-1.6.1/po/ru.po --- gst-plugins-base1.0-1.4.3/po/ru.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/ru.po 2015-10-30 14:21:45.000000000 +0000 @@ -3,13 +3,13 @@ # # Артём Попов , 2009. # Pavel Maryanov , 2009. -# Yuri Kozlov , 2010, 2011, 2012, 2013, 2014. +# Yuri Kozlov , 2010, 2011, 2012, 2013, 2014, 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-21 19:24+0400\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-26 09:00+0300\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" @@ -83,11 +83,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Отсутствует элемент «%s» — проверьте правильность установки GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Для воспроизведения этого потока требуется модуль %s, но он не установлен." - msgid "Could not determine type of stream" msgstr "Не удалось определить тип потока" @@ -524,12 +519,95 @@ "Не завершать работу после показа начального списка устройств, а ждать их " "добавления/удаления." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Громкость: %.0f%%" + msgid "Buffering..." msgstr "Буферизация…" msgid "Clock lost, selecting a new one\n" msgstr "Часы потеряны, выбираем новые\n" +msgid "Reached end of play list." +msgstr "Достигнут конец списка воспроизведения." + +msgid "Paused" +msgstr "Пауза" + +#, c-format +msgid "Now playing %s\n" +msgstr "Сейчас проигрывается %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Почти закончено, подготавливается следующая часть: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Скорость воспроизведения: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Не удалось изменить скорость воспроизведения на %.2f" + +msgid "space" +msgstr "пробел" + +msgid "pause/unpause" +msgstr "пауза/продолжение" + +msgid "q or ESC" +msgstr "q или ESC" + +msgid "quit" +msgstr "выход" + +msgid "play next" +msgstr "воспроизвести следующее" + +msgid "play previous" +msgstr "воспроизвести предыдущее" + +msgid "seek forward" +msgstr "перемотать вперед" + +msgid "seek backward" +msgstr "перемотать назад" + +msgid "volume up" +msgstr "увеличить громкость" + +msgid "volume down" +msgstr "уменьшить громкость" + +msgid "increase playback rate" +msgstr "увеличить скорость воспроизведения" + +msgid "decrease playback rate" +msgstr "уменьшить скорость воспроизведения" + +msgid "change playback direction" +msgstr "изменить направление воспроизведения" + +msgid "enable/disable trick modes" +msgstr "включить/выключить режим рекомендаций" + +msgid "change audio track" +msgstr "изменить звуковую дорожку" + +msgid "change video track" +msgstr "изменить видео дорожку" + +msgid "change subtitle track" +msgstr "изменить дорожку субтитров" + +msgid "show keyboard shortcuts" +msgstr "показать клавиатурные сокращения" + +msgid "Interactive mode - keyboard controls:" +msgstr "Интерактивный режим — управление с клавиатуры:" + msgid "Video sink to use (default is autovideosink)" msgstr "Используемый приёмник видео (по умолчанию autovideosink)" @@ -542,8 +620,8 @@ msgid "Shuffle playlist" msgstr "Перемешать список воспроизведения" -msgid "Interactive control via keyboard" -msgstr "Интерактивное управление с клавиатуры" +msgid "Disable interactive control via the keyboard" +msgstr "Отключить интерактивное управление с клавиатуры" msgid "Volume" msgstr "Громкость" @@ -551,6 +629,9 @@ msgid "Playlist file containing input media files" msgstr "Файл списка воспроизведения с входными медиа-файлами" +msgid "Do not print any output (apart from errors)" +msgstr "Не выводить ничего в поток стандартного вывода (кроме ошибок)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Использование: %s ФАЙЛ1|URI1 [ФАЙЛ2|URI2] [ФАЙЛ3|URI3] …" @@ -558,6 +639,13 @@ msgid "You must provide at least one filename or URI to play." msgstr "Вы должны указать не менее одного имени файла или URI." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Нажмите «k» для показа списка клавиатурных комбинаций.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Для воспроизведения этого потока требуется модуль %s, но он не установлен." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Несжатый %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/sk.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/sk.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/sk.po gst-plugins-base1.0-1.6.1/po/sk.po --- gst-plugins-base1.0-1.4.3/po/sk.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/sk.po 2015-10-30 14:21:45.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 1.2.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2014-01-30 10:57+0100\n" "Last-Translator: Peter Tuharsky \n" "Language-Team: Slovak \n" @@ -82,12 +82,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Chýa prvok '%s' - skontrolujte svoju inštaláciu GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"Na prehratie tohto prúdu údajov je vyžadovaný zásuvný modul %s, ktorý nie je " -"nainštalovaný." - msgid "Could not determine type of stream" msgstr "Nepodarilo sa zistiť typ prúdu údajov" @@ -519,12 +513,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "Napĺňam vyrovnávaciu pamäť..." msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Nepodarilo sa otvoriť zariadenie pre prehrávanie v režime stereo." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Toto CD nemá zvukové stopy" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Formát titulkov Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -537,7 +616,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -546,6 +625,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Použitie: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." @@ -553,6 +635,14 @@ msgid "You must provide at least one filename or URI to play." msgstr "Ak chcete prehrávať, musíte zadať aspoň jeden názov súboru alebo URI." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Na prehratie tohto prúdu údajov je vyžadovaný zásuvný modul %s, ktorý nie " +#~ "je nainštalovaný." + #~ msgid "Master" #~ msgstr "Hlavný" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/sl.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/sl.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/sl.po gst-plugins-base1.0-1.6.1/po/sl.po --- gst-plugins-base1.0-1.4.3/po/sl.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/sl.po 2015-10-30 14:21:45.000000000 +0000 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base-1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2013-01-05 10:10+0100\n" "Last-Translator: Klemen Košir \n" "Language-Team: Slovenian \n" @@ -82,10 +82,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Predmet '%s' manjka - preverite namestitev paketa GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Za predvajanje tega pretoka je potreben vstavek %s, ki pa ni nameščen." - msgid "Could not determine type of stream" msgstr "Vrste pretoka ni mogoče določiti." @@ -518,12 +514,97 @@ "added/removed." msgstr "" +#, c-format +msgid "Volume: %.0f%%" +msgstr "" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Naprave ni mogoče odpreti za predvajanje v stereo načinu." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +msgid "volume up" +msgstr "" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Ta CD nima zvočnih sledi" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Oblika podnapisov Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -536,7 +617,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -545,9 +626,19 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" msgid "You must provide at least one filename or URI to play." msgstr "" + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "Za predvajanje tega pretoka je potreben vstavek %s, ki pa ni nameščen." Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/sq.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/sq.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/sq.po gst-plugins-base1.0-1.6.1/po/sq.po --- gst-plugins-base1.0-1.4.3/po/sq.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/sq.po 2015-10-30 14:21:45.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: gst-plugins 0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2004-08-07 20:29+0200\n" "Last-Translator: Laurent Dhima \n" "Language-Team: Albanian \n" @@ -82,10 +82,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" - #, fuzzy msgid "Could not determine type of stream" msgstr "I pamundur shkrimi tek file \"%s\"." @@ -519,12 +515,96 @@ "added/removed." msgstr "" +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volumi" + msgid "Buffering..." msgstr "" msgid "Clock lost, selecting a new one\n" msgstr "" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "I pamundur hapja e dispozitivit CD për lexim." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volumi" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +msgid "change audio track" +msgstr "" + +msgid "change video track" +msgstr "" + +msgid "change subtitle track" +msgstr "" + +msgid "show keyboard shortcuts" +msgstr "" + +msgid "Interactive mode - keyboard controls:" +msgstr "" + msgid "Video sink to use (default is autovideosink)" msgstr "" @@ -537,7 +617,7 @@ msgid "Shuffle playlist" msgstr "" -msgid "Interactive control via keyboard" +msgid "Disable interactive control via the keyboard" msgstr "" msgid "Volume" @@ -546,6 +626,9 @@ msgid "Playlist file containing input media files" msgstr "" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -553,6 +636,9 @@ msgid "You must provide at least one filename or URI to play." msgstr "" +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + #~ msgid "Bass" #~ msgstr "Bas" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/sr.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/sr.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/sr.po gst-plugins-base1.0-1.6.1/po/sr.po --- gst-plugins-base1.0-1.4.3/po/sr.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/sr.po 2015-10-30 14:21:45.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base-1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2014-09-13 10:45+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" @@ -80,10 +80,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Недостаје елемент „%s“ — проверите вашу инсталацију Гстримера." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "За пуштање овог тока потребан је прикључак „%s“, али није инсталиран." - msgid "Could not determine type of stream" msgstr "Не могу да утврдим врсту тока" @@ -517,12 +513,99 @@ "Не излази након показивања почетног списка уређаја, већ чека да уређаји буду " "додати/уклоњени." +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Јачина звука" + msgid "Buffering..." msgstr "Смештам у међумеморију..." msgid "Clock lost, selecting a new one\n" msgstr "Сат је изгубљен, бирам нови\n" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Не могу да отворим уређај ради пуштања у стерео режиму." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Јачина звука" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Овај ЦД нема звучних нумера" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Кејт запис превода" + +msgid "show keyboard shortcuts" +msgstr "" + +#, fuzzy +msgid "Interactive mode - keyboard controls:" +msgstr "Међудејствено управљање путем тастатуре" + msgid "Video sink to use (default is autovideosink)" msgstr "Усаглашавање снимка за коришћење (основно је „autovideosink“)" @@ -535,7 +618,8 @@ msgid "Shuffle playlist" msgstr "Меша списак нумера" -msgid "Interactive control via keyboard" +#, fuzzy +msgid "Disable interactive control via the keyboard" msgstr "Међудејствено управљање путем тастатуре" msgid "Volume" @@ -544,6 +628,9 @@ msgid "Playlist file containing input media files" msgstr "Датотека списка нумера садржи датотеке улазних медија" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "" @@ -552,3 +639,10 @@ msgid "You must provide at least one filename or URI to play." msgstr "" "Морате да доставите барем један назив датотеке или путању да бисте пустили." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "За пуштање овог тока потребан је прикључак „%s“, али није инсталиран." Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/sv.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/sv.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/sv.po gst-plugins-base1.0-1.6.1/po/sv.po --- gst-plugins-base1.0-1.4.3/po/sv.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/sv.po 2015-10-30 14:21:45.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gst-plugins-base 1.4.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" "PO-Revision-Date: 2014-07-19 16:23+0200\n" "Last-Translator: Sebastian Rasmussen \n" "Language-Team: Swedish \n" @@ -80,12 +80,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Saknar elementet \"%s\" - kontrollera din GStreamer-installation." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "" -"En %s-insticksmodul krävs för att spela upp den här strömmen men är inte " -"installerad." - msgid "Could not determine type of stream" msgstr "Kunde inte fastställa typ av ström" @@ -519,12 +513,99 @@ "Avsluta inte efter att den inledande enhetslistan visats, utan vänta på att " "enheter läggs till/tas bort." +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Volym" + msgid "Buffering..." msgstr "Buffrar..." msgid "Clock lost, selecting a new one\n" msgstr "Klocka förlorad, väljer en ny\n" +msgid "Reached end of play list." +msgstr "" + +msgid "Paused" +msgstr "" + +#, c-format +msgid "Now playing %s\n" +msgstr "" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "" + +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Kunde inte öppna enheten för uppspelning i stereoläge." + +msgid "space" +msgstr "" + +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Volym" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" +msgstr "" + +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Den här cd-skivan saknar ljudspår" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Undertextformatet Kate" + +msgid "show keyboard shortcuts" +msgstr "" + +#, fuzzy +msgid "Interactive mode - keyboard controls:" +msgstr "Interaktiv styrning via tangentbord" + msgid "Video sink to use (default is autovideosink)" msgstr "Videoutgång som ska användas (standard är autovideosink)" @@ -537,7 +618,8 @@ msgid "Shuffle playlist" msgstr "Blanda spellista" -msgid "Interactive control via keyboard" +#, fuzzy +msgid "Disable interactive control via the keyboard" msgstr "Interaktiv styrning via tangentbord" msgid "Volume" @@ -546,9 +628,20 @@ msgid "Playlist file containing input media files" msgstr "Fil med spellista innehållandes inkommande mediafiler" +msgid "Do not print any output (apart from errors)" +msgstr "" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Användning: %s FIL1|URI1 [FIL2|URI2] [FIL3|URI3] ..." msgid "You must provide at least one filename or URI to play." msgstr "Du måste ange åtminstone ett filnamn eller en URI att spela." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "" +#~ "En %s-insticksmodul krävs för att spela upp den här strömmen men är inte " +#~ "installerad." Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/tr.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/tr.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/tr.po gst-plugins-base1.0-1.6.1/po/tr.po --- gst-plugins-base1.0-1.4.3/po/tr.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/tr.po 2015-10-30 14:21:45.000000000 +0000 @@ -1,19 +1,22 @@ # translation of gst-plugins-base-1.0.3.po to Turkish # This file is put in the public domain. +# This file is distributed under the same license as the gst-plugins-base package. # Server Acim , 2010. -# Server Acim , 2013. +# Server Acim , 2013, 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.0.3\n" +"Project-Id-Version: gst-plugins-base 1.4.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2013-03-10 12:46+0200\n" -"Last-Translator: Server Acim \n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-01-10 21:07+0100\n" +"Last-Translator: Volkan Gezer \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 1.5\n" msgid "Could not open device for playback in mono mode." msgstr "Mono kipte çalmak için aygıt açılamıyor." @@ -36,7 +39,7 @@ msgstr "Aygıtı çalma için açamıyor." msgid "Error outputting to audio device. The device has been disconnected." -msgstr "" +msgstr "Ses aygıtına çıktı gönderilirken hata. Aygıt bağlantısı kesildi." msgid "Could not open device for recording in mono mode." msgstr "Mono kipte kaydetmek için aygıtı açamıyor." @@ -59,7 +62,7 @@ msgstr "Kayıt için ses aygıtı açılamıyor." msgid "Error recording from audio device. The device has been disconnected." -msgstr "" +msgstr "Ses aygıtından kayıt sırasında hata. Aygıt bağlantısı kesildi." msgid "Could not open CD device for reading." msgstr "Okumak için CD aygıtı açılamıyor." @@ -77,19 +80,14 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Kayıp öğe '%s' - GStreamer kurulumunu denetleyin." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Bir %s eklenti bu akışı çalmak için gerekli, fakat kurulu değil." - msgid "Could not determine type of stream" msgstr "Akışın türü belirlenemiyor" msgid "This appears to be a text file" msgstr "Bu bir metin dosyasına benziyor" -#, fuzzy msgid "Could not create \"uridecodebin\" element." -msgstr "\"decodebin\" öğesi oluşturulamıyor." +msgstr "\"uridecodebin\" ögesi oluşturulamıyor." #, c-format msgid "Both autovideosink and %s elements are missing." @@ -201,7 +199,7 @@ msgstr "Çalıştırma-uzunluğu kodlaması" msgid "Timed Text" -msgstr "" +msgstr "Zamanlanmış Metin" msgid "Subtitle" msgstr "Altyazı" @@ -230,25 +228,25 @@ msgid "Uncompressed gray" msgstr "Sıkıştırılmamış gri resim" -#, fuzzy, c-format +#, c-format msgid "Uncompressed packed YUV %s" -msgstr "Sıkıştırılmamış paket YUV 4:2:2" +msgstr "Sıkıştırılmamış paket YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed semi-planar YUV %s" -msgstr "Sıkıştırılmamış planar YUV 4:2:0" +msgstr "Sıkıştırılmamış yarı düzlem YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed planar YUV %s" -msgstr "Sıkıştırılmamış planar YUV 4:2:0" +msgstr "Sıkıştırılmamış düzlem YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed palettized %d-bit %s" -msgstr "Şıkıştırılmamış ses seviyesi %s%d-bit %s" +msgstr "Sıkıştırılmamış paletlenmiş %d-bit %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed %d-bit %s" -msgstr "Şıkıştırılmamış ses seviyesi %s%d-bit %s" +msgstr "Şıkıştırılmamış %d-bit %s" #, c-format msgid "DivX MPEG-4 Version %d" @@ -500,53 +498,152 @@ msgstr "ayrıştırılmamış id3v2 etiket çerçevesi" msgid "musical-key" -msgstr "" +msgstr "müzik anahtarı" msgid "Initial key in which the sound starts" -msgstr "" +msgstr "Sesin başladığı başlangıç anahtarı" msgid "Print version information and exit" -msgstr "" +msgstr "Sürüm bilgisini yaz ve çık" msgid "" "Don't exit after showing the initial device list, but wait for devices to " "added/removed." msgstr "" +"Başlangıç aygıt listesini gösterdikten sonra kapanma, eklenecek/çıkartılacak " +"aygıtları bekle." + +#, fuzzy, c-format +msgid "Volume: %.0f%%" +msgstr "Ses" msgid "Buffering..." -msgstr "" +msgstr "Tampon belleğe alınıyor..." msgid "Clock lost, selecting a new one\n" +msgstr "Saat kayboldu, yenisi seçiliyor\n" + +msgid "Reached end of play list." msgstr "" -msgid "Video sink to use (default is autovideosink)" +msgid "Paused" msgstr "" -msgid "Audio sink to use (default is autoaudiosink)" +#, c-format +msgid "Now playing %s\n" msgstr "" -msgid "Enable gapless playback" +#, c-format +msgid "About to finish, preparing next title: %s" msgstr "" -msgid "Shuffle playlist" +#, c-format +msgid "Playback rate: %.2f" msgstr "" -msgid "Interactive control via keyboard" +#, fuzzy, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Stereo kipte çalmak için aygıt açılamıyor." + +msgid "space" msgstr "" -msgid "Volume" +msgid "pause/unpause" +msgstr "" + +msgid "q or ESC" +msgstr "" + +msgid "quit" +msgstr "" + +msgid "play next" +msgstr "" + +msgid "play previous" +msgstr "" + +msgid "seek forward" +msgstr "" + +msgid "seek backward" +msgstr "" + +#, fuzzy +msgid "volume up" +msgstr "Ses" + +msgid "volume down" +msgstr "" + +msgid "increase playback rate" +msgstr "" + +msgid "decrease playback rate" msgstr "" +msgid "change playback direction" +msgstr "" + +msgid "enable/disable trick modes" +msgstr "" + +#, fuzzy +msgid "change audio track" +msgstr "Bu CD hiç ses izi içermiyor" + +msgid "change video track" +msgstr "" + +#, fuzzy +msgid "change subtitle track" +msgstr "Kate altyazı kipi" + +msgid "show keyboard shortcuts" +msgstr "" + +#, fuzzy +msgid "Interactive mode - keyboard controls:" +msgstr "Klavye ile etkileşimli kontrol" + +msgid "Video sink to use (default is autovideosink)" +msgstr "Kullanılacak video alıcı (varsayılan autovideosink)" + +msgid "Audio sink to use (default is autoaudiosink)" +msgstr "Kullanılacak ses alıcı (varsayılan autoaudiosink)" + +msgid "Enable gapless playback" +msgstr "Aralıksız çalmayı etkinleştir" + +msgid "Shuffle playlist" +msgstr "Çalma listesini karıştır" + +#, fuzzy +msgid "Disable interactive control via the keyboard" +msgstr "Klavye ile etkileşimli kontrol" + +msgid "Volume" +msgstr "Ses" + msgid "Playlist file containing input media files" +msgstr "Çalma listesi dosyası girdi medya dosyaları içeriyor" + +msgid "Do not print any output (apart from errors)" msgstr "" #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." -msgstr "" +msgstr "Kullanım: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgid "You must provide at least one filename or URI to play." +msgstr "Çalmak için en azından bir dosya adı veya URI sağlamalısınız." + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" msgstr "" +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "Bir %s eklenti bu akışı çalmak için gerekli, fakat kurulu değil." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Sıkıştırılmamış %s YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/uk.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/uk.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/uk.po gst-plugins-base1.0-1.6.1/po/uk.po --- gst-plugins-base1.0-1.4.3/po/uk.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/uk.po 2015-10-30 14:21:45.000000000 +0000 @@ -3,13 +3,13 @@ # This file is distributed under the same license as the gst-plugins-base package. # # Maxim V. Dziumanenko , 2004-2007. -# Yuri Chornoivan , 2010, 2011, 2012, 2013, 2014. +# Yuri Chornoivan , 2010, 2011, 2012, 2013, 2014, 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-21 14:23+0300\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-06-26 07:35+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -86,10 +86,6 @@ msgstr "" "Відсутній елемент «%s». Перевірте, чи встановлено GStreamer належним чином." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Для відтворення потоку потрібен модуль %s, але він не встановлений." - msgid "Could not determine type of stream" msgstr "Не вдалося визначити тип даних потоку" @@ -535,12 +531,95 @@ "Не завершувати роботу після показу початкового списку пристроїв, чекати на " "додавання або вилучення пристроїв." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Гучність: %.0f%%" + msgid "Buffering..." msgstr "Буферизація…" msgid "Clock lost, selecting a new one\n" msgstr "Доступ до годинника втрачено, вибираємо новий\n" +msgid "Reached end of play list." +msgstr "Відтворення списку завершено." + +msgid "Paused" +msgstr "Призупинено" + +#, c-format +msgid "Now playing %s\n" +msgstr "Відтворюється %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Майже завершили, готуємо наступну композицію: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Частота відтворення: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Не вдалося змінити частоту відтворення на %.2f" + +msgid "space" +msgstr "пробіл" + +msgid "pause/unpause" +msgstr "призупинити/поновити" + +msgid "q or ESC" +msgstr "q або ESC" + +msgid "quit" +msgstr "вийти" + +msgid "play next" +msgstr "наступна" + +msgid "play previous" +msgstr "попередня" + +msgid "seek forward" +msgstr "до кінця" + +msgid "seek backward" +msgstr "до початку" + +msgid "volume up" +msgstr "гучніше" + +msgid "volume down" +msgstr "тихіше" + +msgid "increase playback rate" +msgstr "збільшити частоту відтворення" + +msgid "decrease playback rate" +msgstr "зменшити частоту відтворення" + +msgid "change playback direction" +msgstr "змінити напрям відтворення" + +msgid "enable/disable trick modes" +msgstr "увімкнути або вимкнути особливі режими" + +msgid "change audio track" +msgstr "змінити звукову доріжку" + +msgid "change video track" +msgstr "змінити відеодоріжку" + +msgid "change subtitle track" +msgstr "змінити доріжку субтитрів" + +msgid "show keyboard shortcuts" +msgstr "показати клавіатурні скорочення" + +msgid "Interactive mode - keyboard controls:" +msgstr "Інтерактивне керування за допомогою клавіатури:" + msgid "Video sink to use (default is autovideosink)" msgstr "Приймач відеоданих, яким слід скористатися (типовим є autovideosink)" @@ -553,8 +632,8 @@ msgid "Shuffle playlist" msgstr "Перемішати список відтворення" -msgid "Interactive control via keyboard" -msgstr "Інтерактивне керування за допомогою клавіатури" +msgid "Disable interactive control via the keyboard" +msgstr "Вимкнути інтерактивне керування за допомогою клавіатури" msgid "Volume" msgstr "Гучність" @@ -562,6 +641,9 @@ msgid "Playlist file containing input media files" msgstr "Файл списку відтворення, що містить мультимедійні файли вхідних даних" +msgid "Do not print any output (apart from errors)" +msgstr "Не виводити повідомлень (окрім повідомлень щодо помилок)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." msgstr "Користування: %s ФАЙЛ1|АДРЕСА1 [ФАЙЛ2|АДРЕСА2] [ФАЙЛ3|АДРЕСА3] ..." @@ -570,6 +652,12 @@ msgstr "" "Вам слід вказати принаймні одну назву файла або адресу для відтворення." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Натисніть «k», щоб переглянути список клавіатурних скорочень.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "Для відтворення потоку потрібен модуль %s, але він не встановлений." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "Нестиснене %s, YUV %s" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/vi.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/vi.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/vi.po gst-plugins-base1.0-1.6.1/po/vi.po --- gst-plugins-base1.0-1.4.3/po/vi.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/vi.po 2015-10-30 14:21:45.000000000 +0000 @@ -1,16 +1,16 @@ # Vietnamese Translation for GST Plugins Base. # Bản dịch tiếng Việt dành cho GST Plugins Base. -# Copyright © 2014 Free Software Foundation, Inc. +# Copyright © 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gst-plugins-base package. # Clytie Siddall , 2005-2010. -# Trần Ngọc Quân , 2012-2014. +# Trần Ngọc Quân , 2012-2014, 2015. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 1.4.0\n" +"Project-Id-Version: gst-plugins-base 1.5.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2014-07-23 15:56+0700\n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-08-23 15:58+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -19,10 +19,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Language-Team-Website: \n" -"X-Generator: LocFactoryEditor 1.8\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-Language: Vietnamese\n" -"X-Poedit-Country: VIET NAM\n" +"X-Generator: Gtranslator 2.91.7\n" msgid "Could not open device for playback in mono mode." msgstr "Không thể mở thiết bị để phát lại trong chế độ đơn kênh." @@ -85,10 +82,6 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "Thiếu phần tử “%s” — hãy kiểm tra lại phần cài đặt GStreamer." -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "Cần phần bổ sung %s để phát luồng này nhưng chưa cài đặt." - msgid "Could not determine type of stream" msgstr "Không thể xác định kiểu của luồng dữ liệu" @@ -208,7 +201,7 @@ msgstr "MSZH không mất gì (Lossless MSZH)" msgid "Run-length encoding" -msgstr "Mã hoá độ dài chạy (Run-Length Encoding: RLE)" +msgstr "Mã hóa độ dài chạy (Run-Length Encoding: RLE)" msgid "Timed Text" msgstr "Chữ được định thời" @@ -328,7 +321,7 @@ #, c-format msgid "%s encoder" -msgstr "bộ mã hoá %s" +msgstr "bộ mã hóa %s" #, c-format msgid "GStreamer element %s" @@ -347,7 +340,7 @@ msgstr "Không rõ phần tử giải mã" msgid "Unknown encoder element" -msgstr "Không rõ phần tử mã hoá" +msgstr "Không rõ phần tử mã hóa" msgid "Plugin or element of unknown type" msgstr "Không rõ kiểu của phần bổ sung hay phần tử" @@ -530,12 +523,95 @@ "Không tồn tại sau khi hiển thị danh sách thiết bị khởi tạo, nhưng lại chờ " "cho thiết bị thêm/xóa." +#, c-format +msgid "Volume: %.0f%%" +msgstr "Âm lượng: %.0f%%" + msgid "Buffering..." -msgstr "Đang đệm..." +msgstr "Đang đệm…" msgid "Clock lost, selecting a new one\n" msgstr "Mất đồng hồ, chọn một cái mới\n" +msgid "Reached end of play list." +msgstr "Đã tìm đến cuối danh sách phát." + +msgid "Paused" +msgstr "Đã tạm dừng" + +#, c-format +msgid "Now playing %s\n" +msgstr "Đang phát %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "Gần xong, đang chuẩn bị tiêu đề kế: %s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "Tốc độ phát lại: %.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "Không thể đổi tốc độ phát lại thành %.2f" + +msgid "space" +msgstr "dấu cách" + +msgid "pause/unpause" +msgstr "dừng/thôi dừng" + +msgid "q or ESC" +msgstr "q hay ESC" + +msgid "quit" +msgstr "thoát" + +msgid "play next" +msgstr "phát kế" + +msgid "play previous" +msgstr "phát kế trước" + +msgid "seek forward" +msgstr "di chuyển tiếp" + +msgid "seek backward" +msgstr "di chuyển ngược" + +msgid "volume up" +msgstr "tăng âm lượng" + +msgid "volume down" +msgstr "giảm âm lượng" + +msgid "increase playback rate" +msgstr "tăng tốc độ phát lại" + +msgid "decrease playback rate" +msgstr "giảm tốc độ phát lại" + +msgid "change playback direction" +msgstr "thay đổi hướng phát lại" + +msgid "enable/disable trick modes" +msgstr "bật/tắt chế độ thủ thuật" + +msgid "change audio track" +msgstr "đổi rãnh âm thanh" + +msgid "change video track" +msgstr "đổi rãnh phim" + +msgid "change subtitle track" +msgstr "đổi phụ đề rãnh" + +msgid "show keyboard shortcuts" +msgstr "hiện phím tắt" + +msgid "Interactive mode - keyboard controls:" +msgstr "Chế độ tương tác - điều khiển thông qua bàn phím:" + msgid "Video sink to use (default is autovideosink)" msgstr "Bộ chứa video được dùng (mặc định là autovideosink)" @@ -548,8 +624,8 @@ msgid "Shuffle playlist" msgstr "Xáo trộn danh sách phát" -msgid "Interactive control via keyboard" -msgstr "Điều khiển tương tác thông qua bàn phím" +msgid "Disable interactive control via the keyboard" +msgstr "Tắt điều khiển tương tác thông qua bàn phím" msgid "Volume" msgstr "Âm lượng" @@ -557,13 +633,22 @@ msgid "Playlist file containing input media files" msgstr "Tập tin danh sách phát có chứa các tập tin đa phương tiện đầu vào" +msgid "Do not print any output (apart from errors)" +msgstr "Đừng in bất kỳ cái gì ra (lấy riêng từ lỗi)" + #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." -msgstr "Cách dùng: %s TẬP-TIN1|URI1 [TẬP-TIN2|URI2] [TẬP-TIN3|URI3] ..." +msgstr "Cách dùng: %s TẬP-TIN1|URI1 [TẬP-TIN2|URI2] [TẬP-TIN3|URI3] …" msgid "You must provide at least one filename or URI to play." msgstr "Bạn phải cung cấp ít nhất là một tên tập tin hay URI để phát." +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "Nhấn phím “k” để xem toàn bộ phím tắt.\n" + +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "Cần phần bổ sung %s để phát luồng này nhưng chưa cài đặt." + #~ msgid "Uncompressed %s YUV %s" #~ msgstr "%s YUV %s không nén" Binary files /tmp/tmpfPZ8W6/qsFbyI4Kth/gst-plugins-base1.0-1.4.3/po/zh_CN.gmo and /tmp/tmpfPZ8W6/jYJks2PfuM/gst-plugins-base1.0-1.6.1/po/zh_CN.gmo differ diff -Nru gst-plugins-base1.0-1.4.3/po/zh_CN.po gst-plugins-base1.0-1.6.1/po/zh_CN.po --- gst-plugins-base1.0-1.4.3/po/zh_CN.po 2014-09-24 08:19:18.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/po/zh_CN.po 2015-10-30 12:26:20.000000000 +0000 @@ -2,18 +2,20 @@ # This file is put in the public domain. # Funda Wang , 2005. # Ji ZhengYu , 2008. +# zwpwjwtz , 2015. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-base 0.10.21.3\n" +"Project-Id-Version: gst-plugins-base 1.6.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2014-09-24 11:19+0300\n" -"PO-Revision-Date: 2009-01-14 12:41+0800\n" -"Last-Translator: Ji ZhengYu \n" +"POT-Creation-Date: 2015-10-30 14:26+0200\n" +"PO-Revision-Date: 2015-10-16 19:29+0800\n" +"Last-Translator: Tianze Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" msgid "Could not open device for playback in mono mode." msgstr "无法在单声道模式打开设备播放。" @@ -34,7 +36,7 @@ msgstr "无法打开音频设备播放。" msgid "Error outputting to audio device. The device has been disconnected." -msgstr "" +msgstr "输出到音频设备错误。设备已断开连接。" msgid "Could not open device for recording in mono mode." msgstr "无法在单声道模式打开设备录音。" @@ -55,7 +57,7 @@ msgstr "无法打开音频设备录音。" msgid "Error recording from audio device. The device has been disconnected." -msgstr "" +msgstr "从音频设备输入错误。设备已断开连接。" msgid "Could not open CD device for reading." msgstr "无法打开 CD 设备读取。" @@ -73,70 +75,59 @@ msgid "Missing element '%s' - check your GStreamer installation." msgstr "未找到组件‘%s’-请检查您的 GStreamer 安装情况。" -#, c-format -msgid "A %s plugin is required to play this stream, but not installed." -msgstr "播放此数据流需要 %s 插件,但它未安装。" - -#, fuzzy msgid "Could not determine type of stream" -msgstr "无法创建“typefind”组件。" +msgstr "无法确定流的类型" msgid "This appears to be a text file" msgstr "此文件是个文本文件" -#, fuzzy msgid "Could not create \"uridecodebin\" element." -msgstr "无法创建“decodebin”组件。" +msgstr "无法创建“uridecodebin”组件。" -#, fuzzy, c-format +#, c-format msgid "Both autovideosink and %s elements are missing." -msgstr "autovideosink 和 xvimagesink 组件都缺少。" +msgstr "缺少 autovideosink 和 %s 组件。" -#, fuzzy msgid "The autovideosink element is missing." -msgstr "autovideosink 和 xvimagesink 组件都缺少。" +msgstr "缺少 autovideosink 组件。" #, c-format msgid "Configured videosink %s is not working." -msgstr "" +msgstr "配置后的 videosink %s 无法工作。" -#, fuzzy, c-format +#, c-format msgid "Both autovideosink and %s elements are not working." -msgstr "autovideosink 和 xvimagesink 组件都缺少。" +msgstr "autovideosink 和 %s 组件都无法工作。" -#, fuzzy msgid "The autovideosink element is not working." -msgstr "autovideosink 和 xvimagesink 组件都缺少。" +msgstr "autovideosink 组件无法工作。" msgid "Custom text sink element is not usable." -msgstr "" +msgstr "自定义文字汇组件不可用。" msgid "No volume control found" msgstr "未找到音量控制" -#, fuzzy, c-format +#, c-format msgid "Both autoaudiosink and %s elements are missing." -msgstr "autovideosink 和 alsasink 组件都缺少。" +msgstr "缺少 autovideosink 和 %s 组件。" -#, fuzzy msgid "The autoaudiosink element is missing." -msgstr "autovideosink 和 alsasink 组件都缺少。" +msgstr "缺少 autovideosink 组件。" #, c-format msgid "Configured audiosink %s is not working." -msgstr "" +msgstr "配置后的 audiosink %s 无法工作。" -#, fuzzy, c-format +#, c-format msgid "Both autoaudiosink and %s elements are not working." -msgstr "autovideosink 和 alsasink 组件都缺少。" +msgstr "autovideosink 和 %s 组件都无法工作。" -#, fuzzy msgid "The autoaudiosink element is not working." -msgstr "autovideosink 和 alsasink 组件都缺少。" +msgstr "autovideosink 组件无法工作。" -#, fuzzy msgid "Can't play a text file without video or visualizations." -msgstr "无法播放不带视频的文本文件。" +msgstr "无法播放不带视频或可视化效果的文本文件。" #, c-format msgid "No decoder available for type '%s'." @@ -203,22 +194,19 @@ msgstr "Run-length 编码" msgid "Timed Text" -msgstr "" +msgstr "定时文本" msgid "Subtitle" -msgstr "" +msgstr "字幕" -#, fuzzy msgid "MPL2 subtitle format" -msgstr "TMPlayer 字幕格式" +msgstr "MPL2 字幕格式" -#, fuzzy msgid "DKS subtitle format" -msgstr "Sami 字幕格式" +msgstr "DKS 字幕格式" -#, fuzzy msgid "QTtext subtitle format" -msgstr "Kate 字幕格式" +msgstr "QTtext 字幕格式" msgid "Sami subtitle format" msgstr "Sami 字幕格式" @@ -229,45 +217,42 @@ msgid "Kate subtitle format" msgstr "Kate 字幕格式" -#, fuzzy msgid "Uncompressed video" -msgstr "未压缩的 YUV" +msgstr "未压缩的视频" -#, fuzzy msgid "Uncompressed gray" msgstr "未压缩的灰度图像" -#, fuzzy, c-format +#, c-format msgid "Uncompressed packed YUV %s" -msgstr "未压缩的 packed YUV 4:2:2" +msgstr "未压缩的紧缩 YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed semi-planar YUV %s" -msgstr "未压缩的 planar YUV 4:2:0" +msgstr "未压缩的半平面 YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed planar YUV %s" -msgstr "未压缩的 planar YUV 4:2:0" +msgstr "未压缩的平面 YUV %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed palettized %d-bit %s" -msgstr "未压缩的 palettized %d-位 %s" +msgstr "未压缩的调色板映射 %d位 %s" -#, fuzzy, c-format +#, c-format msgid "Uncompressed %d-bit %s" -msgstr "未压缩的 palettized %d-位 %s" +msgstr "未压缩的 %d位 %s" #, c-format msgid "DivX MPEG-4 Version %d" -msgstr "DivX MPEG-4 版本 %d" +msgstr "DivX MPEG-4 第 %d 版" -#, fuzzy msgid "Uncompressed audio" -msgstr "未压缩的 YUV" +msgstr "未压缩的音频" -#, fuzzy, c-format +#, c-format msgid "Raw %d-bit %s audio" -msgstr "原始 %d-位 PCM 音频" +msgstr "原始 %d位 %s 音频" msgid "Audio CD source" msgstr "音频 CD 源" @@ -285,15 +270,15 @@ msgid "%s protocol source" msgstr "%s 协议源" -#, fuzzy, c-format +#, c-format msgid "%s video RTP depayloader" msgstr "%s 视频 RTP 去负载器" -#, fuzzy, c-format +#, c-format msgid "%s audio RTP depayloader" msgstr "%s 音频 RTP 去负载器" -#, fuzzy, c-format +#, c-format msgid "%s RTP depayloader" msgstr "%s RTP 去负载器" @@ -333,7 +318,7 @@ msgstr "未知源组件" msgid "Unknown sink element" -msgstr "未知消音组件" +msgstr "未知的汇组件" msgid "Unknown element" msgstr "未知组件" @@ -381,179 +366,268 @@ msgstr "MusicBrainz TRM ID" msgid "capturing shutter speed" -msgstr "" +msgstr "捕捉快门速度" msgid "Shutter speed used when capturing an image, in seconds" -msgstr "" +msgstr "用于捕捉图像的快门速度,单位为秒" msgid "capturing focal ratio" -msgstr "" +msgstr "捕捉焦比" msgid "Focal ratio (f-number) used when capturing the image" -msgstr "" +msgstr "捕捉图像时的焦比(f值)" msgid "capturing focal length" -msgstr "" +msgstr "捕捉焦距" msgid "Focal length of the lens used capturing the image, in mm" -msgstr "" +msgstr "(在mm中)捕捉图像时的焦距" msgid "capturing digital zoom ratio" -msgstr "" +msgstr "捕捉数码变焦比" msgid "Digital zoom ratio used when capturing an image" -msgstr "" +msgstr "捕捉图像时的数码变焦比" msgid "capturing iso speed" -msgstr "" +msgstr "捕捉ISO感光度" msgid "The ISO speed used when capturing an image" -msgstr "" +msgstr "捕捉图像时使用的ISO感光度" msgid "capturing exposure program" -msgstr "" +msgstr "捕捉曝光程序" msgid "The exposure program used when capturing an image" -msgstr "" +msgstr "用于捕捉图像的曝光程序" msgid "capturing exposure mode" -msgstr "" +msgstr "捕捉曝光模式" msgid "The exposure mode used when capturing an image" -msgstr "" +msgstr "捕捉图像时使用的曝光模式" msgid "capturing exposure compensation" -msgstr "" +msgstr "捕捉曝光补偿" msgid "The exposure compensation used when capturing an image" -msgstr "" +msgstr "捕捉图像时使用的曝光补偿值" msgid "capturing scene capture type" -msgstr "" +msgstr "捕捉场景模式" msgid "The scene capture mode used when capturing an image" -msgstr "" +msgstr "用于捕捉图像的场景模式" msgid "capturing gain adjustment" -msgstr "" +msgstr "捕捉增益调节" msgid "The overall gain adjustment applied on an image" -msgstr "" +msgstr "调整应用于图像的总体增益" msgid "capturing white balance" -msgstr "" +msgstr "捕捉白平衡" msgid "The white balance mode set when capturing an image" -msgstr "" +msgstr "捕捉图像时的白平衡" msgid "capturing contrast" -msgstr "" +msgstr "捕捉对比度" msgid "The direction of contrast processing applied when capturing an image" -msgstr "" +msgstr "捕捉图像时所使用的对比度" msgid "capturing saturation" -msgstr "" +msgstr "捕捉饱和度" msgid "The direction of saturation processing applied when capturing an image" -msgstr "" +msgstr "捕捉图像时所使用的饱和度" msgid "capturing sharpness" -msgstr "" +msgstr "捕捉锐度" msgid "The direction of sharpness processing applied when capturing an image" -msgstr "" +msgstr "捕捉图像时所使用的锐度" msgid "capturing flash fired" -msgstr "" +msgstr "捕捉闪光灯" msgid "If the flash fired while capturing an image" -msgstr "" +msgstr "设定在捕捉图像时是否使用闪光灯补光" msgid "capturing flash mode" -msgstr "" +msgstr "捕捉闪光模式" msgid "The selected flash mode while capturing an image" -msgstr "" +msgstr "捕捉图像时使用的闪光模式" msgid "capturing metering mode" -msgstr "" +msgstr "捕捉测光" msgid "" "The metering mode used while determining exposure for capturing an image" -msgstr "" +msgstr "用于确定要捕捉图像的曝光度的测光模式" msgid "capturing source" -msgstr "" +msgstr "捕捉源" msgid "The source or type of device used for the capture" -msgstr "" +msgstr "指定用于捕捉的源或设备类型" msgid "image horizontal ppi" -msgstr "" +msgstr "图像横向ppi" msgid "Media (image/video) intended horizontal pixel density in ppi" -msgstr "" +msgstr "指定媒体(图片/视频)的横向像素密度,单位是ppi" msgid "image vertical ppi" -msgstr "" +msgstr "图像纵向ppi" msgid "Media (image/video) intended vertical pixel density in ppi" -msgstr "" +msgstr "指定媒体(图片/视频)的纵向像素密度,单位是ppi" msgid "ID3v2 frame" -msgstr "" +msgstr "ID3v2 帧" msgid "unparsed id3v2 tag frame" -msgstr "" +msgstr "未被解析的 ID3v2 标识帧" msgid "musical-key" -msgstr "" +msgstr "音调" msgid "Initial key in which the sound starts" -msgstr "" +msgstr "音乐开始时的音调" msgid "Print version information and exit" -msgstr "" +msgstr "显示版本信息,然后退出。" msgid "" "Don't exit after showing the initial device list, but wait for devices to " "added/removed." -msgstr "" +msgstr "显示初始设备列表后不退出,而是等待设备被添加或移除。" + +#, c-format +msgid "Volume: %.0f%%" +msgstr "音量:%.0f%%" msgid "Buffering..." -msgstr "" +msgstr "缓冲中..." msgid "Clock lost, selecting a new one\n" -msgstr "" +msgstr "时钟已丢失,请选择一个新的\n" + +msgid "Reached end of play list." +msgstr "到达播放列表结尾。" + +msgid "Paused" +msgstr "已暂停" + +#, c-format +msgid "Now playing %s\n" +msgstr "正在播放 %s\n" + +#, c-format +msgid "About to finish, preparing next title: %s" +msgstr "即将结束,准备下一标题:%s" + +#, c-format +msgid "Playback rate: %.2f" +msgstr "回放速率:%.2f" + +#, c-format +msgid "Could not change playback rate to %.2f" +msgstr "无法将回放速率改变为%.2f" + +msgid "space" +msgstr "空格" + +msgid "pause/unpause" +msgstr "暂停/继续" + +msgid "q or ESC" +msgstr "q 或 ESC" + +msgid "quit" +msgstr "退出" + +msgid "play next" +msgstr "下一曲" + +msgid "play previous" +msgstr "上一曲" + +msgid "seek forward" +msgstr "前进" + +msgid "seek backward" +msgstr "后退" + +msgid "volume up" +msgstr "增大音量" + +msgid "volume down" +msgstr "减小音量" + +msgid "increase playback rate" +msgstr "增大回放速率" + +msgid "decrease playback rate" +msgstr "减小回访率" + +msgid "change playback direction" +msgstr "改变回放方向" + +msgid "enable/disable trick modes" +msgstr "启用/禁用特效模式" + +msgid "change audio track" +msgstr "改变音频轨" + +msgid "change video track" +msgstr "改变视频轨" + +msgid "change subtitle track" +msgstr "改变字幕轨" + +msgid "show keyboard shortcuts" +msgstr "显示键盘快捷键" + +msgid "Interactive mode - keyboard controls:" +msgstr "交互模式 - 键盘控制:" msgid "Video sink to use (default is autovideosink)" -msgstr "" +msgstr "要使用的视频接收组件(默认为autovideosink)" msgid "Audio sink to use (default is autoaudiosink)" -msgstr "" +msgstr "要使用的音频接收组件(默认为autoaudiosink)" msgid "Enable gapless playback" -msgstr "" +msgstr "启用无缝回放" msgid "Shuffle playlist" -msgstr "" +msgstr "随机播放列表" -msgid "Interactive control via keyboard" -msgstr "" +msgid "Disable interactive control via the keyboard" +msgstr "禁用键盘交互操作" msgid "Volume" -msgstr "" +msgstr "音量" msgid "Playlist file containing input media files" -msgstr "" +msgstr "播放列表文件含有媒体文件" + +msgid "Do not print any output (apart from errors)" +msgstr "不显示任何输出(除了错误信息)" #, c-format msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..." -msgstr "" +msgstr "用法:%s [文件1|URI1] [文件2|URI2] [文件3|URI3] ..." msgid "You must provide at least one filename or URI to play." -msgstr "" +msgstr "你必须提供至少一个文件名或URI来播放。" + +msgid "Press 'k' to see a list of keyboard shortcuts.\n" +msgstr "按“k”键来显示键盘快捷键列表。\n" #~ msgid "Master" #~ msgstr "主音量" @@ -600,6 +674,9 @@ #~ msgid "Error while writing to file \"%s\"." #~ msgstr "写入文件“%s”时出错。" +#~ msgid "A %s plugin is required to play this stream, but not installed." +#~ msgstr "播放此数据流需要 %s 插件,但它未安装。" + #~ msgid "Invalid subtitle URI \"%s\", subtitles disabled." #~ msgstr "无效的字幕 URI “%s”,不使用字幕。" @@ -637,7 +714,6 @@ #~ msgid "Could not create \"queue2\" element." #~ msgstr "无法创建“queue2”组件。" -#, fuzzy #~ msgid "Error while sending gdp header data to \"%s:%d\"." #~ msgstr "发送 gdp 头部数据至“%s:%d”时出错。" @@ -648,25 +724,25 @@ #~ msgstr "拒绝连接至 %s:%d。" #~ msgid "Uncompressed planar YVU 4:2:0" -#~ msgstr "未压缩的 planar YVU 4:2:0" +#~ msgstr "未压缩的平面 YVU 4:2:0" #~ msgid "Uncompressed packed YUV 4:1:0" -#~ msgstr "未压缩的 packed YUV 4:1:0" +#~ msgstr "未压缩的紧缩 YUV 4:1:0" #~ msgid "Uncompressed packed YVU 4:1:0" -#~ msgstr "未压缩的 packed YVU 4:1:0" +#~ msgstr "未压缩的紧缩 YVU 4:1:0" #~ msgid "Uncompressed packed YUV 4:1:1" -#~ msgstr "未压缩的 packed YUV 4:1:1" +#~ msgstr "未压缩的紧缩 YUV 4:1:1" #~ msgid "Uncompressed packed YUV 4:4:4" -#~ msgstr "未压缩的 packed YUV 4:4:4" +#~ msgstr "未压缩的紧缩 YUV 4:4:4" #~ msgid "Uncompressed planar YUV 4:2:2" -#~ msgstr "未压缩的 planar YUV 4:2:2" +#~ msgstr "未压缩的平面 YUV 4:2:2" #~ msgid "Uncompressed planar YUV 4:1:1" -#~ msgstr "未压缩的 planar YUV 4:1:1" +#~ msgstr "未压缩的平面 YUV 4:1:1" #~ msgid "Uncompressed black and white Y-plane" #~ msgstr "未压缩的黑白 Y-plane" @@ -675,7 +751,7 @@ #~ msgstr "原始 PCM 音频" #~ msgid "Raw %d-bit floating-point audio" -#~ msgstr "原始 %d-位浮点音频" +#~ msgstr "原始 %d位浮点音频" #~ msgid "Raw floating-point audio" #~ msgstr "原始浮点音频" @@ -687,7 +763,31 @@ #~ msgstr "设备“%s”不存在。" #~ msgid "Device \"%s\" is already being used." -#~ msgstr "设备“%s”目前已被使用了。" +#~ msgstr "设备“%s”正被使用。" #~ msgid "Could not open device \"%s\" for reading and writing." #~ msgstr "无法打开设备“%s”读取。" + +#~ msgid "Uncompressed %s YUV %s" +#~ msgstr "未压缩的 %s YUV %s" + +#~ msgid "Both autovideosink and xvimagesink elements are missing." +#~ msgstr "缺少 autovideosink 和 xvimagesink 组件。" + +#~ msgid "Both autoaudiosink and alsasink elements are missing." +#~ msgstr "缺少 autovideosink 和 alsasink 组件。" + +#~ msgid "Could not create \"typefind\" element." +#~ msgstr "无法创建“typefind”组件。" + +#~ msgid "Can't display both text subtitles and subpictures." +#~ msgstr "无法同时播放文本格式的子标题和子画面。" + +#~ msgid "No Temp directory specified." +#~ msgstr "未指定临时设备。" + +#~ msgid "Could not create temp file \"%s\"." +#~ msgstr "无法创建临时文件“%s”。" + +#~ msgid "Internal data flow error." +#~ msgstr "内部数据流错误。" diff -Nru gst-plugins-base1.0-1.4.3/README gst-plugins-base1.0-1.6.1/README --- gst-plugins-base1.0-1.4.3/README 2014-07-21 08:22:55.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/README 2015-10-22 08:01:34.000000000 +0000 @@ -1,4 +1,4 @@ -GStreamer 1.3.x development series +GStreamer 1.5.x development series WHAT IT IS ---------- diff -Nru gst-plugins-base1.0-1.4.3/RELEASE gst-plugins-base1.0-1.6.1/RELEASE --- gst-plugins-base1.0-1.4.3/RELEASE 2014-09-24 08:18:39.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/RELEASE 2015-10-30 14:21:10.000000000 +0000 @@ -1,27 +1,20 @@ -Release notes for GStreamer Base Plugins 1.4.3 +Release notes for GStreamer Base Plugins 1.6.1 -The GStreamer team is pleased to announce a bugfix release of the stable -1.4 release series. The 1.4 release series is adding new features on top -of the 1.2 series and is part of the API and ABI-stable 1.x release -series of the GStreamer multimedia framework that contains new features. -The 1.4.x bugfix releases only contain important bugfixes compared to 1.4.0. +The GStreamer team is proud to announce the first bugfix release in the stable +1.6 release series of your favourite cross-platform multimedia framework! -Binaries for Android, iOS, Mac OS X and Windows are provided by the -GStreamer project for this release. -The 1.x series is a stable series targeted at end users. It is not API -or ABI compatible with the 0.10.x series. It can, however, be installed -in parallel with the 0.10.x series and will not affect an existing -0.10.x installation. +This release only contains bugfixes and it is safe to update from 1.6.0. For a +full list of bugfixes see Bugzilla. -The stable 1.4.x release series is API and ABI compatible with 1.0.x and -any other 1.x release series in the future. Compared to 1.0.x it contains -some new features and more intrusive changes that were considered too -risky as a bugfix. + +See http://gstreamer.freedesktop.org/releases/1.6/ +for the full release notes. + This module contains a set of reference plugins, base classes for other @@ -70,8 +63,16 @@ Bugs fixed in this release - * 736969 : queue2: dead lock when buffering - * 709868 : Keep still meaningfull pending events on FLUSH_STOP + * 752705 : rtpbuffer: Add map flag to skip padding + * 754459 : decodebin: fix event leak with validate.hls.playback.play_15s.hls_bibbop scenario + * 754567 : video: gst_video_calculate_display_ratio() should have out parameter + * 754980 : audiobasesink: audio skipping when playing it repeatedly. + * 755494 : gst-plugins-base fails to build with --with-pkg-config-path + * 755770 : decodebin: Free unlinked chains at time of switching chains + * 755867 : playsink: fix leak of audio sink + * 755875 : subparse: < / i > should be handled like < /i > + * 756611 : playbin: Leak of playbin on errors from the source element + * 756893 : video: Missing closing parenthesis in video overlay composition cast macros ==== Download ==== @@ -108,8 +109,15 @@ Contributors to this release - * Jan Schmidt - * Sanjay NM + * Guillaume Desmottes + * Matthew Waters + * Pavel Bludov + * Perry Hung + * Rajat Verma * Sebastian Dröge + * Stian Selnes * Tim-Philipp Müller + * Vineeth TM + * Wim Taymans + * eunhae choi   \ No newline at end of file diff -Nru gst-plugins-base1.0-1.4.3/sys/Makefile.in gst-plugins-base1.0-1.6.1/sys/Makefile.in --- gst-plugins-base1.0-1.4.3/sys/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -19,7 +19,17 @@ # descending into all subdirectories a second time, but only after the first # (parallel) run has finished, so it should go right through the second time. VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = sys ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -181,6 +189,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/parallel-subdirs.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -266,6 +276,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -295,6 +307,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -322,7 +336,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -337,6 +350,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -426,13 +440,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -485,6 +498,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -524,7 +538,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sys/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -533,7 +546,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/parallel-subdirs.mak: +$(top_srcdir)/common/parallel-subdirs.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -820,6 +833,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + .PHONY: independent-subdirs $(SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/Makefile.in gst-plugins-base1.0-1.6.1/sys/ximage/Makefile.in --- gst-plugins-base1.0-1.4.3/sys/ximage/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = sys/ximage -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -227,6 +236,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -287,6 +297,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -316,6 +328,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -343,7 +357,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -358,6 +371,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -447,13 +461,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -506,6 +519,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -546,7 +560,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/ximage/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sys/ximage/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -871,6 +884,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/ximage.c gst-plugins-base1.0-1.6.1/sys/ximage/ximage.c --- gst-plugins-base1.0-1.4.3/sys/ximage/ximage.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/ximage.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,20 +23,20 @@ #include "ximagesink.h" -GST_DEBUG_CATEGORY (gst_debug_ximagepool); -GST_DEBUG_CATEGORY (gst_debug_ximagesink); +GST_DEBUG_CATEGORY (gst_debug_x_image_pool); +GST_DEBUG_CATEGORY (gst_debug_x_image_sink); GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); static gboolean plugin_init (GstPlugin * plugin) { if (!gst_element_register (plugin, "ximagesink", - GST_RANK_SECONDARY, GST_TYPE_XIMAGESINK)) + GST_RANK_SECONDARY, GST_TYPE_X_IMAGE_SINK)) return FALSE; - GST_DEBUG_CATEGORY_INIT (gst_debug_ximagesink, "ximagesink", 0, + GST_DEBUG_CATEGORY_INIT (gst_debug_x_image_sink, "ximagesink", 0, "ximagesink element"); - GST_DEBUG_CATEGORY_INIT (gst_debug_ximagepool, "ximagepool", 0, + GST_DEBUG_CATEGORY_INIT (gst_debug_x_image_pool, "ximagepool", 0, "ximagepool object"); GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE"); diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/ximagepool.c gst-plugins-base1.0-1.6.1/sys/ximage/ximagepool.c --- gst-plugins-base1.0-1.4.3/sys/ximage/ximagepool.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/ximagepool.c 2015-10-22 08:01:34.000000000 +0000 @@ -32,19 +32,8 @@ #include #include -GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagepool); -#define GST_CAT_DEFAULT gst_debug_ximagepool - -struct _GstXImageBufferPoolPrivate -{ - GstCaps *caps; - GstVideoInfo info; - GstVideoAlignment align; - guint padded_width; - guint padded_height; - gboolean add_metavideo; - gboolean need_alignment; -}; +GST_DEBUG_CATEGORY_EXTERN (gst_debug_x_image_pool); +#define GST_CAT_DEFAULT gst_debug_x_image_pool /* X11 stuff */ static gboolean error_caught = FALSE; @@ -224,16 +213,14 @@ int (*handler) (Display *, XErrorEvent *); gboolean success = FALSE; GstXContext *xcontext; - gint width, height, align = 15, offset; - GstXImageBufferPoolPrivate *priv; + gint width, height, align, offset; GstXImageMemory *mem; - priv = xpool->priv; ximagesink = xpool->sink; xcontext = ximagesink->xcontext; - width = priv->padded_width; - height = priv->padded_height; + width = xpool->padded_width; + height = xpool->padded_height; mem = g_slice_new (GstXImageMemory); @@ -241,10 +228,10 @@ mem->SHMInfo.shmaddr = ((void *) -1); mem->SHMInfo.shmid = -1; #endif - mem->x = priv->align.padding_left; - mem->y = priv->align.padding_top; - mem->width = GST_VIDEO_INFO_WIDTH (&priv->info); - mem->height = GST_VIDEO_INFO_HEIGHT (&priv->info); + mem->x = xpool->align.padding_left; + mem->y = xpool->align.padding_top; + mem->width = GST_VIDEO_INFO_WIDTH (&xpool->info); + mem->height = GST_VIDEO_INFO_HEIGHT (&xpool->info); mem->sink = gst_object_ref (ximagesink); GST_DEBUG_OBJECT (ximagesink, "creating image %p (%dx%d)", mem, @@ -289,6 +276,7 @@ mem->size, width, mem->ximage->bytes_per_line); /* get shared memory */ + align = 0; mem->SHMInfo.shmid = shmget (IPC_PRIVATE, mem->size + align, IPC_CREAT | 0777); if (mem->SHMInfo.shmid == -1) @@ -343,6 +331,8 @@ allocsize = GST_ROUND_UP_4 (mem->ximage->bytes_per_line) * mem->ximage->height; + /* we want 16 byte aligned memory, g_malloc may only give 8 */ + align = 15; mem->ximage->data = g_malloc (allocsize + align); GST_LOG_OBJECT (ximagesink, "non-XShm image size is %" G_GSIZE_FORMAT " (alloced: %u), width %d, " @@ -429,7 +419,7 @@ /* This function checks that it is actually really possible to create an image using XShm */ gboolean -gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink, +gst_x_image_sink_check_xshm_calls (GstXImageSink * ximagesink, GstXContext * xcontext) { XImage *ximage; @@ -535,9 +525,6 @@ /* bufferpool */ static void gst_ximage_buffer_pool_finalize (GObject * object); -#define GST_XIMAGE_BUFFER_POOL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XIMAGE_BUFFER_POOL, GstXImageBufferPoolPrivate)) - #define gst_ximage_buffer_pool_parent_class parent_class G_DEFINE_TYPE (GstXImageBufferPool, gst_ximage_buffer_pool, GST_TYPE_BUFFER_POOL); @@ -556,11 +543,12 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) { GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool); - GstXImageBufferPoolPrivate *priv = xpool->priv; GstVideoInfo info; GstCaps *caps; + guint size, min_buffers, max_buffers; - if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL)) + if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers, + &max_buffers)) goto wrong_config; if (caps == NULL) @@ -574,44 +562,49 @@ caps); /* keep track of the width and height and caps */ - if (priv->caps) - gst_caps_unref (priv->caps); - priv->caps = gst_caps_ref (caps); + if (xpool->caps) + gst_caps_unref (xpool->caps); + xpool->caps = gst_caps_ref (caps); /* check for the configured metadata */ - priv->add_metavideo = + xpool->add_metavideo = gst_buffer_pool_config_has_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META); /* parse extra alignment info */ - priv->need_alignment = gst_buffer_pool_config_has_option (config, + xpool->need_alignment = gst_buffer_pool_config_has_option (config, GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); - if (priv->need_alignment) { - gst_buffer_pool_config_get_video_alignment (config, &priv->align); + if (xpool->need_alignment) { + gst_buffer_pool_config_get_video_alignment (config, &xpool->align); - GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top, - priv->align.padding_left, priv->align.padding_left, - priv->align.padding_bottom); + GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", xpool->align.padding_top, + xpool->align.padding_left, xpool->align.padding_left, + xpool->align.padding_bottom); /* do padding and alignment */ - gst_video_info_align (&info, &priv->align); + gst_video_info_align (&info, &xpool->align); + + gst_buffer_pool_config_set_video_alignment (config, &xpool->align); /* we need the video metadata too now */ - priv->add_metavideo = TRUE; + xpool->add_metavideo = TRUE; } else { - gst_video_alignment_reset (&priv->align); + gst_video_alignment_reset (&xpool->align); } /* add the padding */ - priv->padded_width = - GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left + - priv->align.padding_right; - priv->padded_height = - GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top + - priv->align.padding_bottom; + xpool->padded_width = + GST_VIDEO_INFO_WIDTH (&info) + xpool->align.padding_left + + xpool->align.padding_right; + xpool->padded_height = + GST_VIDEO_INFO_HEIGHT (&info) + xpool->align.padding_top + + xpool->align.padding_bottom; - priv->info = info; + xpool->info = info; + + gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers, + max_buffers); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); @@ -640,12 +633,11 @@ GstBufferPoolAcquireParams * params) { GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool); - GstXImageBufferPoolPrivate *priv = xpool->priv; GstVideoInfo *info; GstBuffer *ximage; GstMemory *mem; - info = &priv->info; + info = &xpool->info; ximage = gst_buffer_new (); mem = ximage_memory_alloc (xpool); @@ -655,7 +647,7 @@ } gst_buffer_append_memory (ximage, mem); - if (priv->add_metavideo) { + if (xpool->add_metavideo) { GST_DEBUG_OBJECT (pool, "adding GstVideoMeta"); /* these are just the defaults for now */ gst_buffer_add_video_meta_full (ximage, GST_VIDEO_FRAME_FLAG_NONE, @@ -680,7 +672,7 @@ { GstXImageBufferPool *pool; - g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL); + g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL); pool = g_object_new (GST_TYPE_XIMAGE_BUFFER_POOL, NULL); pool->sink = gst_object_ref (ximagesink); @@ -697,8 +689,6 @@ GObjectClass *gobject_class = (GObjectClass *) klass; GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass; - g_type_class_add_private (klass, sizeof (GstXImageBufferPoolPrivate)); - gobject_class->finalize = gst_ximage_buffer_pool_finalize; gstbufferpool_class->get_options = ximage_buffer_pool_get_options; @@ -709,19 +699,18 @@ static void gst_ximage_buffer_pool_init (GstXImageBufferPool * pool) { - pool->priv = GST_XIMAGE_BUFFER_POOL_GET_PRIVATE (pool); + /* nothing to do here */ } static void gst_ximage_buffer_pool_finalize (GObject * object) { GstXImageBufferPool *pool = GST_XIMAGE_BUFFER_POOL_CAST (object); - GstXImageBufferPoolPrivate *priv = pool->priv; GST_LOG_OBJECT (pool, "finalize XImage buffer pool %p", pool); - if (priv->caps) - gst_caps_unref (priv->caps); + if (pool->caps) + gst_caps_unref (pool->caps); gst_object_unref (pool->sink); gst_object_unref (pool->allocator); diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/ximagepool.h gst-plugins-base1.0-1.6.1/sys/ximage/ximagepool.h --- gst-plugins-base1.0-1.4.3/sys/ximage/ximagepool.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/ximagepool.h 2015-10-22 08:01:34.000000000 +0000 @@ -43,7 +43,6 @@ typedef struct _GstXImageBufferPool GstXImageBufferPool; typedef struct _GstXImageBufferPoolClass GstXImageBufferPoolClass; -typedef struct _GstXImageBufferPoolPrivate GstXImageBufferPoolPrivate; #include "ximagesink.h" @@ -88,7 +87,13 @@ GstXImageSink *sink; GstAllocator *allocator; - GstXImageBufferPoolPrivate *priv; + GstCaps *caps; + GstVideoInfo info; + GstVideoAlignment align; + guint padded_width; + guint padded_height; + gboolean add_metavideo; + gboolean need_alignment; }; struct _GstXImageBufferPoolClass @@ -100,7 +105,7 @@ GstBufferPool * gst_ximage_buffer_pool_new (GstXImageSink * ximagesink); -gboolean gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink, +gboolean gst_x_image_sink_check_xshm_calls (GstXImageSink * ximagesink, GstXContext * xcontext); G_END_DECLS diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/ximagesink.c gst-plugins-base1.0-1.6.1/sys/ximage/ximagesink.c --- gst-plugins-base1.0-1.4.3/sys/ximage/ximagesink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/ximagesink.c 2015-10-22 08:01:34.000000000 +0000 @@ -74,14 +74,14 @@ * * Examples * |[ - * gst-launch -v videotestsrc ! queue ! ximagesink + * gst-launch-1.0 -v videotestsrc ! queue ! ximagesink * ]| A pipeline to test reverse negotiation. When the test video signal appears * you can resize the window and see that scaled buffers of the desired size are * going to arrive with a short delay. This illustrates how buffers of desired * size are allocated along the way. If you take away the queue, scaling will * happen almost immediately. * |[ - * gst-launch -v videotestsrc ! navigationtest ! videoconvert ! ximagesink + * gst-launch-1.0 -v videotestsrc ! navigationtest ! videoconvert ! ximagesink * ]| A pipeline to test navigation events. * While moving the mouse pointer over the test signal you will see a black box * following the mouse pointer. If you press the mouse button somewhere on the @@ -89,7 +89,7 @@ * the button and a red one where you released it. (The navigationtest element * is part of gst-plugins-good.) * |[ - * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! videoscale ! ximagesink + * gst-launch-1.0 -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! videoscale ! ximagesink * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by * videotestsrc, in most cases the pixel aspect ratio of the display will be * 1/1. This means that videoscale will have to do the scaling to convert @@ -118,9 +118,9 @@ /* for XkbKeycodeToKeysym */ #include -GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink); +GST_DEBUG_CATEGORY_EXTERN (gst_debug_x_image_sink); GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); -#define GST_CAT_DEFAULT gst_debug_ximagesink +#define GST_CAT_DEFAULT gst_debug_x_image_sink typedef struct { @@ -134,11 +134,12 @@ #define MWM_HINTS_DECORATIONS (1L << 1) -static void gst_ximagesink_reset (GstXImageSink * ximagesink); -static void gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink); -static void gst_ximagesink_expose (GstVideoOverlay * overlay); +static void gst_x_image_sink_reset (GstXImageSink * ximagesink); +static void gst_x_image_sink_xwindow_update_geometry (GstXImageSink * + ximagesink); +static void gst_x_image_sink_expose (GstVideoOverlay * overlay); -static GstStaticPadTemplate gst_ximagesink_sink_template_factory = +static GstStaticPadTemplate gst_x_image_sink_sink_template_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, @@ -171,14 +172,15 @@ /* Object typing & Creation */ /* */ /* =========================================== */ -static void gst_ximagesink_navigation_init (GstNavigationInterface * iface); -static void gst_ximagesink_video_overlay_init (GstVideoOverlayInterface * +static void gst_x_image_sink_navigation_init (GstNavigationInterface * iface); +static void gst_x_image_sink_video_overlay_init (GstVideoOverlayInterface * iface); -#define gst_ximagesink_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (GstXImageSink, gst_ximagesink, GST_TYPE_VIDEO_SINK, - G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, gst_ximagesink_navigation_init); +#define gst_x_image_sink_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (GstXImageSink, gst_x_image_sink, GST_TYPE_VIDEO_SINK, + G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, + gst_x_image_sink_navigation_init); G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY, - gst_ximagesink_video_overlay_init)); + gst_x_image_sink_video_overlay_init)); /* ============================================================= */ /* */ @@ -190,10 +192,10 @@ /* We are called with the x_lock taken */ static void -gst_ximagesink_xwindow_draw_borders (GstXImageSink * ximagesink, +gst_x_image_sink_xwindow_draw_borders (GstXImageSink * ximagesink, GstXWindow * xwindow, GstVideoRectangle rect) { - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); g_return_if_fail (xwindow != NULL); XSetForeground (ximagesink->xcontext->disp, xwindow->gc, @@ -226,11 +228,13 @@ /* This function puts a GstXImageBuffer on a GstXImageSink's window */ static gboolean -gst_ximagesink_ximage_put (GstXImageSink * ximagesink, GstBuffer * ximage) +gst_x_image_sink_ximage_put (GstXImageSink * ximagesink, GstBuffer * ximage) { GstXImageMemory *mem; GstVideoCropMeta *crop; - GstVideoRectangle src, dst, result; + GstVideoRectangle src = { 0, }; + GstVideoRectangle dst = { 0, }; + GstVideoRectangle result; gboolean draw_border = FALSE; /* We take the flow_lock. If expose is in there we don't want to run @@ -293,7 +297,7 @@ g_mutex_lock (&ximagesink->x_lock); if (draw_border) { - gst_ximagesink_xwindow_draw_borders (ximagesink, ximagesink->xwindow, + gst_x_image_sink_xwindow_draw_borders (ximagesink, ximagesink->xwindow, result); ximagesink->draw_border = FALSE; } @@ -328,13 +332,13 @@ } static gboolean -gst_ximagesink_xwindow_decorate (GstXImageSink * ximagesink, +gst_x_image_sink_xwindow_decorate (GstXImageSink * ximagesink, GstXWindow * window) { Atom hints_atom = None; MotifWmHints *hints; - g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), FALSE); + g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), FALSE); g_return_val_if_fail (window != NULL, FALSE); g_mutex_lock (&ximagesink->x_lock); @@ -365,7 +369,7 @@ } static void -gst_ximagesink_xwindow_set_title (GstXImageSink * ximagesink, +gst_x_image_sink_xwindow_set_title (GstXImageSink * ximagesink, GstXWindow * xwindow, const gchar * media_title) { if (media_title) { @@ -376,6 +380,7 @@ /* we have a window */ if (xwindow->internal) { XTextProperty xproperty; + XClassHint *hint = XAllocClassHint (); const gchar *app_name; const gchar *title = NULL; gchar *title_mem = NULL; @@ -401,18 +406,26 @@ g_free (title_mem); } + + if (hint) { + hint->res_name = (char *) app_name; + hint->res_class = (char *) "GStreamer"; + XSetClassHint (ximagesink->xcontext->disp, xwindow->win, hint); + } + XFree (hint); } } } /* This function handles a GstXWindow creation */ static GstXWindow * -gst_ximagesink_xwindow_new (GstXImageSink * ximagesink, gint width, gint height) +gst_x_image_sink_xwindow_new (GstXImageSink * ximagesink, gint width, + gint height) { GstXWindow *xwindow = NULL; XGCValues values; - g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL); + g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL); xwindow = g_new0 (GstXWindow, 1); @@ -431,7 +444,7 @@ XSetWindowBackgroundPixmap (ximagesink->xcontext->disp, xwindow->win, None); /* set application name as a title */ - gst_ximagesink_xwindow_set_title (ximagesink, xwindow, NULL); + gst_x_image_sink_xwindow_set_title (ximagesink, xwindow, NULL); if (ximagesink->handle_events) { Atom wm_delete; @@ -457,7 +470,7 @@ g_mutex_unlock (&ximagesink->x_lock); - gst_ximagesink_xwindow_decorate (ximagesink, xwindow); + gst_x_image_sink_xwindow_decorate (ximagesink, xwindow); gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (ximagesink), xwindow->win); @@ -467,11 +480,11 @@ /* This function destroys a GstXWindow */ static void -gst_ximagesink_xwindow_destroy (GstXImageSink * ximagesink, +gst_x_image_sink_xwindow_destroy (GstXImageSink * ximagesink, GstXWindow * xwindow) { g_return_if_fail (xwindow != NULL); - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); g_mutex_lock (&ximagesink->x_lock); @@ -491,12 +504,12 @@ } static void -gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink) +gst_x_image_sink_xwindow_update_geometry (GstXImageSink * ximagesink) { XWindowAttributes attr; gboolean reconfigure; - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); /* Update the window geometry */ g_mutex_lock (&ximagesink->x_lock); @@ -522,10 +535,11 @@ } static void -gst_ximagesink_xwindow_clear (GstXImageSink * ximagesink, GstXWindow * xwindow) +gst_x_image_sink_xwindow_clear (GstXImageSink * ximagesink, + GstXWindow * xwindow) { g_return_if_fail (xwindow != NULL); - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); g_mutex_lock (&ximagesink->x_lock); @@ -544,14 +558,14 @@ GstEvent that will be sent upstream in the pipeline to handle interactivity and navigation.*/ static void -gst_ximagesink_handle_xevents (GstXImageSink * ximagesink) +gst_x_image_sink_handle_xevents (GstXImageSink * ximagesink) { XEvent e; guint pointer_x = 0, pointer_y = 0; gboolean pointer_moved = FALSE; gboolean exposed = FALSE, configured = FALSE; - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); /* Then we get all pointer motion events, only the last position is interesting. */ @@ -651,7 +665,7 @@ break; case ConfigureNotify: g_mutex_unlock (&ximagesink->x_lock); - gst_ximagesink_xwindow_update_geometry (ximagesink); + gst_x_image_sink_xwindow_update_geometry (ximagesink); g_mutex_lock (&ximagesink->x_lock); configured = TRUE; break; @@ -664,7 +678,7 @@ g_mutex_unlock (&ximagesink->x_lock); g_mutex_unlock (&ximagesink->flow_lock); - gst_ximagesink_expose (GST_VIDEO_OVERLAY (ximagesink)); + gst_x_image_sink_expose (GST_VIDEO_OVERLAY (ximagesink)); g_mutex_lock (&ximagesink->flow_lock); g_mutex_lock (&ximagesink->x_lock); @@ -686,7 +700,7 @@ ("Output window was closed"), (NULL)); g_mutex_unlock (&ximagesink->x_lock); - gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow); + gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow); ximagesink->xwindow = NULL; g_mutex_lock (&ximagesink->x_lock); } @@ -702,16 +716,16 @@ } static gpointer -gst_ximagesink_event_thread (GstXImageSink * ximagesink) +gst_x_image_sink_event_thread (GstXImageSink * ximagesink) { - g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL); + g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL); GST_OBJECT_LOCK (ximagesink); while (ximagesink->running) { GST_OBJECT_UNLOCK (ximagesink); if (ximagesink->xwindow) { - gst_ximagesink_handle_xevents (ximagesink); + gst_x_image_sink_handle_xevents (ximagesink); } /* FIXME: do we want to align this with the framerate or anything else? */ g_usleep (G_USEC_PER_SEC / 20); @@ -724,7 +738,7 @@ } static void -gst_ximagesink_manage_event_thread (GstXImageSink * ximagesink) +gst_x_image_sink_manage_event_thread (GstXImageSink * ximagesink) { GThread *thread = NULL; @@ -741,7 +755,7 @@ ximagesink->handle_expose, ximagesink->handle_events); ximagesink->running = TRUE; ximagesink->event_thread = g_thread_try_new ("ximagesink-events", - (GThreadFunc) gst_ximagesink_event_thread, ximagesink, NULL); + (GThreadFunc) gst_x_image_sink_event_thread, ximagesink, NULL); } } else { if (ximagesink->event_thread) { @@ -765,7 +779,7 @@ /* This function calculates the pixel aspect ratio based on the properties * in the xcontext structure and stores it there. */ static void -gst_ximagesink_calculate_pixel_aspect_ratio (GstXContext * xcontext) +gst_x_image_sink_calculate_pixel_aspect_ratio (GstXContext * xcontext) { static const gint par[][2] = { {1, 1}, /* regular screen */ @@ -825,7 +839,7 @@ here that caps for supported format are generated without any window or image creation */ static GstXContext * -gst_ximagesink_xcontext_get (GstXImageSink * ximagesink) +gst_x_image_sink_xcontext_get (GstXImageSink * ximagesink) { GstXContext *xcontext = NULL; XPixmapFormatValues *px_formats = NULL; @@ -834,7 +848,7 @@ GstVideoFormat vformat; guint32 alpha_mask; - g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL); + g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL); xcontext = g_new0 (GstXContext, 1); @@ -866,7 +880,7 @@ GST_DEBUG_OBJECT (ximagesink, "X reports %dx%d pixels and %d mm x %d mm", xcontext->width, xcontext->height, xcontext->widthmm, xcontext->heightmm); - gst_ximagesink_calculate_pixel_aspect_ratio (xcontext); + gst_x_image_sink_calculate_pixel_aspect_ratio (xcontext); /* We get supported pixmap formats at supported depth */ px_formats = XListPixmapFormats (xcontext->disp, &nb_formats); @@ -895,7 +909,7 @@ /* Search for XShm extension support */ #ifdef HAVE_XSHM if (XShmQueryExtension (xcontext->disp) && - gst_ximagesink_check_xshm_calls (ximagesink, xcontext)) { + gst_x_image_sink_check_xshm_calls (ximagesink, xcontext)) { xcontext->use_xshm = TRUE; GST_DEBUG ("ximagesink is using XShm extension"); } else @@ -956,11 +970,11 @@ /* This function cleans the X context. Closing the Display and unrefing the caps for supported formats. */ static void -gst_ximagesink_xcontext_clear (GstXImageSink * ximagesink) +gst_x_image_sink_xcontext_clear (GstXImageSink * ximagesink) { GstXContext *xcontext; - g_return_if_fail (GST_IS_XIMAGESINK (ximagesink)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink)); GST_OBJECT_LOCK (ximagesink); if (ximagesink->xcontext == NULL) { @@ -996,13 +1010,13 @@ /* Element stuff */ static GstCaps * -gst_ximagesink_getcaps (GstBaseSink * bsink, GstCaps * filter) +gst_x_image_sink_getcaps (GstBaseSink * bsink, GstCaps * filter) { GstXImageSink *ximagesink; GstCaps *caps; int i; - ximagesink = GST_XIMAGESINK (bsink); + ximagesink = GST_X_IMAGE_SINK (bsink); g_mutex_lock (&ximagesink->x_lock); if (ximagesink->xcontext) { @@ -1083,18 +1097,44 @@ return caps; } +static GstBufferPool * +gst_x_image_sink_create_pool (GstXImageSink * ximagesink, GstCaps * caps, + gsize size, gint min) +{ + static GstAllocationParams params = { 0, 15, 0, 0, }; + GstBufferPool *pool; + GstStructure *config; + + /* create a new pool for the new configuration */ + pool = gst_ximage_buffer_pool_new (ximagesink); + + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set_params (config, caps, size, min, 0); + gst_buffer_pool_config_set_allocator (config, NULL, ¶ms); + + if (!gst_buffer_pool_set_config (pool, config)) + goto config_failed; + + return pool; + +config_failed: + { + GST_WARNING_OBJECT (ximagesink, "failed setting config"); + gst_object_unref (pool); + return NULL; + } +} + static gboolean -gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps) +gst_x_image_sink_setcaps (GstBaseSink * bsink, GstCaps * caps) { GstXImageSink *ximagesink; GstStructure *structure; GstVideoInfo info; GstBufferPool *newpool, *oldpool; const GValue *par; - gint size; - static GstAllocationParams params = { 0, 15, 0, 0, }; - ximagesink = GST_XIMAGESINK (bsink); + ximagesink = GST_X_IMAGE_SINK (bsink); if (!ximagesink->xcontext) return FALSE; @@ -1110,8 +1150,6 @@ if (!gst_video_info_from_caps (&info, caps)) goto invalid_format; - size = info.size; - structure = gst_caps_get_structure (caps, 0); /* if the caps contain pixel-aspect-ratio, they have to match ours, * otherwise linking should fail */ @@ -1149,7 +1187,7 @@ g_mutex_lock (&ximagesink->flow_lock); if (!ximagesink->xwindow) { - ximagesink->xwindow = gst_ximagesink_xwindow_new (ximagesink, + ximagesink->xwindow = gst_x_image_sink_xwindow_new (ximagesink, GST_VIDEO_SINK_WIDTH (ximagesink), GST_VIDEO_SINK_HEIGHT (ximagesink)); } @@ -1158,26 +1196,17 @@ /* Remember to draw borders for next frame */ ximagesink->draw_border = TRUE; - /* create a new pool for the new configuration */ - newpool = gst_ximage_buffer_pool_new (ximagesink); - - structure = gst_buffer_pool_get_config (newpool); - gst_buffer_pool_config_set_params (structure, caps, size, 2, 0); - gst_buffer_pool_config_set_allocator (structure, NULL, ¶ms); - if (!gst_buffer_pool_set_config (newpool, structure)) - goto config_failed; + /* create a new internal pool for the new configuration */ + newpool = gst_x_image_sink_create_pool (ximagesink, caps, info.size, 2); + /* we don't activate the internal pool yet as it may not be needed */ oldpool = ximagesink->pool; - /* we don't activate the pool yet, this will be done by downstream after it - * has configured the pool. If downstream does not want our pool we will - * activate it when we render into it */ ximagesink->pool = newpool; g_mutex_unlock (&ximagesink->flow_lock); - /* unref the old sink */ + /* deactivate and unref the old internal pool */ if (oldpool) { - /* we don't deactivate, some elements might still be using it, it will be - * deactivated when the last ref is gone */ + gst_buffer_pool_set_active (oldpool, FALSE); gst_object_unref (oldpool); } @@ -1205,28 +1234,22 @@ ("Invalid image size.")); return FALSE; } -config_failed: - { - GST_ERROR_OBJECT (ximagesink, "failed to set config."); - g_mutex_unlock (&ximagesink->flow_lock); - return FALSE; - } } static GstStateChangeReturn -gst_ximagesink_change_state (GstElement * element, GstStateChange transition) +gst_x_image_sink_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstXImageSink *ximagesink; GstXContext *xcontext = NULL; - ximagesink = GST_XIMAGESINK (element); + ximagesink = GST_X_IMAGE_SINK (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: /* Initializing the XContext */ if (ximagesink->xcontext == NULL) { - xcontext = gst_ximagesink_xcontext_get (ximagesink); + xcontext = gst_x_image_sink_xcontext_get (ximagesink); if (xcontext == NULL) { ret = GST_STATE_CHANGE_FAILURE; goto beach; @@ -1243,12 +1266,12 @@ g_mutex_lock (&ximagesink->x_lock); XSynchronize (ximagesink->xcontext->disp, ximagesink->synchronous); g_mutex_unlock (&ximagesink->x_lock); - gst_ximagesink_manage_event_thread (ximagesink); + gst_x_image_sink_manage_event_thread (ximagesink); break; case GST_STATE_CHANGE_READY_TO_PAUSED: g_mutex_lock (&ximagesink->flow_lock); if (ximagesink->xwindow) - gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow); + gst_x_image_sink_xwindow_clear (ximagesink, ximagesink->xwindow); g_mutex_unlock (&ximagesink->flow_lock); break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: @@ -1273,7 +1296,7 @@ g_mutex_unlock (&ximagesink->flow_lock); break; case GST_STATE_CHANGE_READY_TO_NULL: - gst_ximagesink_reset (ximagesink); + gst_x_image_sink_reset (ximagesink); break; default: break; @@ -1284,12 +1307,12 @@ } static void -gst_ximagesink_get_times (GstBaseSink * bsink, GstBuffer * buf, +gst_x_image_sink_get_times (GstBaseSink * bsink, GstBuffer * buf, GstClockTime * start, GstClockTime * end) { GstXImageSink *ximagesink; - ximagesink = GST_XIMAGESINK (bsink); + ximagesink = GST_X_IMAGE_SINK (bsink); if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { *start = GST_BUFFER_TIMESTAMP (buf); @@ -1306,14 +1329,14 @@ } static GstFlowReturn -gst_ximagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf) +gst_x_image_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) { GstFlowReturn res; GstXImageSink *ximagesink; GstXImageMemory *mem; GstBuffer *to_put = NULL; - ximagesink = GST_XIMAGESINK (vsink); + ximagesink = GST_X_IMAGE_SINK (vsink); if (gst_buffer_n_memory (buf) == 1 && (mem = (GstXImageMemory *) gst_buffer_peek_memory (buf, 0)) @@ -1332,8 +1355,8 @@ /* if we have one... */ GST_LOG_OBJECT (ximagesink, "buffer not from our pool, copying"); - /* we should have a pool, configured in setcaps */ - if (ximagesink->pool == NULL) + /* an internal pool should have been created in setcaps */ + if (G_UNLIKELY (ximagesink->pool == NULL)) goto no_pool; if (!gst_buffer_pool_set_active (ximagesink->pool, TRUE)) @@ -1364,7 +1387,7 @@ gst_video_frame_unmap (&src); } - if (!gst_ximagesink_ximage_put (ximagesink, to_put)) + if (!gst_x_image_sink_ximage_put (ximagesink, to_put)) goto no_window; done: @@ -1410,9 +1433,9 @@ } static gboolean -gst_ximagesink_event (GstBaseSink * sink, GstEvent * event) +gst_x_image_sink_event (GstBaseSink * sink, GstEvent * event) { - GstXImageSink *ximagesink = GST_XIMAGESINK (sink); + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (sink); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_TAG:{ @@ -1424,7 +1447,7 @@ if (title) { GST_DEBUG_OBJECT (ximagesink, "got tags, title='%s'", title); - gst_ximagesink_xwindow_set_title (ximagesink, ximagesink->xwindow, + gst_x_image_sink_xwindow_set_title (ximagesink, ximagesink->xwindow, title); g_free (title); @@ -1438,11 +1461,10 @@ } static gboolean -gst_ximagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query) +gst_x_image_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query) { - GstXImageSink *ximagesink = GST_XIMAGESINK (bsink); - GstBufferPool *pool; - GstStructure *config; + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (bsink); + GstBufferPool *pool = NULL; GstCaps *caps; guint size; gboolean need_pool; @@ -1452,45 +1474,21 @@ if (caps == NULL) goto no_caps; - g_mutex_lock (&ximagesink->flow_lock); - if ((pool = ximagesink->pool)) - gst_object_ref (pool); - g_mutex_unlock (&ximagesink->flow_lock); - - if (pool != NULL) { - GstCaps *pcaps; - - /* we had a pool, check caps */ - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL); - - GST_DEBUG_OBJECT (ximagesink, - "we had a pool with caps %" GST_PTR_FORMAT, pcaps); - if (!gst_caps_is_equal (caps, pcaps)) { - /* different caps, we can't use this pool */ - GST_DEBUG_OBJECT (ximagesink, "pool has different caps"); - gst_object_unref (pool); - pool = NULL; - } - gst_structure_free (config); - } - if (pool == NULL && need_pool) { + if (need_pool) { GstVideoInfo info; if (!gst_video_info_from_caps (&info, caps)) goto invalid_caps; - GST_DEBUG_OBJECT (ximagesink, "create new pool"); - pool = gst_ximage_buffer_pool_new (ximagesink); + pool = gst_x_image_sink_create_pool (ximagesink, caps, info.size, 0); /* the normal size of a frame */ size = info.size; - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, caps, size, 0, 0); - if (!gst_buffer_pool_set_config (pool, config)) - goto config_failed; + if (pool == NULL) + goto no_pool; } + if (pool) { /* we need at least 2 buffer because we hold on to the last one */ gst_query_add_allocation_pool (query, pool, size, 2, 0); @@ -1514,26 +1512,23 @@ GST_DEBUG_OBJECT (bsink, "invalid caps specified"); return FALSE; } -config_failed: +no_pool: { - GST_DEBUG_OBJECT (bsink, "failed setting config"); - gst_object_unref (pool); + /* Already warned in create_pool */ return FALSE; } } /* Interfaces stuff */ static void -gst_ximagesink_navigation_send_event (GstNavigation * navigation, +gst_x_image_sink_navigation_send_event (GstNavigation * navigation, GstStructure * structure) { - GstXImageSink *ximagesink = GST_XIMAGESINK (navigation); - GstEvent *event; + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (navigation); + GstEvent *event = NULL; gint x_offset, y_offset; gdouble x, y; - GstPad *pad = NULL; - - event = gst_event_new_navigation (structure); + gboolean handled = FALSE; /* We are not converting the pointer coordinates as there's no hardware scaling done here. The only possible scaling is done by videoscale and @@ -1563,26 +1558,31 @@ gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL); } - pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (ximagesink)); + event = gst_event_new_navigation (structure); + if (event) { + gst_event_ref (event); + handled = gst_pad_push_event (GST_VIDEO_SINK_PAD (ximagesink), event); - if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) { - gst_pad_send_event (pad, event); + if (!handled) + gst_element_post_message (GST_ELEMENT_CAST (ximagesink), + gst_navigation_message_new_event (GST_OBJECT_CAST (ximagesink), + event)); - gst_object_unref (pad); + gst_event_unref (event); } } static void -gst_ximagesink_navigation_init (GstNavigationInterface * iface) +gst_x_image_sink_navigation_init (GstNavigationInterface * iface) { - iface->send_event = gst_ximagesink_navigation_send_event; + iface->send_event = gst_x_image_sink_navigation_send_event; } static void -gst_ximagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id) +gst_x_image_sink_set_window_handle (GstVideoOverlay * overlay, guintptr id) { XID xwindow_id = id; - GstXImageSink *ximagesink = GST_XIMAGESINK (overlay); + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay); GstXWindow *xwindow = NULL; XWindowAttributes attr; @@ -1599,7 +1599,7 @@ /* If the element has not initialized the X11 context try to do so */ if (!ximagesink->xcontext && - !(ximagesink->xcontext = gst_ximagesink_xcontext_get (ximagesink))) { + !(ximagesink->xcontext = gst_x_image_sink_xcontext_get (ximagesink))) { g_mutex_unlock (&ximagesink->flow_lock); /* we have thrown a GST_ELEMENT_ERROR now */ return; @@ -1607,7 +1607,7 @@ /* If a window is there already we destroy it */ if (ximagesink->xwindow) { - gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow); + gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow); ximagesink->xwindow = NULL; } @@ -1616,7 +1616,7 @@ /* If no width/height caps nego did not happen window will be created during caps nego then */ if (GST_VIDEO_SINK_WIDTH (ximagesink) && GST_VIDEO_SINK_HEIGHT (ximagesink)) { - xwindow = gst_ximagesink_xwindow_new (ximagesink, + xwindow = gst_x_image_sink_xwindow_new (ximagesink, GST_VIDEO_SINK_WIDTH (ximagesink), GST_VIDEO_SINK_HEIGHT (ximagesink)); } @@ -1649,19 +1649,19 @@ } static void -gst_ximagesink_expose (GstVideoOverlay * overlay) +gst_x_image_sink_expose (GstVideoOverlay * overlay) { - GstXImageSink *ximagesink = GST_XIMAGESINK (overlay); + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay); - gst_ximagesink_xwindow_update_geometry (ximagesink); - gst_ximagesink_ximage_put (ximagesink, NULL); + gst_x_image_sink_xwindow_update_geometry (ximagesink); + gst_x_image_sink_ximage_put (ximagesink, NULL); } static void -gst_ximagesink_set_event_handling (GstVideoOverlay * overlay, +gst_x_image_sink_set_event_handling (GstVideoOverlay * overlay, gboolean handle_events) { - GstXImageSink *ximagesink = GST_XIMAGESINK (overlay); + GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay); ximagesink->handle_events = handle_events; @@ -1694,11 +1694,11 @@ } static void -gst_ximagesink_video_overlay_init (GstVideoOverlayInterface * iface) +gst_x_image_sink_video_overlay_init (GstVideoOverlayInterface * iface) { - iface->set_window_handle = gst_ximagesink_set_window_handle; - iface->expose = gst_ximagesink_expose; - iface->handle_events = gst_ximagesink_set_event_handling; + iface->set_window_handle = gst_x_image_sink_set_window_handle; + iface->expose = gst_x_image_sink_expose; + iface->handle_events = gst_x_image_sink_set_event_handling; } /* =========================================== */ @@ -1708,14 +1708,14 @@ /* =========================================== */ static void -gst_ximagesink_set_property (GObject * object, guint prop_id, +gst_x_image_sink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstXImageSink *ximagesink; - g_return_if_fail (GST_IS_XIMAGESINK (object)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (object)); - ximagesink = GST_XIMAGESINK (object); + ximagesink = GST_X_IMAGE_SINK (object); switch (prop_id) { case PROP_DISPLAY: @@ -1755,13 +1755,13 @@ } break; case PROP_HANDLE_EVENTS: - gst_ximagesink_set_event_handling (GST_VIDEO_OVERLAY (ximagesink), + gst_x_image_sink_set_event_handling (GST_VIDEO_OVERLAY (ximagesink), g_value_get_boolean (value)); - gst_ximagesink_manage_event_thread (ximagesink); + gst_x_image_sink_manage_event_thread (ximagesink); break; case PROP_HANDLE_EXPOSE: ximagesink->handle_expose = g_value_get_boolean (value); - gst_ximagesink_manage_event_thread (ximagesink); + gst_x_image_sink_manage_event_thread (ximagesink); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1770,14 +1770,14 @@ } static void -gst_ximagesink_get_property (GObject * object, guint prop_id, +gst_x_image_sink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstXImageSink *ximagesink; - g_return_if_fail (GST_IS_XIMAGESINK (object)); + g_return_if_fail (GST_IS_X_IMAGE_SINK (object)); - ximagesink = GST_XIMAGESINK (object); + ximagesink = GST_X_IMAGE_SINK (object); switch (prop_id) { case PROP_DISPLAY: @@ -1818,7 +1818,7 @@ } static void -gst_ximagesink_reset (GstXImageSink * ximagesink) +gst_x_image_sink_reset (GstXImageSink * ximagesink) { GThread *thread; @@ -1846,23 +1846,23 @@ } if (ximagesink->xwindow) { - gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow); - gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow); + gst_x_image_sink_xwindow_clear (ximagesink, ximagesink->xwindow); + gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow); ximagesink->xwindow = NULL; } g_mutex_unlock (&ximagesink->flow_lock); - gst_ximagesink_xcontext_clear (ximagesink); + gst_x_image_sink_xcontext_clear (ximagesink); } static void -gst_ximagesink_finalize (GObject * object) +gst_x_image_sink_finalize (GObject * object) { GstXImageSink *ximagesink; - ximagesink = GST_XIMAGESINK (object); + ximagesink = GST_X_IMAGE_SINK (object); - gst_ximagesink_reset (ximagesink); + gst_x_image_sink_reset (ximagesink); if (ximagesink->display_name) { g_free (ximagesink->display_name); @@ -1881,7 +1881,7 @@ } static void -gst_ximagesink_init (GstXImageSink * ximagesink) +gst_x_image_sink_init (GstXImageSink * ximagesink) { ximagesink->display_name = NULL; ximagesink->xcontext = NULL; @@ -1908,7 +1908,7 @@ } static void -gst_ximagesink_class_init (GstXImageSinkClass * klass) +gst_x_image_sink_class_init (GstXImageSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; @@ -1920,9 +1920,9 @@ gstbasesink_class = (GstBaseSinkClass *) klass; videosink_class = (GstVideoSinkClass *) klass; - gobject_class->finalize = gst_ximagesink_finalize; - gobject_class->set_property = gst_ximagesink_set_property; - gobject_class->get_property = gst_ximagesink_get_property; + gobject_class->finalize = gst_x_image_sink_finalize; + gobject_class->set_property = gst_x_image_sink_set_property; + gobject_class->get_property = gst_x_image_sink_get_property; g_object_class_install_property (gobject_class, PROP_DISPLAY, g_param_spec_string ("display", "Display", "X Display name", @@ -1976,16 +1976,16 @@ "A standard X based videosink", "Julien Moutte "); gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&gst_ximagesink_sink_template_factory)); + gst_static_pad_template_get (&gst_x_image_sink_sink_template_factory)); - gstelement_class->change_state = gst_ximagesink_change_state; + gstelement_class->change_state = gst_x_image_sink_change_state; - gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_getcaps); - gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_setcaps); - gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_ximagesink_get_times); + gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_x_image_sink_getcaps); + gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_x_image_sink_setcaps); + gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_x_image_sink_get_times); gstbasesink_class->propose_allocation = - GST_DEBUG_FUNCPTR (gst_ximagesink_propose_allocation); - gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_ximagesink_event); + GST_DEBUG_FUNCPTR (gst_x_image_sink_propose_allocation); + gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_x_image_sink_event); - videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_ximagesink_show_frame); + videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_x_image_sink_show_frame); } diff -Nru gst-plugins-base1.0-1.4.3/sys/ximage/ximagesink.h gst-plugins-base1.0-1.6.1/sys/ximage/ximagesink.h --- gst-plugins-base1.0-1.4.3/sys/ximage/ximagesink.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/ximage/ximagesink.h 2015-10-22 08:01:34.000000000 +0000 @@ -17,8 +17,8 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __GST_XIMAGESINK_H__ -#define __GST_XIMAGESINK_H__ +#ifndef __GST_X_IMAGE_SINK_H__ +#define __GST_X_IMAGE_SINK_H__ #include @@ -42,16 +42,16 @@ #include G_BEGIN_DECLS -#define GST_TYPE_XIMAGESINK \ - (gst_ximagesink_get_type()) -#define GST_XIMAGESINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XIMAGESINK, GstXImageSink)) -#define GST_XIMAGESINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XIMAGESINK, GstXImageSinkClass)) -#define GST_IS_XIMAGESINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XIMAGESINK)) -#define GST_IS_XIMAGESINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XIMAGESINK)) +#define GST_TYPE_X_IMAGE_SINK \ + (gst_x_image_sink_get_type()) +#define GST_X_IMAGE_SINK(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_X_IMAGE_SINK, GstXImageSink)) +#define GST_X_IMAGE_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_X_IMAGE_SINK, GstXImageSinkClass)) +#define GST_IS_X_IMAGE_SINK(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_X_IMAGE_SINK)) +#define GST_IS_X_IMAGE_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_X_IMAGE_SINK)) typedef struct _GstXContext GstXContext; typedef struct _GstXWindow GstXWindow; @@ -204,7 +204,7 @@ GstVideoSinkClass parent_class; }; -GType gst_ximagesink_get_type (void); +GType gst_x_image_sink_get_type (void); G_END_DECLS -#endif /* __GST_XIMAGESINK_H__ */ +#endif /* __GST_X_IMAGE_SINK_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/Makefile.in gst-plugins-base1.0-1.6.1/sys/xvimage/Makefile.in --- gst-plugins-base1.0-1.4.3/sys/xvimage/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = sys/xvimage -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -229,6 +238,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -289,6 +299,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -318,6 +330,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -345,7 +359,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -360,6 +373,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -449,13 +463,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -508,6 +521,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -549,7 +563,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/xvimage/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sys/xvimage/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -890,6 +903,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvcontext.c gst-plugins-base1.0-1.6.1/sys/xvimage/xvcontext.c --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvcontext.c 2014-09-23 16:44:37.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvcontext.c 2015-10-22 08:01:34.000000000 +0000 @@ -33,9 +33,9 @@ /* for XkbKeycodeToKeysym */ #include -GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvcontext); +GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_context); GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); -#define GST_CAT_DEFAULT gst_debug_xvcontext +#define GST_CAT_DEFAULT gst_debug_xv_context void gst_xvcontext_config_clear (GstXvContextConfig * config) @@ -1080,10 +1080,18 @@ /* we have a window */ if (window->internal && title) { XTextProperty xproperty; + XClassHint *hint = XAllocClassHint (); if ((XStringListToTextProperty (((char **) &title), 1, &xproperty)) != 0) { XSetWMName (context->disp, window->win, &xproperty); XFree (xproperty.value); + + if (hint) { + hint->res_name = (char *) title; + hint->res_class = (char *) "GStreamer"; + XSetClassHint (context->disp, window->win, hint); + } + XFree (hint); } } } diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimageallocator.c gst-plugins-base1.0-1.6.1/sys/xvimage/xvimageallocator.c --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimageallocator.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimageallocator.c 2015-10-22 08:01:34.000000000 +0000 @@ -346,7 +346,7 @@ int (*handler) (Display *, XErrorEvent *); gboolean success = FALSE; GstXvContext *context; - gint align = 15, offset; + gint align, offset; GstXvImageMemory *mem; context = allocator->context; @@ -453,8 +453,9 @@ } /* get shared memory */ + align = 0; mem->SHMInfo.shmid = - shmget (IPC_PRIVATE, mem->xvimage->data_size + align, IPC_CREAT | 0777); + shmget (IPC_PRIVATE, mem->xvimage->data_size, IPC_CREAT | 0777); if (mem->SHMInfo.shmid == -1) goto shmget_failed; @@ -489,6 +490,7 @@ goto create_failed; /* we have to use the returned data_size for our image size */ + align = 15; /* g_malloc aligns to 8, we need 16 */ mem->xvimage->data = g_malloc (mem->xvimage->data_size + align); XSync (context->disp, FALSE); @@ -625,9 +627,9 @@ } #ifdef HAVE_XSHM if (context->use_xshm) { - GST_LOG ("XvShmPutImage with image %dx%d and window %dx%d, from xvimage %" - GST_PTR_FORMAT, src_crop->w, src_crop->h, - window->render_rect.w, window->render_rect.h, mem); + GST_LOG ("XvShmPutImage with image %dx%d and window %dx%d, from xvimage %p", + src_crop->w, src_crop->h, window->render_rect.w, window->render_rect.h, + mem); XvShmPutImage (context->disp, context->xv_port_id, diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimage.c gst-plugins-base1.0-1.6.1/sys/xvimage/xvimage.c --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimage.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimage.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,23 +23,23 @@ #include "xvimagesink.h" -GST_DEBUG_CATEGORY (gst_debug_xvcontext); -GST_DEBUG_CATEGORY (gst_debug_xvimagepool); -GST_DEBUG_CATEGORY (gst_debug_xvimagesink); +GST_DEBUG_CATEGORY (gst_debug_xv_context); +GST_DEBUG_CATEGORY (gst_debug_xv_image_pool); +GST_DEBUG_CATEGORY (gst_debug_xv_image_sink); GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE); static gboolean plugin_init (GstPlugin * plugin) { if (!gst_element_register (plugin, "xvimagesink", - GST_RANK_PRIMARY, GST_TYPE_XVIMAGESINK)) + GST_RANK_PRIMARY, GST_TYPE_XV_IMAGE_SINK)) return FALSE; - GST_DEBUG_CATEGORY_INIT (gst_debug_xvcontext, "xcontext", 0, + GST_DEBUG_CATEGORY_INIT (gst_debug_xv_context, "xcontext", 0, "xcontext miniobject"); - GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagesink, "xvimagesink", 0, + GST_DEBUG_CATEGORY_INIT (gst_debug_xv_image_sink, "xvimagesink", 0, "xvimagesink element"); - GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagepool, "xvimagepool", 0, + GST_DEBUG_CATEGORY_INIT (gst_debug_xv_image_pool, "xvimagepool", 0, "xvimagepool object"); GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE"); diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagepool.c gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagepool.c --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagepool.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagepool.c 2015-10-22 08:01:34.000000000 +0000 @@ -34,31 +34,12 @@ #include -GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagepool); -#define GST_CAT_DEFAULT gst_debug_xvimagepool - - -struct _GstXvImageBufferPoolPrivate -{ - GstXvImageAllocator *allocator; - - GstCaps *caps; - gint im_format; - GstVideoRectangle crop; - GstVideoInfo info; - GstVideoAlignment align; - guint padded_width; - guint padded_height; - gboolean add_metavideo; - gboolean need_alignment; -}; +GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_image_pool); +#define GST_CAT_DEFAULT gst_debug_xv_image_pool /* bufferpool */ static void gst_xvimage_buffer_pool_finalize (GObject * object); -#define GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE(obj) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XVIMAGE_BUFFER_POOL, GstXvImageBufferPoolPrivate)) - #define gst_xvimage_buffer_pool_parent_class parent_class G_DEFINE_TYPE (GstXvImageBufferPool, gst_xvimage_buffer_pool, GST_TYPE_BUFFER_POOL); @@ -77,12 +58,13 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) { GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool); - GstXvImageBufferPoolPrivate *priv = xvpool->priv; GstVideoInfo info; GstCaps *caps; + guint size, min_buffers, max_buffers; GstXvContext *context; - if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL)) + if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers, + &max_buffers)) goto wrong_config; if (caps == NULL) @@ -95,54 +77,59 @@ GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height, caps); - context = gst_xvimage_allocator_peek_context (priv->allocator); + context = gst_xvimage_allocator_peek_context (xvpool->allocator); - priv->im_format = gst_xvcontext_get_format_from_info (context, &info); - if (priv->im_format == -1) + xvpool->im_format = gst_xvcontext_get_format_from_info (context, &info); + if (xvpool->im_format == -1) goto unknown_format; - if (priv->caps) - gst_caps_unref (priv->caps); - priv->caps = gst_caps_ref (caps); + if (xvpool->caps) + gst_caps_unref (xvpool->caps); + xvpool->caps = gst_caps_ref (caps); /* enable metadata based on config of the pool */ - priv->add_metavideo = + xvpool->add_metavideo = gst_buffer_pool_config_has_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META); /* parse extra alignment info */ - priv->need_alignment = gst_buffer_pool_config_has_option (config, + xvpool->need_alignment = gst_buffer_pool_config_has_option (config, GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT); - if (priv->need_alignment) { - gst_buffer_pool_config_get_video_alignment (config, &priv->align); + if (xvpool->need_alignment) { + gst_buffer_pool_config_get_video_alignment (config, &xvpool->align); - GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top, - priv->align.padding_left, priv->align.padding_left, - priv->align.padding_bottom); + GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", xvpool->align.padding_top, + xvpool->align.padding_left, xvpool->align.padding_left, + xvpool->align.padding_bottom); /* do padding and alignment */ - gst_video_info_align (&info, &priv->align); + gst_video_info_align (&info, &xvpool->align); + + gst_buffer_pool_config_set_video_alignment (config, &xvpool->align); /* we need the video metadata too now */ - priv->add_metavideo = TRUE; + xvpool->add_metavideo = TRUE; } else { - gst_video_alignment_reset (&priv->align); + gst_video_alignment_reset (&xvpool->align); } /* add the padding */ - priv->padded_width = - GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left + - priv->align.padding_right; - priv->padded_height = - GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top + - priv->align.padding_bottom; - - priv->info = info; - priv->crop.x = priv->align.padding_left; - priv->crop.y = priv->align.padding_top; - priv->crop.w = priv->info.width; - priv->crop.h = priv->info.height; + xvpool->padded_width = + GST_VIDEO_INFO_WIDTH (&info) + xvpool->align.padding_left + + xvpool->align.padding_right; + xvpool->padded_height = + GST_VIDEO_INFO_HEIGHT (&info) + xvpool->align.padding_top + + xvpool->align.padding_bottom; + + xvpool->info = info; + xvpool->crop.x = xvpool->align.padding_left; + xvpool->crop.y = xvpool->align.padding_top; + xvpool->crop.w = xvpool->info.width; + xvpool->crop.h = xvpool->info.height; + + gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers, + max_buffers); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); @@ -167,7 +154,7 @@ { GST_WARNING_OBJECT (pool, "failed to get format from caps %" GST_PTR_FORMAT, caps); - return FALSE;; + return FALSE; } } @@ -177,17 +164,17 @@ GstBufferPoolAcquireParams * params) { GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool); - GstXvImageBufferPoolPrivate *priv = xvpool->priv; GstVideoInfo *info; GstBuffer *xvimage; GstMemory *mem; + GError *err = NULL; - info = &priv->info; + info = &xvpool->info; xvimage = gst_buffer_new (); - mem = gst_xvimage_allocator_alloc (priv->allocator, priv->im_format, - priv->padded_width, priv->padded_height, &priv->crop, NULL); + mem = gst_xvimage_allocator_alloc (xvpool->allocator, xvpool->im_format, + xvpool->padded_width, xvpool->padded_height, &xvpool->crop, &err); if (mem == NULL) { gst_buffer_unref (xvimage); @@ -195,7 +182,7 @@ } gst_buffer_append_memory (xvimage, mem); - if (priv->add_metavideo) { + if (xvpool->add_metavideo) { GST_DEBUG_OBJECT (pool, "adding GstVideoMeta"); gst_buffer_add_video_meta_full (xvimage, GST_VIDEO_FRAME_FLAG_NONE, GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info), @@ -210,7 +197,8 @@ /* ERROR */ no_buffer: { - GST_WARNING_OBJECT (pool, "can't create image"); + GST_WARNING_OBJECT (pool, "can't create image: %s", err->message); + g_clear_error (&err); return GST_FLOW_ERROR; } } @@ -221,7 +209,7 @@ GstXvImageBufferPool *pool; pool = g_object_new (GST_TYPE_XVIMAGE_BUFFER_POOL, NULL); - pool->priv->allocator = gst_object_ref (allocator); + pool->allocator = gst_object_ref (allocator); GST_LOG_OBJECT (pool, "new XvImage buffer pool %p", pool); @@ -234,8 +222,6 @@ GObjectClass *gobject_class = (GObjectClass *) klass; GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass; - g_type_class_add_private (klass, sizeof (GstXvImageBufferPoolPrivate)); - gobject_class->finalize = gst_xvimage_buffer_pool_finalize; gstbufferpool_class->get_options = xvimage_buffer_pool_get_options; @@ -246,21 +232,20 @@ static void gst_xvimage_buffer_pool_init (GstXvImageBufferPool * pool) { - pool->priv = GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE (pool); + /* nothing to do here */ } static void gst_xvimage_buffer_pool_finalize (GObject * object) { GstXvImageBufferPool *pool = GST_XVIMAGE_BUFFER_POOL_CAST (object); - GstXvImageBufferPoolPrivate *priv = pool->priv; GST_LOG_OBJECT (pool, "finalize XvImage buffer pool %p", pool); - if (priv->caps) - gst_caps_unref (priv->caps); - if (priv->allocator) - gst_object_unref (priv->allocator); + if (pool->caps) + gst_caps_unref (pool->caps); + if (pool->allocator) + gst_object_unref (pool->allocator); G_OBJECT_CLASS (gst_xvimage_buffer_pool_parent_class)->finalize (object); } diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagepool.h gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagepool.h --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagepool.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagepool.h 2015-10-22 08:01:34.000000000 +0000 @@ -28,7 +28,6 @@ typedef struct _GstXvImageBufferPool GstXvImageBufferPool; typedef struct _GstXvImageBufferPoolClass GstXvImageBufferPoolClass; -typedef struct _GstXvImageBufferPoolPrivate GstXvImageBufferPoolPrivate; /* buffer pool functions */ #define GST_TYPE_XVIMAGE_BUFFER_POOL (gst_xvimage_buffer_pool_get_type()) @@ -40,7 +39,17 @@ { GstBufferPool bufferpool; - GstXvImageBufferPoolPrivate *priv; + GstXvImageAllocator *allocator; + + GstCaps *caps; + gint im_format; + GstVideoRectangle crop; + GstVideoInfo info; + GstVideoAlignment align; + guint padded_width; + guint padded_height; + gboolean add_metavideo; + gboolean need_alignment; }; struct _GstXvImageBufferPoolClass diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagesink.c gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagesink.c --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagesink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagesink.c 2015-10-22 08:01:34.000000000 +0000 @@ -73,17 +73,20 @@ * * Examples * |[ - * gst-launch -v videotestsrc ! xvimagesink + * gst-launch-1.0 -v videotestsrc ! xvimagesink * ]| A pipeline to test hardware scaling. * When the test video signal appears you can resize the window and see that - * video frames are scaled through hardware (no extra CPU cost). + * video frames are scaled through hardware (no extra CPU cost). By default + * the image will never be distorted when scaled, instead black borders will + * be added if needed. * |[ - * gst-launch -v videotestsrc ! xvimagesink force-aspect-ratio=true - * ]| Same pipeline with #GstXvImageSink:force-aspect-ratio property set to true - * You can observe the borders drawn around the scaled image respecting aspect - * ratio. + * gst-launch-1.0 -v videotestsrc ! xvimagesink force-aspect-ratio=false + * ]| Same pipeline with #GstXvImageSink:force-aspect-ratio property set to + * false. You can observe that no borders are drawn around the scaled image + * now and it will be distorted to fill the entire frame instead of respecting + * the aspect ratio. * |[ - * gst-launch -v videotestsrc ! navigationtest ! xvimagesink + * gst-launch-1.0 -v videotestsrc ! navigationtest ! xvimagesink * ]| A pipeline to test navigation events. * While moving the mouse pointer over the test signal you will see a black box * following the mouse pointer. If you press the mouse button somewhere on the @@ -95,15 +98,14 @@ * position. This also handles borders correctly, limiting coordinates to the * image area * |[ - * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! xvimagesink + * gst-launch-1.0 -v videotestsrc ! video/x-raw, pixel-aspect-ratio=4/3 ! xvimagesink * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by * videotestsrc, in most cases the pixel aspect ratio of the display will be * 1/1. This means that XvImageSink will have to do the scaling to convert * incoming frames to a size that will match the display pixel aspect ratio - * (from 320x240 to 320x180 in this case). Note that you might have to escape - * some characters for your shell like '\(fraction\)'. + * (from 320x240 to 320x180 in this case). * |[ - * gst-launch -v videotestsrc ! xvimagesink hue=100 saturation=-100 brightness=100 + * gst-launch-1.0 -v videotestsrc ! xvimagesink hue=100 saturation=-100 brightness=100 * ]| Demonstrates how to use the colorbalance interface. * */ @@ -131,9 +133,9 @@ /* for XkbKeycodeToKeysym */ #include -GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagesink); +GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_image_sink); GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); -#define GST_CAT_DEFAULT gst_debug_xvimagesink +#define GST_CAT_DEFAULT gst_debug_xv_image_sink typedef struct { @@ -147,15 +149,15 @@ #define MWM_HINTS_DECORATIONS (1L << 1) -static gboolean gst_xvimagesink_open (GstXvImageSink * xvimagesink); -static void gst_xvimagesink_close (GstXvImageSink * xvimagesink); -static void gst_xvimagesink_xwindow_update_geometry (GstXvImageSink * +static gboolean gst_xv_image_sink_open (GstXvImageSink * xvimagesink); +static void gst_xv_image_sink_close (GstXvImageSink * xvimagesink); +static void gst_xv_image_sink_xwindow_update_geometry (GstXvImageSink * xvimagesink); -static void gst_xvimagesink_expose (GstVideoOverlay * overlay); +static void gst_xv_image_sink_expose (GstVideoOverlay * overlay); /* Default template - initiated with class struct to allow gst-register to work without X running */ -static GstStaticPadTemplate gst_xvimagesink_sink_template_factory = +static GstStaticPadTemplate gst_xv_image_sink_sink_template_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, @@ -198,19 +200,19 @@ /* Object typing & Creation */ /* */ /* =========================================== */ -static void gst_xvimagesink_navigation_init (GstNavigationInterface * iface); -static void gst_xvimagesink_video_overlay_init (GstVideoOverlayInterface * +static void gst_xv_image_sink_navigation_init (GstNavigationInterface * iface); +static void gst_xv_image_sink_video_overlay_init (GstVideoOverlayInterface * iface); -static void gst_xvimagesink_colorbalance_init (GstColorBalanceInterface * +static void gst_xv_image_sink_colorbalance_init (GstColorBalanceInterface * iface); -#define gst_xvimagesink_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (GstXvImageSink, gst_xvimagesink, GST_TYPE_VIDEO_SINK, +#define gst_xv_image_sink_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (GstXvImageSink, gst_xv_image_sink, GST_TYPE_VIDEO_SINK, G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, - gst_xvimagesink_navigation_init); + gst_xv_image_sink_navigation_init); G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY, - gst_xvimagesink_video_overlay_init); + gst_xv_image_sink_video_overlay_init); G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE, - gst_xvimagesink_colorbalance_init)); + gst_xv_image_sink_colorbalance_init)); /* ============================================================= */ @@ -223,13 +225,15 @@ /* This function puts a GstXvImage on a GstXvImageSink's window. Returns FALSE * if no window was available */ static gboolean -gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, GstBuffer * xvimage) +gst_xv_image_sink_xvimage_put (GstXvImageSink * xvimagesink, + GstBuffer * xvimage) { GstXvImageMemory *mem; GstVideoCropMeta *crop; GstVideoRectangle result; gboolean draw_border = FALSE; - GstVideoRectangle src, dst; + GstVideoRectangle src = { 0, }; + GstVideoRectangle dst = { 0, }; GstVideoRectangle mem_crop; GstXWindow *xwindow; @@ -312,7 +316,7 @@ } static void -gst_xvimagesink_xwindow_set_title (GstXvImageSink * xvimagesink, +gst_xv_image_sink_xwindow_set_title (GstXvImageSink * xvimagesink, GstXWindow * xwindow, const gchar * media_title) { if (media_title) { @@ -345,20 +349,20 @@ /* This function handles a GstXWindow creation * The width and height are the actual pixel size on the display */ static GstXWindow * -gst_xvimagesink_xwindow_new (GstXvImageSink * xvimagesink, +gst_xv_image_sink_xwindow_new (GstXvImageSink * xvimagesink, gint width, gint height) { GstXWindow *xwindow = NULL; GstXvContext *context; - g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL); + g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL); context = xvimagesink->context; xwindow = gst_xvcontext_create_xwindow (context, width, height); /* set application name as a title */ - gst_xvimagesink_xwindow_set_title (xvimagesink, xwindow, NULL); + gst_xv_image_sink_xwindow_set_title (xvimagesink, xwindow, NULL); gst_xwindow_set_event_handling (xwindow, xvimagesink->handle_events); @@ -369,9 +373,9 @@ } static void -gst_xvimagesink_xwindow_update_geometry (GstXvImageSink * xvimagesink) +gst_xv_image_sink_xwindow_update_geometry (GstXvImageSink * xvimagesink) { - g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink)); /* Update the window geometry */ g_mutex_lock (&xvimagesink->flow_lock); @@ -383,11 +387,11 @@ /* This function commits our internal colorbalance settings to our grabbed Xv port. If the context is not initialized yet it simply returns */ static void -gst_xvimagesink_update_colorbalance (GstXvImageSink * xvimagesink) +gst_xv_image_sink_update_colorbalance (GstXvImageSink * xvimagesink) { GstXvContext *context; - g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink)); /* If we haven't initialized the X context we can't update anything */ if ((context = xvimagesink->context) == NULL) @@ -401,14 +405,14 @@ and navigation. It will also listen for configure events on the window to trigger caps renegotiation so on the fly software scaling can work. */ static void -gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink) +gst_xv_image_sink_handle_xevents (GstXvImageSink * xvimagesink) { XEvent e; guint pointer_x = 0, pointer_y = 0; gboolean pointer_moved = FALSE; gboolean exposed = FALSE, configured = FALSE; - g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink)); /* Handle Interaction, produces navigation events */ @@ -514,7 +518,7 @@ g_mutex_unlock (&xvimagesink->context->lock); g_mutex_unlock (&xvimagesink->flow_lock); - gst_xvimagesink_xwindow_update_geometry (xvimagesink); + gst_xv_image_sink_xwindow_update_geometry (xvimagesink); g_mutex_lock (&xvimagesink->flow_lock); g_mutex_lock (&xvimagesink->context->lock); @@ -529,7 +533,7 @@ g_mutex_unlock (&xvimagesink->context->lock); g_mutex_unlock (&xvimagesink->flow_lock); - gst_xvimagesink_expose (GST_VIDEO_OVERLAY (xvimagesink)); + gst_xv_image_sink_expose (GST_VIDEO_OVERLAY (xvimagesink)); g_mutex_lock (&xvimagesink->flow_lock); g_mutex_lock (&xvimagesink->context->lock); @@ -567,16 +571,16 @@ } static gpointer -gst_xvimagesink_event_thread (GstXvImageSink * xvimagesink) +gst_xv_image_sink_event_thread (GstXvImageSink * xvimagesink) { - g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL); + g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL); GST_OBJECT_LOCK (xvimagesink); while (xvimagesink->running) { GST_OBJECT_UNLOCK (xvimagesink); if (xvimagesink->xwindow) { - gst_xvimagesink_handle_xevents (xvimagesink); + gst_xv_image_sink_handle_xevents (xvimagesink); } /* FIXME: do we want to align this with the framerate or anything else? */ g_usleep (G_USEC_PER_SEC / 20); @@ -589,7 +593,7 @@ } static void -gst_xvimagesink_manage_event_thread (GstXvImageSink * xvimagesink) +gst_xv_image_sink_manage_event_thread (GstXvImageSink * xvimagesink) { GThread *thread = NULL; @@ -606,7 +610,7 @@ xvimagesink->handle_expose, xvimagesink->handle_events); xvimagesink->running = TRUE; xvimagesink->event_thread = g_thread_try_new ("xvimagesink-events", - (GThreadFunc) gst_xvimagesink_event_thread, xvimagesink, NULL); + (GThreadFunc) gst_xv_image_sink_event_thread, xvimagesink, NULL); } } else { if (xvimagesink->event_thread) { @@ -629,12 +633,12 @@ /* Element stuff */ static GstCaps * -gst_xvimagesink_getcaps (GstBaseSink * bsink, GstCaps * filter) +gst_xv_image_sink_getcaps (GstBaseSink * bsink, GstCaps * filter) { GstXvImageSink *xvimagesink; GstCaps *caps; - xvimagesink = GST_XVIMAGESINK (bsink); + xvimagesink = GST_XV_IMAGE_SINK (bsink); if (xvimagesink->context) { if (filter) @@ -656,21 +660,44 @@ return caps; } +static GstBufferPool * +gst_xv_image_sink_create_pool (GstXvImageSink * xvimagesink, GstCaps * caps, + gsize size, gint min) +{ + GstBufferPool *pool; + GstStructure *config; + + pool = gst_xvimage_buffer_pool_new (xvimagesink->allocator); + + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set_params (config, caps, size, min, 0); + + if (!gst_buffer_pool_set_config (pool, config)) + goto config_failed; + + return pool; + +config_failed: + { + GST_ERROR_OBJECT (xvimagesink, "failed to set config."); + gst_object_unref (pool); + return NULL; + } +} + static gboolean -gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps) +gst_xv_image_sink_setcaps (GstBaseSink * bsink, GstCaps * caps) { GstXvImageSink *xvimagesink; GstXvContext *context; - GstStructure *structure; GstBufferPool *newpool, *oldpool; GstVideoInfo info; guint32 im_format = 0; gint video_par_n, video_par_d; /* video's PAR */ gint display_par_n, display_par_d; /* display's PAR */ guint num, den; - gint size; - xvimagesink = GST_XVIMAGESINK (bsink); + xvimagesink = GST_XV_IMAGE_SINK (bsink); context = xvimagesink->context; GST_DEBUG_OBJECT (xvimagesink, @@ -695,8 +722,6 @@ gst_xvcontext_set_colorimetry (context, &info.colorimetry); - size = info.size; - /* get aspect ratio from caps if it's present, and * convert video width and height to a display width and height * using wd / hd = wv / hv * PARv / PARd */ @@ -763,7 +788,7 @@ g_mutex_lock (&xvimagesink->flow_lock); if (!xvimagesink->xwindow) { - xvimagesink->xwindow = gst_xvimagesink_xwindow_new (xvimagesink, + xvimagesink->xwindow = gst_xv_image_sink_xwindow_new (xvimagesink, GST_VIDEO_SINK_WIDTH (xvimagesink), GST_VIDEO_SINK_HEIGHT (xvimagesink)); } @@ -775,24 +800,16 @@ xvimagesink->redraw_border = TRUE; /* create a new pool for the new configuration */ - newpool = gst_xvimage_buffer_pool_new (xvimagesink->allocator); - - structure = gst_buffer_pool_get_config (newpool); - gst_buffer_pool_config_set_params (structure, caps, size, 2, 0); - if (!gst_buffer_pool_set_config (newpool, structure)) - goto config_failed; + newpool = gst_xv_image_sink_create_pool (xvimagesink, caps, info.size, 2); + /* we don't activate the internal pool yet as it may not be needed */ oldpool = xvimagesink->pool; - /* we don't activate the pool yet, this will be done by downstream after it - * has configured the pool. If downstream does not want our pool we will - * activate it when we render into it */ xvimagesink->pool = newpool; g_mutex_unlock (&xvimagesink->flow_lock); - /* unref the old sink */ + /* deactivate and unref the old internal pool */ if (oldpool) { - /* we don't deactivate, some elements might still be using it, it will - * be deactivated when the last ref is gone */ + gst_buffer_pool_set_active (oldpool, FALSE); gst_object_unref (oldpool); } @@ -822,25 +839,19 @@ ("Error calculating the output display ratio of the video.")); return FALSE; } -config_failed: - { - GST_ERROR_OBJECT (xvimagesink, "failed to set config."); - g_mutex_unlock (&xvimagesink->flow_lock); - return FALSE; - } } static GstStateChangeReturn -gst_xvimagesink_change_state (GstElement * element, GstStateChange transition) +gst_xv_image_sink_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstXvImageSink *xvimagesink; - xvimagesink = GST_XVIMAGESINK (element); + xvimagesink = GST_XV_IMAGE_SINK (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: - if (!gst_xvimagesink_open (xvimagesink)) + if (!gst_xv_image_sink_open (xvimagesink)) goto error; break; case GST_STATE_CHANGE_READY_TO_PAUSED: @@ -869,7 +880,7 @@ g_mutex_unlock (&xvimagesink->flow_lock); break; case GST_STATE_CHANGE_READY_TO_NULL: - gst_xvimagesink_close (xvimagesink); + gst_xv_image_sink_close (xvimagesink); break; default: break; @@ -883,12 +894,12 @@ } static void -gst_xvimagesink_get_times (GstBaseSink * bsink, GstBuffer * buf, +gst_xv_image_sink_get_times (GstBaseSink * bsink, GstBuffer * buf, GstClockTime * start, GstClockTime * end) { GstXvImageSink *xvimagesink; - xvimagesink = GST_XVIMAGESINK (bsink); + xvimagesink = GST_XV_IMAGE_SINK (bsink); if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { *start = GST_BUFFER_TIMESTAMP (buf); @@ -905,14 +916,14 @@ } static GstFlowReturn -gst_xvimagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf) +gst_xv_image_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) { GstFlowReturn res; GstXvImageSink *xvimagesink; GstBuffer *to_put = NULL; GstMemory *mem; - xvimagesink = GST_XVIMAGESINK (vsink); + xvimagesink = GST_XV_IMAGE_SINK (vsink); if (gst_buffer_n_memory (buf) == 1 && (mem = gst_buffer_peek_memory (buf, 0)) && gst_xvimage_memory_is_from_context (mem, xvimagesink->context)) { @@ -962,7 +973,7 @@ gst_video_frame_unmap (&src); } - if (!gst_xvimagesink_xvimage_put (xvimagesink, to_put)) + if (!gst_xv_image_sink_xvimage_put (xvimagesink, to_put)) goto no_window; done: @@ -1008,9 +1019,9 @@ } static gboolean -gst_xvimagesink_event (GstBaseSink * sink, GstEvent * event) +gst_xv_image_sink_event (GstBaseSink * sink, GstEvent * event) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (sink); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (sink); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_TAG:{ @@ -1022,7 +1033,7 @@ if (title) { GST_DEBUG_OBJECT (xvimagesink, "got tags, title='%s'", title); - gst_xvimagesink_xwindow_set_title (xvimagesink, xvimagesink->xwindow, + gst_xv_image_sink_xwindow_set_title (xvimagesink, xvimagesink->xwindow, title); g_free (title); @@ -1036,11 +1047,10 @@ } static gboolean -gst_xvimagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query) +gst_xv_image_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (bsink); - GstBufferPool *pool; - GstStructure *config; + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (bsink); + GstBufferPool *pool = NULL; GstCaps *caps; guint size; gboolean need_pool; @@ -1050,44 +1060,22 @@ if (caps == NULL) goto no_caps; - g_mutex_lock (&xvimagesink->flow_lock); - if ((pool = xvimagesink->pool)) - gst_object_ref (pool); - g_mutex_unlock (&xvimagesink->flow_lock); - - if (pool != NULL) { - GstCaps *pcaps; - - /* we had a pool, check caps */ - GST_DEBUG_OBJECT (xvimagesink, "check existing pool caps"); - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL); - - if (!gst_caps_is_equal (caps, pcaps)) { - GST_DEBUG_OBJECT (xvimagesink, "pool has different caps"); - /* different caps, we can't use this pool */ - gst_object_unref (pool); - pool = NULL; - } - gst_structure_free (config); - } - if (pool == NULL && need_pool) { + if (need_pool) { GstVideoInfo info; if (!gst_video_info_from_caps (&info, caps)) goto invalid_caps; GST_DEBUG_OBJECT (xvimagesink, "create new pool"); - pool = gst_xvimage_buffer_pool_new (xvimagesink->allocator); + pool = gst_xv_image_sink_create_pool (xvimagesink, caps, info.size, 0); /* the normal size of a frame */ size = info.size; - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, caps, size, 0, 0); - if (!gst_buffer_pool_set_config (pool, config)) - goto config_failed; + if (pool == NULL) + goto no_pool; } + if (pool) { /* we need at least 2 buffer because we hold on to the last one */ gst_query_add_allocation_pool (query, pool, size, 2, 0); @@ -1111,94 +1099,100 @@ GST_DEBUG_OBJECT (bsink, "invalid caps specified"); return FALSE; } -config_failed: +no_pool: { - GST_DEBUG_OBJECT (bsink, "failed setting config"); - gst_object_unref (pool); + /* Already warned in create_pool */ return FALSE; } } /* Interfaces stuff */ static void -gst_xvimagesink_navigation_send_event (GstNavigation * navigation, +gst_xv_image_sink_navigation_send_event (GstNavigation * navigation, GstStructure * structure) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (navigation); - GstPad *peer; + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (navigation); + gboolean handled = FALSE; + GstEvent *event = NULL; - if ((peer = gst_pad_get_peer (GST_VIDEO_SINK_PAD (xvimagesink)))) { - GstEvent *event; - GstVideoRectangle src, dst, result; - gdouble x, y, xscale = 1.0, yscale = 1.0; - GstXWindow *xwindow; + GstVideoRectangle src = { 0, }; + GstVideoRectangle dst = { 0, }; + GstVideoRectangle result; + gdouble x, y, xscale = 1.0, yscale = 1.0; + GstXWindow *xwindow; - event = gst_event_new_navigation (structure); + /* We take the flow_lock while we look at the window */ + g_mutex_lock (&xvimagesink->flow_lock); - /* We take the flow_lock while we look at the window */ - g_mutex_lock (&xvimagesink->flow_lock); + if (!(xwindow = xvimagesink->xwindow)) { + g_mutex_unlock (&xvimagesink->flow_lock); + return; + } - if (!(xwindow = xvimagesink->xwindow)) { - g_mutex_unlock (&xvimagesink->flow_lock); - return; - } + if (xvimagesink->keep_aspect) { + /* We get the frame position using the calculated geometry from _setcaps + that respect pixel aspect ratios */ + src.w = GST_VIDEO_SINK_WIDTH (xvimagesink); + src.h = GST_VIDEO_SINK_HEIGHT (xvimagesink); + dst.w = xwindow->render_rect.w; + dst.h = xwindow->render_rect.h; - if (xvimagesink->keep_aspect) { - /* We get the frame position using the calculated geometry from _setcaps - that respect pixel aspect ratios */ - src.w = GST_VIDEO_SINK_WIDTH (xvimagesink); - src.h = GST_VIDEO_SINK_HEIGHT (xvimagesink); - dst.w = xwindow->render_rect.w; - dst.h = xwindow->render_rect.h; - - gst_video_sink_center_rect (src, dst, &result, TRUE); - result.x += xwindow->render_rect.x; - result.y += xwindow->render_rect.y; - } else { - memcpy (&result, &xwindow->render_rect, sizeof (GstVideoRectangle)); - } + gst_video_sink_center_rect (src, dst, &result, TRUE); + result.x += xwindow->render_rect.x; + result.y += xwindow->render_rect.y; + } else { + memcpy (&result, &xwindow->render_rect, sizeof (GstVideoRectangle)); + } - g_mutex_unlock (&xvimagesink->flow_lock); + g_mutex_unlock (&xvimagesink->flow_lock); - /* We calculate scaling using the original video frames geometry to include - pixel aspect ratio scaling. */ - xscale = (gdouble) xvimagesink->video_width / result.w; - yscale = (gdouble) xvimagesink->video_height / result.h; - - /* Converting pointer coordinates to the non scaled geometry */ - if (gst_structure_get_double (structure, "pointer_x", &x)) { - x = MIN (x, result.x + result.w); - x = MAX (x - result.x, 0); - gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, - (gdouble) x * xscale, NULL); - } - if (gst_structure_get_double (structure, "pointer_y", &y)) { - y = MIN (y, result.y + result.h); - y = MAX (y - result.y, 0); - gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, - (gdouble) y * yscale, NULL); - } + /* We calculate scaling using the original video frames geometry to include + pixel aspect ratio scaling. */ + xscale = (gdouble) xvimagesink->video_width / result.w; + yscale = (gdouble) xvimagesink->video_height / result.h; + + /* Converting pointer coordinates to the non scaled geometry */ + if (gst_structure_get_double (structure, "pointer_x", &x)) { + x = MIN (x, result.x + result.w); + x = MAX (x - result.x, 0); + gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, + (gdouble) x * xscale, NULL); + } + if (gst_structure_get_double (structure, "pointer_y", &y)) { + y = MIN (y, result.y + result.h); + y = MAX (y - result.y, 0); + gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, + (gdouble) y * yscale, NULL); + } + + event = gst_event_new_navigation (structure); + if (event) { + gst_event_ref (event); + handled = gst_pad_push_event (GST_VIDEO_SINK_PAD (xvimagesink), event); - gst_pad_send_event (peer, event); - gst_object_unref (peer); + if (!handled) + gst_element_post_message ((GstElement *) xvimagesink, + gst_navigation_message_new_event ((GstObject *) xvimagesink, event)); + + gst_event_unref (event); } } static void -gst_xvimagesink_navigation_init (GstNavigationInterface * iface) +gst_xv_image_sink_navigation_init (GstNavigationInterface * iface) { - iface->send_event = gst_xvimagesink_navigation_send_event; + iface->send_event = gst_xv_image_sink_navigation_send_event; } static void -gst_xvimagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id) +gst_xv_image_sink_set_window_handle (GstVideoOverlay * overlay, guintptr id) { XID xwindow_id = id; - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay); GstXWindow *xwindow = NULL; GstXvContext *context; - g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink)); g_mutex_lock (&xvimagesink->flow_lock); @@ -1219,7 +1213,7 @@ context = xvimagesink->context; - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); /* If a window is there already we destroy it */ if (xvimagesink->xwindow) { @@ -1234,7 +1228,7 @@ if (GST_VIDEO_SINK_WIDTH (xvimagesink) && GST_VIDEO_SINK_HEIGHT (xvimagesink)) { xwindow = - gst_xvimagesink_xwindow_new (xvimagesink, + gst_xv_image_sink_xwindow_new (xvimagesink, GST_VIDEO_SINK_WIDTH (xvimagesink), GST_VIDEO_SINK_HEIGHT (xvimagesink)); } @@ -1250,20 +1244,20 @@ } static void -gst_xvimagesink_expose (GstVideoOverlay * overlay) +gst_xv_image_sink_expose (GstVideoOverlay * overlay) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay); GST_DEBUG ("doing expose"); - gst_xvimagesink_xwindow_update_geometry (xvimagesink); - gst_xvimagesink_xvimage_put (xvimagesink, NULL); + gst_xv_image_sink_xwindow_update_geometry (xvimagesink); + gst_xv_image_sink_xvimage_put (xvimagesink, NULL); } static void -gst_xvimagesink_set_event_handling (GstVideoOverlay * overlay, +gst_xv_image_sink_set_event_handling (GstVideoOverlay * overlay, gboolean handle_events) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay); g_mutex_lock (&xvimagesink->flow_lock); xvimagesink->handle_events = handle_events; @@ -1273,10 +1267,10 @@ } static void -gst_xvimagesink_set_render_rectangle (GstVideoOverlay * overlay, gint x, gint y, - gint width, gint height) +gst_xv_image_sink_set_render_rectangle (GstVideoOverlay * overlay, gint x, + gint y, gint width, gint height) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay); g_mutex_lock (&xvimagesink->flow_lock); if (G_LIKELY (xvimagesink->xwindow)) @@ -1286,20 +1280,20 @@ } static void -gst_xvimagesink_video_overlay_init (GstVideoOverlayInterface * iface) +gst_xv_image_sink_video_overlay_init (GstVideoOverlayInterface * iface) { - iface->set_window_handle = gst_xvimagesink_set_window_handle; - iface->expose = gst_xvimagesink_expose; - iface->handle_events = gst_xvimagesink_set_event_handling; - iface->set_render_rectangle = gst_xvimagesink_set_render_rectangle; + iface->set_window_handle = gst_xv_image_sink_set_window_handle; + iface->expose = gst_xv_image_sink_expose; + iface->handle_events = gst_xv_image_sink_set_event_handling; + iface->set_render_rectangle = gst_xv_image_sink_set_render_rectangle; } static const GList * -gst_xvimagesink_colorbalance_list_channels (GstColorBalance * balance) +gst_xv_image_sink_colorbalance_list_channels (GstColorBalance * balance) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance); - g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL); + g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL); if (xvimagesink->context) return xvimagesink->context->channels_list; @@ -1308,12 +1302,12 @@ } static void -gst_xvimagesink_colorbalance_set_value (GstColorBalance * balance, +gst_xv_image_sink_colorbalance_set_value (GstColorBalance * balance, GstColorBalanceChannel * channel, gint value) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance); - g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink)); g_return_if_fail (channel->label != NULL); xvimagesink->config.cb_changed = TRUE; @@ -1335,17 +1329,17 @@ return; } - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); } static gint -gst_xvimagesink_colorbalance_get_value (GstColorBalance * balance, +gst_xv_image_sink_colorbalance_get_value (GstColorBalance * balance, GstColorBalanceChannel * channel) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance); gint value = 0; - g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), 0); + g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), 0); g_return_val_if_fail (channel->label != NULL, 0); if (g_ascii_strcasecmp (channel->label, "XV_HUE") == 0) { @@ -1368,23 +1362,23 @@ } static GstColorBalanceType -gst_xvimagesink_colorbalance_get_balance_type (GstColorBalance * balance) +gst_xv_image_sink_colorbalance_get_balance_type (GstColorBalance * balance) { return GST_COLOR_BALANCE_HARDWARE; } static void -gst_xvimagesink_colorbalance_init (GstColorBalanceInterface * iface) +gst_xv_image_sink_colorbalance_init (GstColorBalanceInterface * iface) { - iface->list_channels = gst_xvimagesink_colorbalance_list_channels; - iface->set_value = gst_xvimagesink_colorbalance_set_value; - iface->get_value = gst_xvimagesink_colorbalance_get_value; - iface->get_balance_type = gst_xvimagesink_colorbalance_get_balance_type; + iface->list_channels = gst_xv_image_sink_colorbalance_list_channels; + iface->set_value = gst_xv_image_sink_colorbalance_set_value; + iface->get_value = gst_xv_image_sink_colorbalance_get_value; + iface->get_balance_type = gst_xv_image_sink_colorbalance_get_balance_type; } #if 0 static const GList * -gst_xvimagesink_probe_get_properties (GstPropertyProbe * probe) +gst_xv_image_sink_probe_get_properties (GstPropertyProbe * probe) { GObjectClass *klass = G_OBJECT_GET_CLASS (probe); static GList *list = NULL; @@ -1405,10 +1399,10 @@ } static void -gst_xvimagesink_probe_probe_property (GstPropertyProbe * probe, +gst_xv_image_sink_probe_probe_property (GstPropertyProbe * probe, guint prop_id, const GParamSpec * pspec) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe); switch (prop_id) { case PROP_DEVICE: @@ -1419,7 +1413,7 @@ "probing device list and get capabilities"); if (!xvimagesink->context) { GST_DEBUG_OBJECT (xvimagesink, "generating context"); - xvimagesink->context = gst_xvimagesink_context_get (xvimagesink); + xvimagesink->context = gst_xv_image_sink_context_get (xvimagesink); } break; default: @@ -1429,10 +1423,10 @@ } static gboolean -gst_xvimagesink_probe_needs_probe (GstPropertyProbe * probe, +gst_xv_image_sink_probe_needs_probe (GstPropertyProbe * probe, guint prop_id, const GParamSpec * pspec) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe); gboolean ret = FALSE; switch (prop_id) { @@ -1455,10 +1449,10 @@ } static GValueArray * -gst_xvimagesink_probe_get_values (GstPropertyProbe * probe, +gst_xv_image_sink_probe_get_values (GstPropertyProbe * probe, guint prop_id, const GParamSpec * pspec) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe); + GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe); GValueArray *array = NULL; if (G_UNLIKELY (!xvimagesink->context)) { @@ -1533,13 +1527,13 @@ } static void -gst_xvimagesink_property_probe_interface_init (GstPropertyProbeInterface * +gst_xv_image_sink_property_probe_interface_init (GstPropertyProbeInterface * iface) { - iface->get_properties = gst_xvimagesink_probe_get_properties; - iface->probe_property = gst_xvimagesink_probe_probe_property; - iface->needs_probe = gst_xvimagesink_probe_needs_probe; - iface->get_values = gst_xvimagesink_probe_get_values; + iface->get_properties = gst_xv_image_sink_probe_get_properties; + iface->probe_property = gst_xv_image_sink_probe_probe_property; + iface->needs_probe = gst_xv_image_sink_probe_needs_probe; + iface->get_values = gst_xv_image_sink_probe_get_values; } #endif @@ -1550,35 +1544,35 @@ /* =========================================== */ static void -gst_xvimagesink_set_property (GObject * object, guint prop_id, +gst_xv_image_sink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstXvImageSink *xvimagesink; - g_return_if_fail (GST_IS_XVIMAGESINK (object)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (object)); - xvimagesink = GST_XVIMAGESINK (object); + xvimagesink = GST_XV_IMAGE_SINK (object); switch (prop_id) { case PROP_HUE: xvimagesink->config.hue = g_value_get_int (value); xvimagesink->config.cb_changed = TRUE; - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); break; case PROP_CONTRAST: xvimagesink->config.contrast = g_value_get_int (value); xvimagesink->config.cb_changed = TRUE; - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); break; case PROP_BRIGHTNESS: xvimagesink->config.brightness = g_value_get_int (value); xvimagesink->config.cb_changed = TRUE; - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); break; case PROP_SATURATION: xvimagesink->config.saturation = g_value_get_int (value); xvimagesink->config.cb_changed = TRUE; - gst_xvimagesink_update_colorbalance (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); break; case PROP_DISPLAY: g_free (xvimagesink->config.display_name); @@ -1607,16 +1601,16 @@ xvimagesink->keep_aspect = g_value_get_boolean (value); break; case PROP_HANDLE_EVENTS: - gst_xvimagesink_set_event_handling (GST_VIDEO_OVERLAY (xvimagesink), + gst_xv_image_sink_set_event_handling (GST_VIDEO_OVERLAY (xvimagesink), g_value_get_boolean (value)); - gst_xvimagesink_manage_event_thread (xvimagesink); + gst_xv_image_sink_manage_event_thread (xvimagesink); break; case PROP_DEVICE: xvimagesink->config.adaptor_nr = atoi (g_value_get_string (value)); break; case PROP_HANDLE_EXPOSE: xvimagesink->handle_expose = g_value_get_boolean (value); - gst_xvimagesink_manage_event_thread (xvimagesink); + gst_xv_image_sink_manage_event_thread (xvimagesink); break; case PROP_DOUBLE_BUFFER: xvimagesink->double_buffer = g_value_get_boolean (value); @@ -1637,14 +1631,14 @@ } static void -gst_xvimagesink_get_property (GObject * object, guint prop_id, +gst_xv_image_sink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstXvImageSink *xvimagesink; - g_return_if_fail (GST_IS_XVIMAGESINK (object)); + g_return_if_fail (GST_IS_XV_IMAGE_SINK (object)); - xvimagesink = GST_XVIMAGESINK (object); + xvimagesink = GST_XV_IMAGE_SINK (object); switch (prop_id) { case PROP_HUE: @@ -1726,7 +1720,7 @@ } static gboolean -gst_xvimagesink_open (GstXvImageSink * xvimagesink) +gst_xv_image_sink_open (GstXvImageSink * xvimagesink) { GError *error = NULL; @@ -1753,8 +1747,8 @@ /* call XSynchronize with the current value of synchronous */ gst_xvcontext_set_synchronous (xvimagesink->context, xvimagesink->synchronous); - gst_xvimagesink_update_colorbalance (xvimagesink); - gst_xvimagesink_manage_event_thread (xvimagesink); + gst_xv_image_sink_update_colorbalance (xvimagesink); + gst_xv_image_sink_manage_event_thread (xvimagesink); return TRUE; @@ -1762,13 +1756,14 @@ { gst_element_message_full (GST_ELEMENT (xvimagesink), GST_MESSAGE_ERROR, error->domain, error->code, g_strdup ("Could not initialise Xv output"), - error->message, __FILE__, GST_FUNCTION, __LINE__); + g_strdup (error->message), __FILE__, GST_FUNCTION, __LINE__); + g_clear_error (&error); return FALSE; } } static void -gst_xvimagesink_close (GstXvImageSink * xvimagesink) +gst_xv_image_sink_close (GstXvImageSink * xvimagesink) { GThread *thread; GstXvContext *context; @@ -1822,13 +1817,13 @@ * We use mutexes and don't reset stuff to NULL here so let's register * as a finalize. */ static void -gst_xvimagesink_finalize (GObject * object) +gst_xv_image_sink_finalize (GObject * object) { GstXvImageSink *xvimagesink; - xvimagesink = GST_XVIMAGESINK (object); + xvimagesink = GST_XV_IMAGE_SINK (object); - gst_xvimagesink_close (xvimagesink); + gst_xv_image_sink_close (xvimagesink); gst_xvcontext_config_clear (&xvimagesink->config); @@ -1843,7 +1838,7 @@ } static void -gst_xvimagesink_init (GstXvImageSink * xvimagesink) +gst_xv_image_sink_init (GstXvImageSink * xvimagesink) { xvimagesink->config.display_name = NULL; xvimagesink->config.adaptor_nr = 0; @@ -1881,7 +1876,7 @@ } static void -gst_xvimagesink_class_init (GstXvImageSinkClass * klass) +gst_xv_image_sink_class_init (GstXvImageSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; @@ -1895,8 +1890,8 @@ parent_class = g_type_class_peek_parent (klass); - gobject_class->set_property = gst_xvimagesink_set_property; - gobject_class->get_property = gst_xvimagesink_get_property; + gobject_class->set_property = gst_xv_image_sink_set_property; + gobject_class->get_property = gst_xv_image_sink_get_property; g_object_class_install_property (gobject_class, PROP_CONTRAST, g_param_spec_int ("contrast", "Contrast", "The contrast of the video", @@ -2011,24 +2006,26 @@ "Height of the window", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - gobject_class->finalize = gst_xvimagesink_finalize; + gobject_class->finalize = gst_xv_image_sink_finalize; gst_element_class_set_static_metadata (gstelement_class, "Video sink", "Sink/Video", "A Xv based videosink", "Julien Moutte "); gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&gst_xvimagesink_sink_template_factory)); + gst_static_pad_template_get (&gst_xv_image_sink_sink_template_factory)); gstelement_class->change_state = - GST_DEBUG_FUNCPTR (gst_xvimagesink_change_state); + GST_DEBUG_FUNCPTR (gst_xv_image_sink_change_state); - gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_getcaps); - gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_setcaps); - gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_xvimagesink_get_times); + gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xv_image_sink_getcaps); + gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xv_image_sink_setcaps); + gstbasesink_class->get_times = + GST_DEBUG_FUNCPTR (gst_xv_image_sink_get_times); gstbasesink_class->propose_allocation = - GST_DEBUG_FUNCPTR (gst_xvimagesink_propose_allocation); - gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xvimagesink_event); + GST_DEBUG_FUNCPTR (gst_xv_image_sink_propose_allocation); + gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xv_image_sink_event); - videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_xvimagesink_show_frame); + videosink_class->show_frame = + GST_DEBUG_FUNCPTR (gst_xv_image_sink_show_frame); } diff -Nru gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagesink.h gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagesink.h --- gst-plugins-base1.0-1.4.3/sys/xvimage/xvimagesink.h 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/sys/xvimage/xvimagesink.h 2015-10-22 08:01:34.000000000 +0000 @@ -17,8 +17,8 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __GST_XVIMAGESINK_H__ -#define __GST_XVIMAGESINK_H__ +#ifndef __GST_XV_IMAGE_SINK_H__ +#define __GST_XV_IMAGE_SINK_H__ #include @@ -26,16 +26,16 @@ #include G_BEGIN_DECLS -#define GST_TYPE_XVIMAGESINK \ - (gst_xvimagesink_get_type()) -#define GST_XVIMAGESINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XVIMAGESINK, GstXvImageSink)) -#define GST_XVIMAGESINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XVIMAGESINK, GstXvImageSinkClass)) -#define GST_IS_XVIMAGESINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XVIMAGESINK)) -#define GST_IS_XVIMAGESINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XVIMAGESINK)) +#define GST_TYPE_XV_IMAGE_SINK \ + (gst_xv_image_sink_get_type()) +#define GST_XV_IMAGE_SINK(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XV_IMAGE_SINK, GstXvImageSink)) +#define GST_XV_IMAGE_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XV_IMAGE_SINK, GstXvImageSinkClass)) +#define GST_IS_XV_IMAGE_SINK(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XV_IMAGE_SINK)) +#define GST_IS_XV_IMAGE_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XV_IMAGE_SINK)) typedef struct _GstXvImageSink GstXvImageSink; typedef struct _GstXvImageSinkClass GstXvImageSinkClass; @@ -127,7 +127,7 @@ GstVideoSinkClass parent_class; }; -GType gst_xvimagesink_get_type (void); +GType gst_xv_image_sink_get_type (void); G_END_DECLS -#endif /* __GST_XVIMAGESINK_H__ */ +#endif /* __GST_XV_IMAGE_SINK_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/test-driver gst-plugins-base1.0-1.6.1/test-driver --- gst-plugins-base1.0-1.4.3/test-driver 2014-08-27 10:22:39.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/test-driver 2015-10-30 12:09:11.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2013-07-13.22; # UTC -# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -106,11 +106,14 @@ # Test script is run here. "$@" >$log_file 2>&1 estatus=$? + if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 + tweaked_estatus=1 +else + tweaked_estatus=$estatus fi -case $estatus:$expect_failure in +case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; @@ -119,6 +122,12 @@ *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + # Report outcome to console. echo "${col}${res}${std}: $test_name" diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/adder.c gst-plugins-base1.0-1.6.1/tests/check/elements/adder.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/adder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/adder.c 2015-10-22 08:01:34.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include static GMainLoop *main_loop; @@ -85,7 +86,7 @@ GstPad *pad; filter_caps = gst_caps_new_simple ("audio/x-raw", - "format", G_TYPE_STRING, "F32LE", + "format", G_TYPE_STRING, GST_AUDIO_NE (F32), "layout", G_TYPE_STRING, "interleaved", "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1, NULL); @@ -417,7 +418,7 @@ /* cleanup */ g_main_loop_unref (main_loop); gst_consistency_checker_free (consist); - gst_event_ref (play_seek_event); + gst_event_unref (play_seek_event); gst_bus_remove_signal_watch (bus); gst_object_unref (bus); gst_object_unref (bin); @@ -523,7 +524,7 @@ /* cleanup */ g_main_loop_unref (main_loop); - gst_event_ref (play_seek_event); + gst_event_unref (play_seek_event); gst_consistency_checker_free (consist); gst_bus_remove_signal_watch (bus); gst_object_unref (bus); @@ -690,6 +691,7 @@ g_main_loop_unref (main_loop); if (play_seek_event) gst_event_unref (play_seek_event); + gst_bus_remove_signal_watch (bus); gst_object_unref (bus); gst_object_unref (bin); } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/appsink.c gst-plugins-base1.0-1.6.1/tests/check/elements/appsink.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/appsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/appsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -313,6 +313,41 @@ GST_END_TEST; +GST_START_TEST (test_segment) +{ + GstElement *sink; + GstSegment segment; + GstBuffer *buffer; + GstSample *pulled_preroll; + GstSample *pulled_sample; + + sink = setup_appsink (); + + gst_segment_init (&segment, GST_FORMAT_TIME); + segment.start = 2 * GST_SECOND; + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))); + + ASSERT_SET_STATE (sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); + + buffer = gst_buffer_new_and_alloc (4); + fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK); + + g_signal_emit_by_name (sink, "pull-preroll", &pulled_preroll); + fail_unless (gst_segment_is_equal (&segment, + gst_sample_get_segment (pulled_preroll))); + gst_sample_unref (pulled_preroll); + + g_signal_emit_by_name (sink, "pull-sample", &pulled_sample); + fail_unless (gst_segment_is_equal (&segment, + gst_sample_get_segment (pulled_sample))); + gst_sample_unref (pulled_sample); + + ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); + cleanup_appsink (sink); +} + +GST_END_TEST; + static Suite * appsink_suite (void) { @@ -326,6 +361,7 @@ tcase_add_test (tc_chain, test_notify1); tcase_add_test (tc_chain, test_buffer_list_fallback); tcase_add_test (tc_chain, test_buffer_list_fallback_signal); + tcase_add_test (tc_chain, test_segment); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/appsrc.c gst-plugins-base1.0-1.6.1/tests/check/elements/appsrc.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/appsrc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/appsrc.c 2015-10-22 08:01:34.000000000 +0000 @@ -18,10 +18,20 @@ * Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include +#ifdef HAVE_VALGRIND +#include +#else +#define RUNNING_ON_VALGRIND FALSE +#endif + #define SAMPLE_CAPS "application/x-gst-check-test" static GstPad *mysinkpad; @@ -115,7 +125,6 @@ typedef struct { - GMainLoop *loop; GstElement *source; GstElement *sink; } ProgramData; @@ -137,63 +146,6 @@ return GST_FLOW_OK; } -/* called when we get a GstMessage from the source pipeline when we get EOS, we - * notify the appsrc of it. */ -static gboolean -on_source_message (GstBus * bus, GstMessage * message, ProgramData * data) -{ - GstElement *source; - gboolean ret = TRUE; - - switch (GST_MESSAGE_TYPE (message)) { - case GST_MESSAGE_EOS: - source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); - fail_unless (gst_app_src_end_of_stream (GST_APP_SRC (source)) == - GST_FLOW_OK); - break; - case GST_MESSAGE_ERROR: - g_main_loop_quit (data->loop); - ret = FALSE; - break; - default: - break; - } - return ret; -} - -static gboolean -on_sink_message (GstBus * bus, GstMessage * message, ProgramData * data) -{ - gboolean ret = TRUE; - - switch (GST_MESSAGE_TYPE (message)) { - case GST_MESSAGE_EOS: - g_main_loop_quit (data->loop); - ret = FALSE; - break; - case GST_MESSAGE_ERROR: - ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); - ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); - g_main_loop_quit (data->loop); - ret = FALSE; - break; - default: - break; - } - return ret; -} - -static gboolean -error_timeout (ProgramData * data) -{ - GstBus *bus; - bus = gst_element_get_bus (data->sink); - gst_bus_post (bus, gst_message_new_error (GST_OBJECT (data->sink), NULL, - "test error")); - gst_object_unref (bus); - return FALSE; -} - /* * appsink => appsrc pipelines executed 100 times: * - appsink pipeline has sync=false @@ -207,61 +159,260 @@ GST_START_TEST (test_appsrc_block_deadlock) { - int i = 0; - int num_iteration = 100; - while (i < num_iteration) { - ProgramData *data = NULL; - GstBus *bus = NULL; - GstElement *testsink = NULL; + GstElement *testsink; + ProgramData *data; - data = g_new0 (ProgramData, 1); + GST_INFO ("iteration %d", __i__); - data->loop = g_main_loop_new (NULL, FALSE); + data = g_new0 (ProgramData, 1); - data->source = - gst_parse_launch ("videotestsrc ! appsink sync=false name=testsink", - NULL); + data->source = + gst_parse_launch ("videotestsrc ! video/x-raw,width=16,height=16 ! " + "appsink sync=false name=testsink", NULL); - fail_unless (data->source != NULL); + fail_unless (data->source != NULL); - bus = gst_element_get_bus (data->source); - gst_bus_add_watch (bus, (GstBusFunc) on_source_message, data); - gst_object_unref (bus); + app_callbacks.new_sample = on_new_sample_from_source; + testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink"); + gst_app_sink_set_callbacks (GST_APP_SINK_CAST (testsink), &app_callbacks, + data, NULL); - app_callbacks.new_sample = on_new_sample_from_source; - testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink"); - gst_app_sink_set_callbacks (GST_APP_SINK_CAST (testsink), &app_callbacks, - data, NULL); + gst_object_unref (testsink); - gst_object_unref (testsink); + data->sink = + gst_parse_launch + ("appsrc name=testsource block=1 max-bytes=1000 is-live=true ! " + "fakesink sync=true", NULL); - data->sink = - gst_parse_launch - ("appsrc name=testsource block=1 max-bytes=1000 is-live=true ! fakesink sync=true", - NULL); + fail_unless (data->sink != NULL); - fail_unless (data->sink != NULL); + ASSERT_SET_STATE (data->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); + ASSERT_SET_STATE (data->source, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); - bus = gst_element_get_bus (data->sink); - gst_bus_add_watch (bus, (GstBusFunc) on_sink_message, data); - gst_object_unref (bus); + /* wait for preroll */ + gst_element_get_state (data->source, NULL, NULL, GST_CLOCK_TIME_NONE); + gst_element_get_state (data->sink, NULL, NULL, GST_CLOCK_TIME_NONE); - g_timeout_add (150, (GSourceFunc) error_timeout, data); + g_usleep (50 * (G_USEC_PER_SEC / 1000)); - ASSERT_SET_STATE (data->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); - ASSERT_SET_STATE (data->source, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); + ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); + ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); - g_main_loop_run (data->loop); + gst_object_unref (data->source); + gst_object_unref (data->sink); + g_free (data); +} + +GST_END_TEST; + +typedef struct +{ + GstCaps *caps1; + GstCaps *caps2; + GstCaps *expected_caps; +} Helper; - ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); - ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); +static void +caps_notify_cb (GObject * obj, GObject * child, GParamSpec * pspec, Helper * h) +{ + GstCaps *caps = NULL; - gst_object_unref (data->source); - gst_object_unref (data->sink); - g_main_loop_unref (data->loop); - g_free (data); - i++; - GST_INFO ("appsrc deadlock test iteration number %d/%d", i, num_iteration); + g_object_get (child, "caps", &caps, NULL); + if (caps) { + GST_LOG_OBJECT (child, "expected caps: %" GST_PTR_FORMAT, h->expected_caps); + GST_LOG_OBJECT (child, "caps set to : %" GST_PTR_FORMAT, caps); + fail_unless (gst_caps_is_equal (caps, h->expected_caps)); + gst_caps_unref (caps); + } +} + +static void +handoff_cb (GstElement * sink, GstBuffer * buf, GstPad * pad, Helper * h) +{ + /* have our buffer, now the caps should change */ + h->expected_caps = h->caps2; + GST_INFO ("got buffer, expect caps %" GST_PTR_FORMAT " next", h->caps2); +} + +/* Make sure that if set_caps() is called twice before the source is started, + * the caps are just replaced and not put into the internal queue */ +GST_START_TEST (test_appsrc_set_caps_twice) +{ + GstElement *pipe, *src, *sink; + GstMessage *msg; + GstCaps *caps; + Helper h; + + h.caps1 = gst_caps_new_simple ("foo/bar", "bleh", G_TYPE_INT, 2, NULL); + h.caps2 = gst_caps_new_simple ("bar/foo", "xyz", G_TYPE_INT, 3, NULL); + + pipe = gst_pipeline_new ("pipeline"); + src = gst_element_factory_make ("appsrc", NULL); + sink = gst_element_factory_make ("fakesink", NULL); + gst_bin_add_many (GST_BIN (pipe), src, sink, NULL); + gst_element_link (src, sink); + + g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_notify_cb), &h); + + g_object_set (sink, "signal-handoffs", TRUE, NULL); + g_signal_connect (sink, "handoff", G_CALLBACK (handoff_cb), &h); + + /* case 1: set caps to caps1, then set again to caps2, all this before + * appsrc is started and before any buffers are in the queue yet. We don't + * want to see any trace of caps1 during negotiation in this case. */ + gst_app_src_set_caps (GST_APP_SRC (src), h.caps1); + caps = gst_app_src_get_caps (GST_APP_SRC (src)); + fail_unless (gst_caps_is_equal (caps, h.caps1)); + gst_caps_unref (caps); + + gst_app_src_set_caps (GST_APP_SRC (src), h.caps2); + caps = gst_app_src_get_caps (GST_APP_SRC (src)); + fail_unless (gst_caps_is_equal (caps, h.caps2)); + gst_caps_unref (caps); + + gst_app_src_end_of_stream (GST_APP_SRC (src)); + + h.expected_caps = h.caps2; + + gst_element_set_state (pipe, GST_STATE_PLAYING); + + msg = + gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS); + gst_message_unref (msg); + + gst_element_set_state (pipe, GST_STATE_NULL); + gst_object_unref (pipe); + + GST_INFO ("Case #2"); + + /* case 2: set caps to caps1, then push a buffer and set to caps2, again + * before appsrc is started. In this case appsrc should negotiate to caps1 + * first, and then caps2 after pushing the first buffer. */ + + /* We're creating a new pipeline/appsrc here because appsrc's behaviour + * change slightly after setting it to NULL/READY and then re-using it */ + pipe = gst_pipeline_new ("pipeline"); + src = gst_element_factory_make ("appsrc", NULL); + sink = gst_element_factory_make ("fakesink", NULL); + gst_bin_add_many (GST_BIN (pipe), src, sink, NULL); + gst_element_link (src, sink); + + g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_notify_cb), &h); + + g_object_set (sink, "signal-handoffs", TRUE, NULL); + g_signal_connect (sink, "handoff", G_CALLBACK (handoff_cb), &h); + + gst_app_src_set_caps (GST_APP_SRC (src), h.caps1); + caps = gst_app_src_get_caps (GST_APP_SRC (src)); + fail_unless (gst_caps_is_equal (caps, h.caps1)); + gst_caps_unref (caps); + + /* first caps1, then buffer, then later caps2 */ + h.expected_caps = h.caps1; + + gst_element_set_state (pipe, GST_STATE_PLAYING); + + gst_app_src_push_buffer (GST_APP_SRC (src), gst_buffer_new ()); + + gst_app_src_set_caps (GST_APP_SRC (src), h.caps2); + caps = gst_app_src_get_caps (GST_APP_SRC (src)); + fail_unless (gst_caps_is_equal (caps, h.caps2)); + gst_caps_unref (caps); + + gst_app_src_end_of_stream (GST_APP_SRC (src)); + + msg = + gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS); + gst_message_unref (msg); + + gst_element_set_state (pipe, GST_STATE_NULL); + gst_object_unref (pipe); + + gst_caps_unref (h.caps2); + gst_caps_unref (h.caps1); +} + +GST_END_TEST; + +static gboolean +seek_cb (GstAppSrc * src, guint64 offset, gpointer data) +{ + /* Return fake true */ + return TRUE; +} + +static void +caps_cb (GObject * obj, GObject * child, GParamSpec * pspec, + GstCaps ** received_caps) +{ + GstCaps *caps = NULL; + + /* Collect the caps */ + g_object_get (child, "caps", &caps, NULL); + if (caps) { + GST_LOG_OBJECT (child, "caps set to : %" GST_PTR_FORMAT, caps); + gst_caps_replace (received_caps, caps); + gst_caps_unref (caps); + } +} + +GST_START_TEST (test_appsrc_caps_in_push_modes) +{ + GstElement *pipe, *src, *sink; + GstMessage *msg; + GstCaps *caps, *caps1, *received_caps; + gint i; + GstMessageType msg_types; + GstAppSrcCallbacks cb = { 0 }; + GstAppStreamType modes[] = { GST_APP_STREAM_TYPE_STREAM, + GST_APP_STREAM_TYPE_SEEKABLE, + GST_APP_STREAM_TYPE_RANDOM_ACCESS + }; + + for (i = 0; i < sizeof (modes) / sizeof (modes[0]); i++) { + GST_INFO ("checking mode %d", modes[i]); + caps1 = gst_caps_new_simple ("foo/bar", "bleh", G_TYPE_INT, 2, NULL); + received_caps = NULL; + + pipe = gst_pipeline_new ("pipeline"); + src = gst_element_factory_make ("appsrc", NULL); + sink = gst_element_factory_make ("fakesink", NULL); + gst_bin_add_many (GST_BIN (pipe), src, sink, NULL); + gst_element_link (src, sink); + + g_object_set (G_OBJECT (src), "stream-type", modes[i], NULL); + if (modes[i] != GST_APP_STREAM_TYPE_STREAM) { + cb.seek_data = seek_cb; + gst_app_src_set_callbacks (GST_APP_SRC (src), &cb, NULL, NULL); + } + g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_cb), + &received_caps); + + gst_app_src_set_caps (GST_APP_SRC (src), caps1); + caps = gst_app_src_get_caps (GST_APP_SRC (src)); + fail_unless (gst_caps_is_equal (caps, caps1)); + gst_caps_unref (caps); + + gst_element_set_state (pipe, GST_STATE_PLAYING); + + if (modes[i] != GST_APP_STREAM_TYPE_RANDOM_ACCESS) { + gst_app_src_end_of_stream (GST_APP_SRC (src)); + msg_types = GST_MESSAGE_EOS; + } else { + gst_app_src_push_buffer (GST_APP_SRC (src), gst_buffer_new ()); + msg_types = GST_MESSAGE_ASYNC_DONE; + } + + msg = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, msg_types); + gst_message_unref (msg); + /* The collected caps should match with one that was pushed */ + fail_unless (received_caps && gst_caps_is_equal (received_caps, caps1)); + + gst_element_set_state (pipe, GST_STATE_NULL); + gst_object_unref (pipe); + gst_caps_unref (caps1); + if (received_caps) + gst_caps_unref (received_caps); } } @@ -274,9 +425,14 @@ TCase *tc_chain = tcase_create ("general"); tcase_add_test (tc_chain, test_appsrc_non_null_caps); - tcase_add_test (tc_chain, test_appsrc_block_deadlock); + tcase_add_test (tc_chain, test_appsrc_set_caps_twice); + tcase_add_test (tc_chain, test_appsrc_caps_in_push_modes); + + if (RUNNING_ON_VALGRIND) + tcase_add_loop_test (tc_chain, test_appsrc_block_deadlock, 0, 5); + else + tcase_add_loop_test (tc_chain, test_appsrc_block_deadlock, 0, 100); - tcase_set_timeout (tc_chain, 20); suite_add_tcase (s, tc_chain); return s; diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/encodebin.c gst-plugins-base1.0-1.6.1/tests/check/elements/encodebin.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/encodebin.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/encodebin.c 2015-10-22 08:01:34.000000000 +0000 @@ -104,13 +104,19 @@ return prof; } +static GstCaps * +create_unsupported_caps (void) +{ + return gst_caps_new_empty_simple ("audio/x-bogus"); +} + static GstEncodingProfile * create_unsupported_profile (void) { GstEncodingProfile *prof; GstCaps *caps; - caps = gst_caps_new_empty_simple ("audio/x-bogus"); + caps = create_unsupported_caps (); prof = (GstEncodingProfile *) gst_encoding_audio_profile_new (caps, NULL, NULL, 0); @@ -1042,14 +1048,28 @@ GstBus *bus = gst_pipeline_get_bus ((GstPipeline *) pipeline); GstElement *ebin = gst_element_factory_make ("encodebin", NULL); GstMessage *message; + GstElement *audiotestsrc; + GstPad *sinkpad, *srcpad; + + audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL); + g_object_set (audiotestsrc, "num-buffers", 1, NULL); + gst_bin_add ((GstBin *) pipeline, audiotestsrc); /* first add to bin, then set profile */ gst_bin_add ((GstBin *) pipeline, ebin); set_profile (ebin, create_unsupported_profile ()); - gst_element_set_state (pipeline, GST_STATE_READY); + srcpad = gst_element_get_static_pad (audiotestsrc, "src"); + sinkpad = gst_element_get_static_pad (ebin, "audio_0"); + fail_unless (gst_pad_link (srcpad, sinkpad) == GST_PAD_LINK_OK); + gst_object_unref (srcpad); + gst_object_unref (sinkpad); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); - message = gst_bus_pop_filtered (bus, GST_MESSAGE_ELEMENT); + message = + gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, + GST_MESSAGE_ELEMENT); fail_if (message == NULL); fail_if (!gst_is_missing_plugin_message (message)); gst_message_unref (message); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/multisocketsink.c gst-plugins-base1.0-1.6.1/tests/check/elements/multisocketsink.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/multisocketsink.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/multisocketsink.c 2015-10-22 08:01:34.000000000 +0000 @@ -124,6 +124,39 @@ return TRUE; } +static gboolean +read_handle_n_bytes_exactly (GSocket * srchandle, void *buf, size_t count) +{ + gssize total_read, read; + gchar *data = buf; + + GST_DEBUG ("reading exactly %" G_GSIZE_FORMAT " bytes", count); + + /* loop to make sure the sink has had a chance to write out all data. + * Depending on system load it might be written in multiple write calls, + * so it's possible our first read() just returns parts of the data. */ + total_read = 0; + do { + read = + g_socket_receive (srchandle, data + total_read, count - total_read, + NULL, NULL); + + if (read == 0) /* socket was closed */ + return FALSE; + + if (read < 0) + fail ("read error"); + + total_read += read; + + GST_INFO ("read %" G_GSSIZE_FORMAT " bytes, total now %" G_GSSIZE_FORMAT, + read, total_read); + } + while (total_read < count); + + return TRUE; +} + static ssize_t read_handle (GSocket * srchandle, void *buf, size_t count) { @@ -161,7 +194,7 @@ GstElement *sink; GstBuffer *buffer; GstCaps *caps; - gchar data[4]; + gchar data[9]; GSocket *sinksocket, *srcsocket; sink = setup_multisocketsink (); @@ -180,12 +213,15 @@ gst_check_setup_events (mysrcpad, sink, caps, GST_FORMAT_BYTES); ASSERT_CAPS_REFCOUNT (caps, "caps", 3); gst_buffer_fill (buffer, 0, "dead", 4); + gst_buffer_append_memory (buffer, + gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (gpointer) " good", 5, + 0, 5, NULL, NULL)); fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK); GST_DEBUG ("reading"); - fail_if (read_handle (srcsocket, data, 4) < 4); - fail_unless (strncmp (data, "dead", 4) == 0); - wait_bytes_served (sink, 4); + fail_if (read_handle (srcsocket, data, 9) < 9); + fail_unless (strncmp (data, "dead good", 9) == 0); + wait_bytes_served (sink, 9); GST_DEBUG ("cleaning up multisocketsink"); ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); @@ -200,6 +236,77 @@ GST_END_TEST; +typedef struct +{ + GSocket *sinksocket, *srcsocket; + GstElement *sink; +} TestSinkAndSocket; + +static void +setup_sink_with_socket (TestSinkAndSocket * tsas) +{ + GstCaps *caps = NULL; + + tsas->sink = setup_multisocketsink (); + fail_unless (setup_handles (&tsas->sinksocket, &tsas->srcsocket)); + + ASSERT_SET_STATE (tsas->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC); + + /* add the client */ + g_signal_emit_by_name (tsas->sink, "add", tsas->sinksocket); + + caps = gst_caps_from_string ("application/x-gst-check"); + gst_check_setup_events (mysrcpad, tsas->sink, caps, GST_FORMAT_BYTES); + gst_caps_unref (caps); +} + +static void +teardown_sink_with_socket (TestSinkAndSocket * tsas) +{ + if (tsas->sink != NULL) { + ASSERT_SET_STATE (tsas->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); + cleanup_multisocketsink (tsas->sink); + tsas->sink = 0; + } + if (tsas->sinksocket != NULL) { + g_object_unref (tsas->sinksocket); + tsas->sinksocket = 0; + } + if (tsas->srcsocket != NULL) { + g_object_unref (tsas->srcsocket); + tsas->srcsocket = 0; + } +} + +GST_START_TEST (test_sending_buffers_with_9_gstmemories) +{ + TestSinkAndSocket tsas = { 0 }; + GstBuffer *buffer; + int i; + const char *numbers[9] = { "one", "two", "three", "four", "five", "six", + "seven", "eight", "nine" + }; + const char numbers_concat[] = "onetwothreefourfivesixseveneightnine"; + gchar data[sizeof (numbers_concat)]; + int len = sizeof (numbers_concat) - 1; + + setup_sink_with_socket (&tsas); + + buffer = gst_buffer_new (); + for (i = 0; i < G_N_ELEMENTS (numbers); i++) + gst_buffer_append_memory (buffer, + gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (gpointer) numbers[i], + strlen (numbers[i]), 0, strlen (numbers[i]), NULL, NULL)); + fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK); + + fail_unless (read_handle_n_bytes_exactly (tsas.srcsocket, data, len)); + fail_unless (strncmp (data, numbers_concat, len) == 0); + + teardown_sink_with_socket (&tsas); +} + +GST_END_TEST; + /* from the given two data buffers, create two streamheader buffers and * some caps that match it, and store them in the given pointers * returns one ref to each of the buffers and the caps */ @@ -874,6 +981,7 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_no_clients); tcase_add_test (tc_chain, test_add_client); + tcase_add_test (tc_chain, test_sending_buffers_with_9_gstmemories); tcase_add_test (tc_chain, test_streamheader); tcase_add_test (tc_chain, test_change_streamheader); tcase_add_test (tc_chain, test_burst_client_bytes); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/playbin.c gst-plugins-base1.0-1.6.1/tests/check/elements/playbin.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/playbin.c 2014-07-21 08:35:58.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/playbin.c 2015-10-22 08:01:34.000000000 +0000 @@ -333,8 +333,7 @@ fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY), GST_STATE_CHANGE_SUCCESS); - fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_PAUSED), - GST_STATE_CHANGE_FAILURE); + gst_element_set_state (playbin, GST_STATE_PAUSED); /* there should be at least a missing-plugin message on the bus now and an * error message; the missing-plugin message should be first */ diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/playbin-complex.c gst-plugins-base1.0-1.6.1/tests/check/elements/playbin-complex.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/playbin-complex.c 2014-07-21 08:35:58.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/playbin-complex.c 2015-10-22 08:01:34.000000000 +0000 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #ifndef GST_DISABLE_REGISTRY @@ -413,7 +413,7 @@ " stream0 = (string)" STREAM_TYPES " ," " stream1 = (string)" STREAM_TYPES) ); -static GstStaticPadTemplate cd_src_templ = GST_STATIC_PAD_TEMPLATE ("src_%d", +static GstStaticPadTemplate cd_src_templ = GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC, GST_PAD_SOMETIMES, GST_STATIC_CAPS ("audio/x-raw; audio/x-compressed; " "video/x-raw; video/x-compressed") @@ -500,7 +500,7 @@ templ = gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (demux), - "src_%d"); + "src_%u"); if (pad == &demux->srcpad0) *pad = gst_pad_new_from_template (templ, "src_0"); else @@ -521,7 +521,7 @@ caps = gst_caps_new_empty_simple ("video/x-compressed"); } else if (g_str_equal (streaminfo, "raw-audio")) { caps = gst_caps_new_simple ("audio/x-raw", - "format", G_TYPE_STRING, "S16LE", + "format", G_TYPE_STRING, GST_AUDIO_NE (S16), "layout", G_TYPE_STRING, "interleaved", "rate", G_TYPE_INT, 48000, "channels", G_TYPE_INT, 2, NULL); } else { @@ -1222,7 +1222,7 @@ playbin = create_playbin ("caps:audio/x-raw," - " format=(string)S16LE, " "layout=(string)interleaved, " + " format=(string)" GST_AUDIO_NE (S16) ", " "layout=(string)interleaved, " " rate=(int)48000, " " channels=(int)2", TRUE); fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY), diff -Nru gst-plugins-base1.0-1.4.3/tests/check/elements/videorate.c gst-plugins-base1.0-1.6.1/tests/check/elements/videorate.c --- gst-plugins-base1.0-1.4.3/tests/check/elements/videorate.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/elements/videorate.c 2015-10-22 08:01:34.000000000 +0000 @@ -40,6 +40,10 @@ "framerate = (fraction) 25/1 , " \ "format = (string) I420" +#define VIDEO_CAPS_FORCE_VARIABLE_FRAMERATE_STRING \ + "video/x-raw, " \ + "framerate = (fraction) 0/1" + #define VIDEO_CAPS_NO_FRAMERATE_STRING \ "video/x-raw, " \ "width = (int) 320, " \ @@ -77,6 +81,13 @@ GST_STATIC_CAPS (VIDEO_CAPS_TEMPLATE_STRING) ); +static GstStaticPadTemplate force_variable_rate_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (VIDEO_CAPS_FORCE_VARIABLE_FRAMERATE_STRING) + ); + static void assert_videorate_stats (GstElement * videorate, const gchar * reason, guint64 xin, guint64 xout, guint64 xdropped, guint64 xduplicated) @@ -1015,8 +1026,10 @@ videorate = setup_videorate_full (&srctemplate, &sinktemplate); caps = gst_caps_from_string (test->caps); + g_object_set_data_full (G_OBJECT (mysrcpad), "caps", gst_caps_ref (caps), (GDestroyNotify) gst_caps_unref); + g_object_set_data_full (G_OBJECT (mysinkpad), "caps", gst_caps_ref (caps), (GDestroyNotify) gst_caps_unref); gst_caps_unref (caps); @@ -1036,6 +1049,120 @@ GST_END_TEST; +static void +videorate_send_buffers (GstElement * videorate, + const gchar * pre_push_caps, const gchar * post_push_caps) +{ + GstCaps *caps, *expected_caps; + GstBuffer *first; + GstBuffer *second; + GstBuffer *third; + + caps = gst_pad_get_current_caps (mysinkpad); + expected_caps = gst_caps_from_string (pre_push_caps); + gst_check_caps_equal (caps, expected_caps); + gst_caps_unref (caps); + gst_caps_unref (expected_caps); + + GST_DEBUG ("pushing first buffer"); + first = gst_buffer_new_and_alloc (4); + gst_buffer_memset (first, 0, 0, 4); + GST_BUFFER_TIMESTAMP (first) = 0; + fail_unless (gst_pad_push (mysrcpad, first) == GST_FLOW_OK); + + /* second buffer */ + second = gst_buffer_new_and_alloc (4); + GST_BUFFER_TIMESTAMP (second) = GST_SECOND / 25; + gst_buffer_memset (second, 0, 0, 4); + + fail_unless (gst_pad_push (mysrcpad, second) == GST_FLOW_OK); + + /* third buffer with new size */ + third = gst_buffer_new_and_alloc (4); + GST_BUFFER_TIMESTAMP (third) = 2 * GST_SECOND / 25; + gst_buffer_memset (third, 0, 0, 4); + + fail_unless (gst_pad_push (mysrcpad, third) == GST_FLOW_OK); + + caps = gst_pad_get_current_caps (mysinkpad); + expected_caps = gst_caps_from_string (post_push_caps); + gst_check_caps_equal (caps, expected_caps); + gst_caps_unref (caps); + gst_caps_unref (expected_caps); + +} + +GST_START_TEST (test_fixed_framerate) +{ + GstElement *videorate; + GstCaps *caps; + + /* 1) if upstream caps contain a non-0/1 framerate, we should use that and pass + * it on downstream (if possible; otherwise fixate_to_nearest) + */ + videorate = setup_videorate_full (&srctemplate, &sinktemplate); + + caps = gst_caps_from_string ("video/x-raw,framerate=25/1"); + ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS); + gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME); + gst_caps_unref (caps); + videorate_send_buffers (videorate, "video/x-raw,framerate=25/1", + "video/x-raw,framerate=25/1"); + cleanup_videorate (videorate); + + /* 2) if upstream framerate is 0/1 and downstream doesn't force a particular + * framerate, we try to guess based on buffer intervals and use that as output + * framerate */ + videorate = setup_videorate_full (&srctemplate, &sinktemplate); + ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS); + caps = gst_caps_from_string ("video/x-raw,framerate=0/1"); + gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME); + gst_caps_unref (caps); + videorate_send_buffers (videorate, "video/x-raw,framerate=0/1", + "video/x-raw,framerate=25/1"); + cleanup_videorate (videorate); + + /* 3) if downstream force variable framerate, do that */ + videorate = + setup_videorate_full (&srctemplate, &force_variable_rate_template); + ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS); + caps = gst_caps_from_string ("video/x-raw,framerate=0/1"); + gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME); + gst_caps_unref (caps); + videorate_send_buffers (videorate, "video/x-raw,framerate=0/1", + "video/x-raw,framerate=0/1"); + cleanup_videorate (videorate); + +} + +GST_END_TEST; + +GST_START_TEST (test_variable_framerate_renegotiation) +{ + GstElement *videorate; + GstCaps *caps; + GstCaps *allowed; + + videorate = setup_videorate_full (&srctemplate, &sinktemplate); + ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS); + caps = gst_caps_from_string ("video/x-raw,framerate=0/1"); + gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME); + videorate_send_buffers (videorate, "video/x-raw,framerate=0/1", + "video/x-raw,framerate=25/1"); + + /* framerate=0/1 must still be allowed to be configured on + * the upstream side of videorate */ + allowed = gst_pad_get_allowed_caps (mysrcpad); + fail_unless (gst_caps_is_subset (caps, allowed) == TRUE); + + gst_caps_unref (allowed); + gst_caps_unref (caps); + cleanup_videorate (videorate); +} + +GST_END_TEST; + + static Suite * videorate_suite (void) { @@ -1054,6 +1181,8 @@ tcase_add_test (tc_chain, test_selected_caps); tcase_add_loop_test (tc_chain, test_caps_negotiation, 0, G_N_ELEMENTS (caps_negotiation_tests)); + tcase_add_test (tc_chain, test_fixed_framerate); + tcase_add_test (tc_chain, test_variable_framerate_renegotiation); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/generic/clock-selection.c gst-plugins-base1.0-1.6.1/tests/check/generic/clock-selection.c --- gst-plugins-base1.0-1.4.3/tests/check/generic/clock-selection.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/generic/clock-selection.c 2015-10-22 08:01:34.000000000 +0000 @@ -43,7 +43,7 @@ GST_END_TEST; static Suite * -volume_suite (void) +clocks_suite (void) { Suite *s = suite_create ("clocks"); TCase *tc_chain = tcase_create ("general"); @@ -54,19 +54,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = volume_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (clocks); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/generic/states.c gst-plugins-base1.0-1.6.1/tests/check/generic/states.c --- gst-plugins-base1.0-1.4.3/tests/check/generic/states.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/generic/states.c 2015-10-22 08:01:34.000000000 +0000 @@ -207,7 +207,7 @@ static Suite * states_suite (void) { - Suite *s = suite_create ("states"); + Suite *s = suite_create ("states_base"); TCase *tc_chain = tcase_create ("general"); suite_add_tcase (s, tc_chain); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/gst/typefindfunctions.c gst-plugins-base1.0-1.6.1/tests/check/gst/typefindfunctions.c --- gst-plugins-base1.0-1.4.3/tests/check/gst/typefindfunctions.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/gst/typefindfunctions.c 2015-10-22 08:01:34.000000000 +0000 @@ -25,6 +25,28 @@ #include #include +static GstCaps * +typefind_data (const guint8 * data, gsize data_size, + GstTypeFindProbability * prob) +{ + GstBuffer *buf; + GstCaps *caps; + + GST_MEMDUMP ("typefind data", data, data_size); + buf = gst_buffer_new (); + gst_buffer_append_memory (buf, + gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, + (guint8 *) data, data_size, 0, data_size, NULL, NULL)); + GST_BUFFER_OFFSET (buf) = 0; + + caps = gst_type_find_helper_for_buffer (NULL, buf, prob); + GST_INFO ("caps: %" GST_PTR_FORMAT ", probability=%u", caps, *prob); + + gst_buffer_unref (buf); + + return caps; +} + GST_START_TEST (test_quicktime_mpeg4video) { /* quicktime redirect file which starts with what could also be interpreted @@ -387,6 +409,73 @@ GST_END_TEST; +static const gchar MANIFEST[] = + "\n" + "\n" + "\n" + " \n" + " + * Copyright (C) 2015 Tim-Philipp Müller + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#include +#include + +#define FILE_SIZE 4096 + + +GST_START_TEST (test_dmabuf) +{ + char tmpfilename[] = "/tmp/dmabuf-test.XXXXXX"; + int fd; + GstMemory *mem; + GstAllocator *alloc; + GstMapInfo info; + + fd = mkstemp (tmpfilename); + fail_unless (fd > 0); + fail_unless (g_unlink (tmpfilename) == 0); + + alloc = gst_dmabuf_allocator_new (); + + mem = gst_dmabuf_allocator_alloc (alloc, fd, FILE_SIZE); + + fail_unless (gst_memory_map (mem, &info, GST_MAP_READWRITE)); + fail_unless (info.flags == GST_MAP_READWRITE); + fail_unless (info.data != NULL); + fail_unless (info.size == FILE_SIZE); + fail_unless (info.maxsize == FILE_SIZE); + gst_memory_unmap (mem, &info); + + gst_memory_unref (mem); + g_object_unref (alloc); +} + +GST_END_TEST; + +static Suite * +allocators_suite (void) +{ + Suite *s = suite_create ("allocators"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_dmabuf); + + return s; +} + +GST_CHECK_MAIN (allocators); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/audio.c gst-plugins-base1.0-1.6.1/tests/check/libs/audio.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/audio.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/audio.c 2015-10-22 08:01:34.000000000 +0000 @@ -630,20 +630,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = audio_suite (); - - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (audio); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/audiodecoder.c gst-plugins-base1.0-1.6.1/tests/check/libs/audiodecoder.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/audiodecoder.c 2014-09-19 06:37:46.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/audiodecoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -33,6 +33,37 @@ #define TEST_MSECS_PER_SAMPLE 44100 +#define RESTRICTED_CAPS_RATE 44100 +#define RESTRICTED_CAPS_CHANNELS 6 +static GstStaticPadTemplate sinktemplate_restricted = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw, rate=(int)44100, channels=(int)6") + ); + +static GstStaticPadTemplate sinktemplate_with_range = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw, rate=(int)[1,44100], channels=(int)[1,6]") + ); + +static GstStaticPadTemplate sinktemplate_default = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw, format=(string)S32LE, " + "rate=(int)[1, 320000], channels=(int)[1, 32]," + "layout=(string)interleaved") + ); +static GstStaticPadTemplate srctemplate_default = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-test-custom") + ); + #define GST_AUDIO_DECODER_TESTER_TYPE gst_audio_decoder_tester_get_type() static GType gst_audio_decoder_tester_get_type (void); @@ -77,7 +108,6 @@ { GstAudioDecoderTester *tester = (GstAudioDecoderTester *) dec; GstAudioInfo info; - gst_caps_unref (caps); if (!tester->setoutputformat_on_decoding) { caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, "S32LE", @@ -179,24 +209,17 @@ } static void -setup_audiodecodertester (void) +setup_audiodecodertester (GstStaticPadTemplate * sinktemplate, + GstStaticPadTemplate * srctemplate) { - static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw, format=(string)S32LE, " - "rate=(int)[1, 320000], channels=(int)[1, 32]," - "layout=(string)interleaved") - ); - static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-test-custom") - ); + if (sinktemplate == NULL) + sinktemplate = &sinktemplate_default; + if (srctemplate == NULL) + srctemplate = &srctemplate_default; dec = g_object_new (GST_AUDIO_DECODER_TESTER_TYPE, NULL); - mysrcpad = gst_check_setup_src_pad (dec, &srctemplate); - mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate); + mysrcpad = gst_check_setup_src_pad (dec, srctemplate); + mysinkpad = gst_check_setup_sink_pad (dec, sinktemplate); gst_pad_set_event_function (mysinkpad, _mysinkpad_event); } @@ -242,7 +265,7 @@ gst_caps_new_simple ("audio/x-test-custom", "channels", G_TYPE_INT, 2, "rate", G_TYPE_INT, 44100, NULL); fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps))); - + gst_caps_unref (caps); } #define NUM_BUFFERS 1000 @@ -252,7 +275,7 @@ GstBuffer *buffer; guint64 i; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -336,7 +359,7 @@ GstSegment segment; GstBuffer *buffer; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -365,7 +388,7 @@ { GstSegment segment; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -394,7 +417,7 @@ { GstSegment segment; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); ((GstAudioDecoderTester *) dec)->setoutputformat_on_decoding = TRUE; @@ -420,16 +443,70 @@ GST_END_TEST; + +/* make sure that the segment event is pushed before the gap */ +GST_START_TEST (audiodecoder_first_data_is_gap) +{ + GstSegment segment; + GList *events_iter; + + setup_audiodecodertester (NULL, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + send_startup_events (); + + /* push a new segment */ + gst_segment_init (&segment, GST_FORMAT_TIME); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))); + + /* push a gap */ + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0, + GST_SECOND))); + events_iter = events; + /* make sure the usual events have been received */ + { + GstEvent *sstart = events_iter->data; + fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START); + events_iter = g_list_next (events_iter); + } + { + GstEvent *caps_event = events_iter->data; + fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS); + events_iter = g_list_next (events_iter); + } + { + GstEvent *segment_event = events_iter->data; + fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT); + events_iter = g_list_next (events_iter); + } + + /* Make sure the gap was pushed */ + { + GstEvent *gap = events_iter->data; + fail_unless (GST_EVENT_TYPE (gap) == GST_EVENT_GAP); + events_iter = g_list_next (events_iter); + } + fail_unless (events_iter == NULL); + + cleanup_audiodecodertest (); +} + +GST_END_TEST; + + static void _audiodecoder_flush_events (gboolean send_buffers) { GstSegment segment; GstBuffer *buffer; - guint64 i; + guint i; GList *events_iter; GstMessage *msg; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -466,7 +543,7 @@ gst_message_new_element (GST_OBJECT (mysrcpad), gst_structure_new_empty ("test")); fail_unless (gst_pad_push_event (mysrcpad, - gst_event_new_sink_message ("test", msg))); + gst_event_new_sink_message ("test", msg))); gst_message_unref (msg); fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ())); @@ -489,15 +566,15 @@ fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT); events_iter = g_list_next (events_iter); } - for (int i=0; i< NUM_BUFFERS / 10; i++) - { + for (int i = 0; i < NUM_BUFFERS / 10; i++) { GstEvent *tag_event = events_iter->data; fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG); events_iter = g_list_next (events_iter); } } { - GstEvent *eos_event = events_iter->data; + GstEvent *eos_event = g_list_last (events_iter)->data; + fail_unless (GST_EVENT_TYPE (eos_event) == GST_EVENT_EOS); events_iter = g_list_next (events_iter); } @@ -544,6 +621,9 @@ } + g_list_free_full (events, (GDestroyNotify) gst_event_unref); + events = NULL; + g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref); buffers = NULL; @@ -551,6 +631,36 @@ cleanup_audiodecodertest (); } +/* An element should always push its segment before sending EOS */ +GST_START_TEST (audiodecoder_eos_events_no_buffers) +{ + GstSegment segment; + setup_audiodecodertester (NULL, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + send_startup_events (); + + gst_segment_init (&segment, GST_FORMAT_TIME); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ())); + + fail_unless (GST_PAD_IS_EOS (mysinkpad)); + + { + GstEvent *segment_event = + gst_pad_get_sticky_event (mysinkpad, GST_EVENT_SEGMENT, 0); + fail_unless (segment_event != NULL); + gst_event_unref (segment_event); + } + + gst_element_set_state (dec, GST_STATE_NULL); + cleanup_audiodecodertest (); +} + +GST_END_TEST; + GST_START_TEST (audiodecoder_flush_events_no_buffers) { _audiodecoder_flush_events (FALSE); @@ -573,7 +683,7 @@ guint64 i; GstClockTime pos; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -636,7 +746,7 @@ GstBuffer *buffer; guint64 i; - setup_audiodecodertester (); + setup_audiodecodertester (NULL, NULL); ((GstAudioDecoderTester *) dec)->output_too_many_frames = TRUE; @@ -686,6 +796,374 @@ GST_END_TEST; +GST_START_TEST (audiodecoder_query_caps_with_fixed_caps_peer) +{ + GstCaps *caps; + GstCaps *filter; + GstStructure *structure; + gint rate, channels; + + setup_audiodecodertester (&sinktemplate_restricted, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + structure = gst_caps_get_structure (caps, 0); + fail_unless (gst_structure_get_int (structure, "rate", &rate)); + fail_unless (gst_structure_get_int (structure, "channels", &channels)); + + /* match our restricted caps values */ + fail_unless (channels == RESTRICTED_CAPS_CHANNELS); + fail_unless (rate == RESTRICTED_CAPS_RATE); + gst_caps_unref (caps); + + filter = gst_caps_new_simple ("audio/x-custom-test", "rate", G_TYPE_INT, + 10000, "channels", G_TYPE_INT, 12, NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + fail_unless (gst_caps_is_empty (caps)); + gst_caps_unref (caps); + gst_caps_unref (filter); + + cleanup_audiodecodertest (); +} + +GST_END_TEST; + +static void +_get_int_range (GstStructure * s, const gchar * field, gint * min_v, + gint * max_v) +{ + const GValue *value; + + value = gst_structure_get_value (s, field); + fail_unless (value != NULL); + fail_unless (GST_VALUE_HOLDS_INT_RANGE (value)); + + *min_v = gst_value_get_int_range_min (value); + *max_v = gst_value_get_int_range_max (value); +} + +GST_START_TEST (audiodecoder_query_caps_with_range_caps_peer) +{ + GstCaps *caps; + GstCaps *filter; + GstStructure *structure; + gint rate, channels; + gint rate_min, channels_min; + gint rate_max, channels_max; + + setup_audiodecodertester (&sinktemplate_with_range, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + structure = gst_caps_get_structure (caps, 0); + _get_int_range (structure, "rate", &rate_min, &rate_max); + _get_int_range (structure, "channels", &channels_min, &channels_max); + fail_unless (rate_min == 1); + fail_unless (rate_max == RESTRICTED_CAPS_RATE); + fail_unless (channels_min == 1); + fail_unless (channels_max == RESTRICTED_CAPS_CHANNELS); + gst_caps_unref (caps); + + /* query with a fixed filter */ + filter = gst_caps_new_simple ("audio/x-test-custom", "rate", G_TYPE_INT, + RESTRICTED_CAPS_RATE, "channels", G_TYPE_INT, RESTRICTED_CAPS_CHANNELS, + NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + structure = gst_caps_get_structure (caps, 0); + fail_unless (gst_structure_get_int (structure, "rate", &rate)); + fail_unless (gst_structure_get_int (structure, "channels", &channels)); + fail_unless (rate == RESTRICTED_CAPS_RATE); + fail_unless (channels == RESTRICTED_CAPS_CHANNELS); + gst_caps_unref (caps); + gst_caps_unref (filter); + + /* query with a fixed filter that will lead to empty result */ + filter = gst_caps_new_simple ("audio/x-test-custom", "rate", G_TYPE_INT, + 10000, "channels", G_TYPE_INT, 12, NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + fail_unless (gst_caps_is_empty (caps)); + gst_caps_unref (caps); + gst_caps_unref (filter); + + cleanup_audiodecodertest (); +} + +GST_END_TEST; + +#define GETCAPS_CAPS_STR "audio/x-test-custom, somefield=(string)getcaps" +static GstCaps * +_custom_audio_decoder_getcaps (GstAudioDecoder * dec, GstCaps * filter) +{ + return gst_caps_from_string (GETCAPS_CAPS_STR); +} + +GST_START_TEST (audiodecoder_query_caps_with_custom_getcaps) +{ + GstCaps *caps; + GstAudioDecoderClass *klass; + GstCaps *expected_caps; + + setup_audiodecodertester (&sinktemplate_restricted, NULL); + + klass = GST_AUDIO_DECODER_CLASS (GST_AUDIO_DECODER_GET_CLASS (dec)); + klass->getcaps = _custom_audio_decoder_getcaps; + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + expected_caps = gst_caps_from_string (GETCAPS_CAPS_STR); + fail_unless (gst_caps_is_equal (expected_caps, caps)); + gst_caps_unref (expected_caps); + gst_caps_unref (caps); + + cleanup_audiodecodertest (); +} + +GST_END_TEST; + +static GstTagList * +pad_get_sticky_tags (GstPad * pad, GstTagScope scope) +{ + GstTagList *tags = NULL; + GstEvent *event; + guint i = 0; + + do { + event = gst_pad_get_sticky_event (pad, GST_EVENT_TAG, i++); + if (event == NULL) + break; + gst_event_parse_tag (event, &tags); + if (scope == gst_tag_list_get_scope (tags)) + tags = gst_tag_list_ref (tags); + else + tags = NULL; + gst_event_unref (event); + } + while (tags == NULL); + + return tags; +} + +#define tag_list_peek_string(list,tag,p_s) \ + gst_tag_list_peek_string_index(list,tag,0,p_s) + +/* Check tag transformations and updates */ +GST_START_TEST (audiodecoder_tag_handling) +{ + GstTagList *global_tags; + GstTagList *tags; + GstSegment segment; + const gchar *s = NULL; + guint u = 0; + + setup_audiodecodertester (NULL, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + send_startup_events (); + + /* push a new segment */ + gst_segment_init (&segment, GST_FORMAT_TIME); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))); + + /* ======================================================================= + * SCENARIO 0: global tags passthrough; check upstream/decoder tag merging + * ======================================================================= */ + + /* push some global tags (these should be passed through and not messed with) */ + global_tags = gst_tag_list_new (GST_TAG_TITLE, "Global", NULL); + gst_tag_list_set_scope (global_tags, GST_TAG_SCOPE_GLOBAL); + fail_unless (gst_pad_push_event (mysrcpad, + gst_event_new_tag (gst_tag_list_ref (global_tags)))); + + /* create some (upstream) stream tags */ + tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Upstream Codec", + GST_TAG_DESCRIPTION, "Upstream Description", NULL); + gst_tag_list_set_scope (tags, GST_TAG_SCOPE_STREAM); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags))); + tags = NULL; + + /* decoder tags: override/add AUDIO_CODEC, BITRATE and MAXIMUM_BITRATE */ + { + GstTagList *decoder_tags; + + decoder_tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Decoder Codec", + GST_TAG_BITRATE, 250000, GST_TAG_MAXIMUM_BITRATE, 255000, NULL); + gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), + decoder_tags, GST_TAG_MERGE_REPLACE); + gst_tag_list_unref (decoder_tags); + } + + /* push buffer (this will call gst_audio_decoder_merge_tags with the above) */ + fail_unless (gst_pad_push (mysrcpad, create_test_buffer (0)) == GST_FLOW_OK); + gst_buffer_unref (buffers->data); + buffers = g_list_delete_link (buffers, buffers); + + /* check global tags: should not have been tampered with */ + tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_GLOBAL); + fail_unless (tags != NULL); + GST_INFO ("global tags: %" GST_PTR_FORMAT, tags); + fail_unless (gst_tag_list_is_equal (tags, global_tags)); + + /* check merged stream tags */ + tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM); + fail_unless (tags != NULL); + GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags); + /* upstream audio codec should've been replaced with audiodecoder one */ + fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s)); + fail_unless_equals_string (s, "Decoder Codec"); + /* no upstream bitrate, so audiodecoder one should've been added */ + fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u)); + fail_unless_equals_int (u, 250000); + /* no upstream maximum-bitrate, so audiodecoder one should've been added */ + fail_unless (gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u)); + fail_unless_equals_int (u, 255000); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_MAXIMUM_BITRATE) == 1); + /* upstream description should've been maintained */ + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1); + /* and that should be all: AUDIO_CODEC, DESCRIPTION, BITRATE, MAX BITRATE */ + fail_unless_equals_int (gst_tag_list_n_tags (tags), 4); + gst_tag_list_unref (tags); + s = NULL; + + /* =================================================================== + * SCENARIO 1: upstream sends updated tags, decoder tags stay the same + * =================================================================== */ + + /* push same upstream stream tags again */ + tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Upstream Codec", + GST_TAG_DESCRIPTION, "Upstream Description", NULL); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags))); + tags = NULL; + + /* decoder tags are still: + * audio-codec = "Decoder Codec", bitrate=250000, maximum-bitrate=255000 */ + + /* check possibly updated merged stream tags, should be same as before */ + tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM); + fail_unless (tags != NULL); + GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags); + /* upstream audio codec still be the one merge-replaced by the subclass */ + fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s)); + fail_unless_equals_string (s, "Decoder Codec"); + /* no upstream bitrate, so audiodecoder one should've been added */ + fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u)); + fail_unless_equals_int (u, 250000); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_MAXIMUM_BITRATE) == 1); + /* upstream description should've been maintained */ + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1); + /* and that should be all: AUDIO_CODEC, DESCRIPTION, BITRATE, MAX BITRATE */ + fail_unless_equals_int (gst_tag_list_n_tags (tags), 4); + gst_tag_list_unref (tags); + s = NULL; + + /* ============================================================= + * SCENARIO 2: decoder updates tags, upstream tags stay the same + * ============================================================= */ + + /* new decoder tags: override AUDIO_CODEC, update/add BITRATE, + * no MAXIMUM_BITRATE this time (which means it should not appear + * any longer in the output tags now) (bitrate is a different value now) */ + { + GstTagList *decoder_tags; + + decoder_tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Decoder Codec", + GST_TAG_BITRATE, 275000, NULL); + gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), + decoder_tags, GST_TAG_MERGE_REPLACE); + gst_tag_list_unref (decoder_tags); + } + + /* push another buffer to make decoder update tags */ + fail_unless (gst_pad_push (mysrcpad, create_test_buffer (2)) == GST_FLOW_OK); + gst_buffer_unref (buffers->data); + buffers = g_list_delete_link (buffers, buffers); + + /* check updated merged stream tags, the decoder bits should be different */ + tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM); + fail_unless (tags != NULL); + GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags); + /* upstream audio codec still replaced by the subclass's (wasn't updated) */ + fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s)); + fail_unless_equals_string (s, "Decoder Codec"); + /* no upstream bitrate, so audiodecoder one should've been added, was updated */ + fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u)); + fail_unless_equals_int (u, 275000); + /* no upstream maximum-bitrate, and audiodecoder removed it now */ + fail_unless (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u)); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1); + /* upstream description should've been maintained */ + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1); + /* and that should be all, just AUDIO_CODEC, DESCRIPTION, BITRATE */ + fail_unless_equals_int (gst_tag_list_n_tags (tags), 3); + gst_tag_list_unref (tags); + s = NULL; + + /* ================================================================= + * SCENARIO 3: stream-start event should clear upstream tags + * ================================================================= */ + + /* also tests if the stream-start event clears the upstream tags */ + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_stream_start ("x"))); + + /* push another buffer to make decoder update tags */ + fail_unless (gst_pad_push (mysrcpad, create_test_buffer (3)) == GST_FLOW_OK); + gst_buffer_unref (buffers->data); + buffers = g_list_delete_link (buffers, buffers); + + /* check updated merged stream tags, should be just decoder tags now */ + tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM); + fail_unless (tags != NULL); + GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags); + fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s)); + fail_unless_equals_string (s, "Decoder Codec"); + fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u)); + fail_unless_equals_int (u, 275000); + /* no upstream maximum-bitrate, and audiodecoder removed it now */ + fail_unless (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u)); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1); + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1); + /* no more description tag since no more upstream tags */ + fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 0); + /* and that should be all, just AUDIO_CODEC, BITRATE */ + fail_unless_equals_int (gst_tag_list_n_tags (tags), 2); + gst_tag_list_unref (tags); + s = NULL; + + /* clean up */ + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ())); + fail_unless (buffers == NULL); + + cleanup_audiodecodertest (); + gst_tag_list_unref (global_tags); +} + +GST_END_TEST; + static Suite * gst_audiodecoder_suite (void) { @@ -695,12 +1173,19 @@ suite_add_tcase (s, tc); tcase_add_test (tc, audiodecoder_playback); tcase_add_test (tc, audiodecoder_flush_events_no_buffers); + tcase_add_test (tc, audiodecoder_eos_events_no_buffers); tcase_add_test (tc, audiodecoder_flush_events); tcase_add_test (tc, audiodecoder_negotiation_with_buffer); tcase_add_test (tc, audiodecoder_negotiation_with_gap_event); tcase_add_test (tc, audiodecoder_delayed_negotiation_with_gap_event); + tcase_add_test (tc, audiodecoder_first_data_is_gap); tcase_add_test (tc, audiodecoder_buffer_after_segment); tcase_add_test (tc, audiodecoder_output_too_many_frames); + tcase_add_test (tc, audiodecoder_tag_handling); + + tcase_add_test (tc, audiodecoder_query_caps_with_fixed_caps_peer); + tcase_add_test (tc, audiodecoder_query_caps_with_range_caps_peer); + tcase_add_test (tc, audiodecoder_query_caps_with_custom_getcaps); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/audioencoder.c gst-plugins-base1.0-1.6.1/tests/check/libs/audioencoder.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/audioencoder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/audioencoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -283,7 +283,7 @@ { GstSegment segment; GstBuffer *buffer; - guint64 i; + guint i; GList *events_iter; setup_audioencodertester (); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/discoverer.c gst-plugins-base1.0-1.6.1/tests/check/libs/discoverer.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/discoverer.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/discoverer.c 2015-10-22 08:01:34.000000000 +0000 @@ -44,6 +44,56 @@ GST_END_TEST; +GST_START_TEST (test_disco_serializing) +{ + GError *err = NULL; + GstDiscoverer *dc; + GstDiscovererInfo *info, *dinfo; + gchar *uri; + GVariant *serialized, *reserialized; + GList *audio_streams; + gchar *path = + g_build_filename (GST_TEST_FILES_PATH, "theora-vorbis.ogg", NULL); + + /* high timeout, in case we're running under valgrind */ + dc = gst_discoverer_new (5 * GST_SECOND, &err); + fail_unless (dc != NULL); + fail_unless (err == NULL); + + uri = gst_filename_to_uri (path, &err); + g_free (path); + fail_unless (err == NULL); + + info = gst_discoverer_discover_uri (dc, uri, &err); + fail_unless (info); + serialized = + gst_discoverer_info_to_variant (info, GST_DISCOVERER_SERIALIZE_ALL); + + + fail_unless (serialized); + dinfo = gst_discoverer_info_from_variant (serialized); + + fail_unless (dinfo); + audio_streams = gst_discoverer_info_get_audio_streams (dinfo); + fail_unless_equals_int (g_list_length (audio_streams), 1); + gst_discoverer_stream_info_list_free (audio_streams); + + reserialized = + gst_discoverer_info_to_variant (dinfo, GST_DISCOVERER_SERIALIZE_ALL); + + fail_unless (g_variant_equal (serialized, reserialized)); + + gst_discoverer_info_unref (info); + gst_discoverer_info_unref (dinfo); + g_free (uri); + g_variant_unref (serialized); + g_variant_unref (reserialized); + + g_object_unref (dc); +} + +GST_END_TEST; + GST_START_TEST (test_disco_sync) { GError *err = NULL; @@ -78,7 +128,6 @@ } GST_END_TEST; - static void test_disco_sync_reuse (const gchar * test_fn, guint num, GstClockTime timeout) { @@ -195,6 +244,7 @@ tcase_add_test (tc_chain, test_disco_sync_reuse_mp3); tcase_add_test (tc_chain, test_disco_sync_reuse_timeout); tcase_add_test (tc_chain, test_disco_missing_plugins); + tcase_add_test (tc_chain, test_disco_serializing); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/fft.c gst-plugins-base1.0-1.6.1/tests/check/libs/fft.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/fft.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/fft.c 2015-10-22 08:01:34.000000000 +0000 @@ -545,19 +545,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = fft_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (fft); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/libsabi.c gst-plugins-base1.0-1.6.1/tests/check/libs/libsabi.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/libsabi.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/libsabi.c 2015-10-22 08:01:34.000000000 +0000 @@ -82,24 +82,21 @@ # include "struct_i386.h" # define HAVE_ABI_SIZES TRUE # endif -#else -#ifdef HAVE_CPU_X86_64 -#include "struct_x86_64.h" -#define HAVE_ABI_SIZES TRUE -#else -#ifdef HAVE_CPU_ARM -#include "struct_arm.h" -#define HAVE_ABI_SIZES FALSE -#else -#ifdef __powerpc__ -#include "struct_ppc32.h" -#define HAVE_ABI_SIZES TRUE +#elif defined HAVE_CPU_X86_64 +# include "struct_x86_64.h" +# define HAVE_ABI_SIZES TRUE +#elif defined HAVE_CPU_ARM +# include "struct_arm.h" +# define HAVE_ABI_SIZES FALSE +#elif defined HAVE_CPU_PPC +# include "struct_ppc32.h" +# define HAVE_ABI_SIZES TRUE +#elif defined HAVE_CPU_PPC64 +# include "struct_ppc64.h" +# define HAVE_ABI_SIZES TRUE #else /* in case someone wants to generate a new arch */ -#include "struct_i386.h" -#define HAVE_ABI_SIZES FALSE -#endif -#endif -#endif +# include "struct_i386.h" +# define HAVE_ABI_SIZES FALSE #endif GST_START_TEST (test_ABI) diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/navigation.c gst-plugins-base1.0-1.6.1/tests/check/libs/navigation.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/navigation.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/navigation.c 2015-10-22 08:01:34.000000000 +0000 @@ -306,19 +306,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = navigation_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (navigation); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/pbutils.c gst-plugins-base1.0-1.6.1/tests/check/libs/pbutils.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/pbutils.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/pbutils.c 2015-10-22 08:01:34.000000000 +0000 @@ -266,7 +266,7 @@ "audio/x-wms", "audio/x-voxware", "audio/x-xi", "video/sp5x", "video/vivo", "video/x-4xm", "video/x-apple-video", "video/x-camtasia", "video/x-cdxa", "video/x-cinepak", "video/x-cirrus-logic-accupak", - "video/x-compressed-yuv", "video/x-dirac", "subpicture/x-dvd", + "video/x-compressed-yuv", "subpicture/x-dvd", "video/x-ffv", "video/x-flash-screen", "video/x-flash-video", "video/x-h261", "video/x-huffyuv", "video/x-intel-h263", "video/x-jpeg", "video/x-mjpeg", "video/x-mjpeg-b", "video/mpegts", "video/x-mng", @@ -310,6 +310,8 @@ "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE", "video/mpeg, mpegversion=(int)99, systemstream=(boolean)TRUE", "video/mpeg, mpegversion=(int)99, systemstream=(boolean)FALSE", + "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE, profile=main", + "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE, profile=adsfad", "video/mpeg", "video/x-indeo, indeoversion=(int)3", "video/x-indeo, indeoversion=(int)5", @@ -324,6 +326,12 @@ "audio/x-wma, wmaversion=(int)3", "audio/x-wma, wmaversion=(int)99", "audio/x-wma", + "video/x-dirac", + "video/x-dirac, profile=(string)vc2-low-delay", + "video/x-dirac, profile=(string)vc2-simple", + "video/x-dirac, profile=(string)vc2-main", + "video/x-dirac, profile=(string)main", + "video/x-dirac, profile=(string)czvja", "video/x-divx, divxversion=(int)3", "video/x-divx, divxversion=(int)4", "video/x-divx, divxversion=(int)5", @@ -333,10 +341,16 @@ "video/x-svq, svqversion=(int)3", "video/x-svq, svqversion=(int)99", "video/x-svq", + "video/x-h265, profile=(string)main", + "video/x-h265, profile=(string)xafasdf", + "video/x-h265", "video/x-h264, variant=(string)itu", "video/x-h264, variant=(string)videosoft", "video/x-h264, variant=(string)foobar", "video/x-h264", + "video/x-h264, profile=(string)foobar", + "video/x-h264, profile=(string)high-4:4:4-intra", + "video/x-h264, profile=(string)high", "video/x-h263, variant=(string)itu", "video/x-h263, variant=(string)lead", "video/x-h263, variant=(string)microsoft", @@ -406,14 +420,17 @@ desc = gst_pb_utils_get_codec_description (caps); fail_unless (desc != NULL); GST_LOG (" - codec : %s", desc); + fail_unless (g_utf8_validate (desc, -1, NULL)); g_free (desc); desc = gst_pb_utils_get_decoder_description (caps); fail_unless (desc != NULL); GST_LOG (" - decoder : %s", desc); + fail_unless (g_utf8_validate (desc, -1, NULL)); g_free (desc); desc = gst_pb_utils_get_encoder_description (caps); fail_unless (desc != NULL); GST_LOG (" - encoder : %s", desc); + fail_unless (g_utf8_validate (desc, -1, NULL)); g_free (desc); gst_caps_unref (caps); } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/rtpbasedepayload.c gst-plugins-base1.0-1.6.1/tests/check/libs/rtpbasedepayload.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/rtpbasedepayload.c 2014-08-11 06:44:22.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/rtpbasedepayload.c 2015-10-22 08:01:34.000000000 +0000 @@ -59,8 +59,8 @@ static GstBuffer *gst_rtp_dummy_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf); -static gboolean gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload *filter, - GstCaps *caps); +static gboolean gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload * filter, + GstCaps * caps); static GstStaticPadTemplate gst_rtp_dummy_depay_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", @@ -113,8 +113,8 @@ guint i; GST_LOG ("depayloading buffer pts=%" GST_TIME_FORMAT " offset=%" - G_GUINT64_FORMAT " memories=%d", GST_TIME_ARGS (GST_BUFFER_PTS(buf)), - GST_BUFFER_OFFSET(buf), gst_buffer_n_memory (buf)); + G_GUINT64_FORMAT " memories=%d", GST_TIME_ARGS (GST_BUFFER_PTS (buf)), + GST_BUFFER_OFFSET (buf), gst_buffer_n_memory (buf)); for (i = 0; i < gst_buffer_n_memory (buf); i++) { GstMemory *mem = gst_buffer_get_memory (buf, 0); @@ -134,8 +134,8 @@ GST_LOG ("depayloaded buffer pts=%" GST_TIME_FORMAT " offset=%" G_GUINT64_FORMAT " rtptime=%" G_GUINT32_FORMAT " memories=%d", - GST_TIME_ARGS (GST_BUFFER_PTS(outbuf)), - GST_BUFFER_OFFSET(outbuf), rtptime, gst_buffer_n_memory (buf)); + GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)), + GST_BUFFER_OFFSET (outbuf), rtptime, gst_buffer_n_memory (buf)); for (i = 0; i < gst_buffer_n_memory (buf); i++) { GstMemory *mem = gst_buffer_get_memory (buf, 0); @@ -149,7 +149,7 @@ } static gboolean -gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload *filter, GstCaps *caps) +gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload * filter, GstCaps * caps) { GstEvent *event; event = gst_event_new_caps (caps); @@ -171,7 +171,8 @@ typedef struct State State; -struct State { +struct State +{ GstElement *element; GstPad *sinkpad; GstPad *srcpad; @@ -186,7 +187,8 @@ return gst_pad_event_default (pad, noparent, event); } -static void drop_events (void) +static void +drop_events (void) { while (events != NULL) { gst_event_unref (GST_EVENT (events->data)); @@ -194,13 +196,14 @@ } } -static void validate_events_received (guint received) +static void +validate_events_received (guint received) { fail_unless_equals_int (g_list_length (events), received); } -static void validate_event (guint index, const gchar *name, - const gchar *field, ...) +static void +validate_event (guint index, const gchar * name, const gchar * field, ...) { GstEvent *event; va_list var_args; @@ -250,6 +253,11 @@ const GstSegment *segment; gst_event_parse_segment (event, &segment); fail_unless_equals_uint64 (segment->rate, expected); + } else if (!g_strcmp0 (field, "base")) { + GstClockTime expected = va_arg (var_args, GstClockTime); + const GstSegment *segment; + gst_event_parse_segment (event, &segment); + fail_unless_equals_uint64 (segment->base, expected); } else if (!g_strcmp0 (field, "media-type")) { const gchar *expected = va_arg (var_args, const gchar *); GstCaps *caps; @@ -262,33 +270,42 @@ GstCaps *caps; GstClockTime start; gst_event_parse_caps (event, &caps); - fail_unless (gst_structure_get_clock_time ( - gst_caps_get_structure (caps, 0), "npt-start", &start)); + fail_unless (gst_structure_get_clock_time (gst_caps_get_structure (caps, + 0), "npt-start", &start)); fail_unless_equals_uint64 (start, expected); } else if (!g_strcmp0 (field, "npt-stop")) { GstClockTime expected = va_arg (var_args, GstClockTime); GstCaps *caps; GstClockTime stop; gst_event_parse_caps (event, &caps); - fail_unless (gst_structure_get_clock_time ( - gst_caps_get_structure (caps, 0), "npt-stop", &stop)); + fail_unless (gst_structure_get_clock_time (gst_caps_get_structure (caps, + 0), "npt-stop", &stop)); fail_unless_equals_uint64 (stop, expected); } else if (!g_strcmp0 (field, "play-speed")) { gdouble expected = va_arg (var_args, gdouble); GstCaps *caps; gdouble speed; gst_event_parse_caps (event, &caps); - fail_unless (gst_structure_get_double ( - gst_caps_get_structure (caps, 0), "play-speed", &speed)); + fail_unless (gst_structure_get_double (gst_caps_get_structure (caps, 0), + "play-speed", &speed)); fail_unless (speed == expected); } else if (!g_strcmp0 (field, "play-scale")) { gdouble expected = va_arg (var_args, gdouble); GstCaps *caps; gdouble scale; gst_event_parse_caps (event, &caps); - fail_unless (gst_structure_get_double ( - gst_caps_get_structure (caps, 0), "play-scale", &scale)); + fail_unless (gst_structure_get_double (gst_caps_get_structure (caps, 0), + "play-scale", &scale)); fail_unless (scale == expected); + } else if (!g_strcmp0 (field, "clock-base")) { + guint expected = va_arg (var_args, guint); + GstCaps *caps; + guint clock_base; + gst_event_parse_caps (event, &caps); + fail_unless (gst_structure_get_uint (gst_caps_get_structure (caps, 0), + "clock-base", &clock_base)); + fail_unless (clock_base == expected); + } else { fail ("test cannot validate unknown event field '%s'", field); } @@ -302,8 +319,9 @@ #define push_rtp_buffer_fails(state, error, field, ...) \ push_rtp_buffer_full ((state), (error), (field), __VA_ARGS__) -static void push_rtp_buffer_full (State *state, GstFlowReturn expected, - const gchar *field, ...) +static void +push_rtp_buffer_full (State * state, GstFlowReturn expected, + const gchar * field, ...) { GstBuffer *buf = gst_rtp_buffer_new_allocate (0, 0, 0); GstRTPBuffer rtp = { NULL }; @@ -360,8 +378,9 @@ #define push_buffer(state, field, ...) \ push_buffer_full ((state), GST_FLOW_OK, (field), __VA_ARGS__) -static void push_buffer_full (State *state, GstFlowReturn expected, - const gchar *field, ...) +static void +push_buffer_full (State * state, GstFlowReturn expected, + const gchar * field, ...) { GstBuffer *buf = gst_buffer_new_allocate (0, 0, 0); va_list var_args; @@ -391,12 +410,14 @@ fail_unless_equals_int (gst_pad_push (state->srcpad, buf), expected); } -static void validate_buffers_received (guint received) +static void +validate_buffers_received (guint received) { fail_unless_equals_int (g_list_length (buffers), received); } -static void validate_buffer (guint index, const gchar *field, ...) +static void +validate_buffer (guint index, const gchar * field, ...) { GstBuffer *buf; va_list var_args; @@ -414,7 +435,7 @@ fail_unless_equals_uint64 (GST_BUFFER_PTS (buf), pts); } else if (!g_strcmp0 (field, "offset")) { guint64 offset = va_arg (var_args, guint64); - fail_unless_equals_uint64 (GST_BUFFER_OFFSET(buf), offset); + fail_unless_equals_uint64 (GST_BUFFER_OFFSET (buf), offset); } else if (!g_strcmp0 (field, "discont")) { gboolean discont = va_arg (var_args, gboolean); if (discont) { @@ -430,8 +451,8 @@ va_end (var_args); } -static State *create_depayloader (const gchar *caps_str, - const gchar *property, ...) +static State * +create_depayloader (const gchar * caps_str, const gchar * property, ...) { va_list var_args; GstCaps *caps; @@ -468,14 +489,15 @@ return state; } -static void set_state (State *state, GstState new_state) +static void +set_state (State * state, GstState new_state) { fail_unless_equals_int (gst_element_set_state (state->element, new_state), GST_STATE_CHANGE_SUCCESS); } -static void packet_lost (State *state, GstClockTime timestamp, - GstClockTime duration) +static void +packet_lost (State * state, GstClockTime timestamp, GstClockTime duration) { GstEvent *event; guint seqnum = 0x4243; @@ -483,18 +505,17 @@ guint retries = 42; event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, - gst_structure_new ("GstRTPPacketLost", - "seqnum", G_TYPE_UINT, seqnum, - "timestamp", G_TYPE_UINT64, timestamp, - "duration", G_TYPE_UINT64, duration, - "late", G_TYPE_BOOLEAN, late, - "retry", G_TYPE_UINT, retries, - NULL));; + gst_structure_new ("GstRTPPacketLost", + "seqnum", G_TYPE_UINT, seqnum, + "timestamp", G_TYPE_UINT64, timestamp, + "duration", G_TYPE_UINT64, duration, + "late", G_TYPE_BOOLEAN, late, "retry", G_TYPE_UINT, retries, NULL)); fail_unless (gst_pad_push_event (state->srcpad, event)); } -static void reconfigure_caps (State *state, const gchar *caps_str) +static void +reconfigure_caps (State * state, const gchar * caps_str) { GstCaps *newcaps; GstEvent *event; @@ -504,7 +525,8 @@ fail_unless (gst_pad_push_event (state->srcpad, event)); } -static void flush_pipeline (State *state) +static void +flush_pipeline (State * state) { GstEvent *event; GstSegment segment; @@ -517,7 +539,8 @@ fail_unless (gst_pad_push_event (state->srcpad, event)); } -static void destroy_depayloader (State *state) +static void +destroy_depayloader (State * state) { gst_check_teardown_sink_pad (state->element); gst_check_teardown_src_pad (state->element); @@ -549,50 +572,35 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 1, - NULL); + "seq", 0x4242 + 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (3); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); destroy_depayloader (state); } GST_END_TEST - /* the intent with this test is to provide the depayloader with a buffer that * does not contain an RTP header. this makes it impossible for the depayloader * to depayload the incoming RTP packet, yet the stream-start and caps events @@ -607,9 +615,7 @@ set_state (state, GST_STATE_PLAYING); push_buffer (state, - "pts", 0 * GST_SECOND, - "offset", GST_BUFFER_OFFSET_NONE, - NULL); + "pts", 0 * GST_SECOND, "offset", GST_BUFFER_OFFSET_NONE, NULL); set_state (state, GST_STATE_NULL); @@ -617,18 +623,14 @@ validate_events_received (2); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); destroy_depayloader (state); } GST_END_TEST - /* validate what happens when a depayloader is provided with two RTP packets * sent after each other that do not have sequential sequence numbers. in this * case the depayloader should be able to depayload both first and the second @@ -647,50 +649,35 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x43214321), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 2, - NULL); + "seq", 0x4242 + 2, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", TRUE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", TRUE, NULL); validate_events_received (3); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); destroy_depayloader (state); } GST_END_TEST - /* two RTP packets are pushed in this test, and while the sequence numbers are * sequential they are reversed. the expectation is that the depayloader will be * able to depayload the first RTP packet, but once the second RTP packet @@ -707,45 +694,33 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x43214321), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 - 1, - NULL); + "seq", 0x4242 - 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (1); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (3); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); destroy_depayloader (state); } GST_END_TEST - /* the intent of this test is to push two RTP packets that have reverse sequence * numbers that differ significantly. the depayloader will consider RTP packets * where the sequence numbers differ by more than 1000 to indicate that the @@ -764,50 +739,35 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x43214321), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 - 1000, - NULL); + "seq", 0x4242 - 1000, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", TRUE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", TRUE, NULL); validate_events_received (3); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); destroy_depayloader (state); } GST_END_TEST - /* a depayloader that has not received any caps event will not be able to * process any incoming RTP packet. instead pushing an RTP packet should result * in the expected error. @@ -822,9 +782,7 @@ push_rtp_buffer_fails (state, GST_FLOW_NOT_NEGOTIATED, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); set_state (state, GST_STATE_NULL); @@ -832,14 +790,12 @@ validate_events_received (1); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); destroy_depayloader (state); } GST_END_TEST - /* a depayloader that receives the downstream event GstRTPPacketLost should * respond by emitting a gap event with the corresponding timestamp and * duration. the initial events are unaffected, but are succeeded by the added @@ -855,57 +811,40 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); packet_lost (state, 1 * GST_SECOND, GST_SECOND); push_rtp_buffer (state, "pts", 2 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 2 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 2, - NULL); + "seq", 0x4242 + 2, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 2 * GST_SECOND, - "discont", TRUE, - NULL); + validate_buffer (1, "pts", 2 * GST_SECOND, "discont", TRUE, NULL); validate_events_received (4); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); validate_event (3, "gap", - "timestamp", 1 * GST_SECOND, - "duration", GST_SECOND, - NULL); + "timestamp", 1 * GST_SECOND, "duration", GST_SECOND, NULL); destroy_depayloader (state); } GST_END_TEST - /* a depayloader that receives identical caps events simply ignores the latter * events without propagating them downstream. */ @@ -919,46 +858,32 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); reconfigure_caps (state, "application/x-rtp"); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 1, - NULL); + "seq", 0x4242 + 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (3); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); destroy_depayloader (state); } @@ -981,9 +906,7 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); reconfigure_caps (state, "application/x-rtp, npt-start=(guint64)1234, npt-stop=(guint64)4321"); @@ -993,61 +916,44 @@ push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 1, - NULL); + "seq", 0x4242 + 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (7); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); validate_event (3, "caps", "media-type", "application/x-rtp", "npt-start", G_GUINT64_CONSTANT (1234), - "npt-stop", G_GUINT64_CONSTANT (4321), - NULL); + "npt-stop", G_GUINT64_CONSTANT (4321), NULL); - validate_event (4, "flush-start", - NULL); + validate_event (4, "flush-start", NULL); - validate_event (5, "flush-stop", - NULL); + validate_event (5, "flush-stop", NULL); validate_event (6, "segment", "time", G_GUINT64_CONSTANT (1234), "start", G_GUINT64_CONSTANT (0), - "stop", G_GUINT64_CONSTANT (4321 - 1234), - NULL); + "stop", G_GUINT64_CONSTANT (4321 - 1234), NULL); destroy_depayloader (state); } GST_END_TEST - /* when a depayloader receives a new caps event with play-scale it should save * this rate as it should affect the next segment event being pushed by the * depayloader. a new segment event is not pushed by the depayloader until a @@ -1064,74 +970,51 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); - reconfigure_caps (state, - "application/x-rtp, play-scale=(double)2.0"); + reconfigure_caps (state, "application/x-rtp, play-scale=(double)2.0"); flush_pipeline (state); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 1, - NULL); + "seq", 0x4242 + 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (7); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); validate_event (3, "caps", - "media-type", "application/x-rtp", - "play-scale", 2.0, - NULL); + "media-type", "application/x-rtp", "play-scale", 2.0, NULL); - validate_event (4, "flush-start", - NULL); + validate_event (4, "flush-start", NULL); - validate_event (5, "flush-stop", - NULL); + validate_event (5, "flush-stop", NULL); validate_event (6, "segment", "time", G_GUINT64_CONSTANT (0), "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - "rate", 1.0, - "applied-rate", 2.0, - NULL); + "stop", G_MAXUINT64, "rate", 1.0, "applied-rate", 2.0, NULL); destroy_depayloader (state); } GST_END_TEST - /* when a depayloader receives a new caps event with play-speed it should save * this rate as it should affect the next segment event being pushed by the * depayloader. a new segment event is not pushed by the depayloader until a @@ -1148,75 +1031,117 @@ push_rtp_buffer (state, "pts", 0 * GST_SECOND, - "rtptime", G_GUINT64_CONSTANT (0x1234), - "seq", 0x4242, - NULL); + "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL); - reconfigure_caps (state, - "application/x-rtp, play-speed=(double)2.0"); + reconfigure_caps (state, "application/x-rtp, play-speed=(double)2.0"); flush_pipeline (state); push_rtp_buffer (state, "pts", 1 * GST_SECOND, "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE, - "seq", 0x4242 + 1, - NULL); + "seq", 0x4242 + 1, NULL); set_state (state, GST_STATE_NULL); validate_buffers_received (2); - validate_buffer (0, - "pts", 0 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); - validate_buffer (1, - "pts", 1 * GST_SECOND, - "discont", FALSE, - NULL); + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); validate_events_received (7); - validate_event (0, "stream-start", - NULL); + validate_event (0, "stream-start", NULL); - validate_event (1, "caps", - "media-type", "application/x-rtp", - NULL); + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); validate_event (2, "segment", "time", G_GUINT64_CONSTANT (0), - "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - NULL); + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); validate_event (3, "caps", - "media-type", "application/x-rtp", - "play-speed", 2.0, - NULL); + "media-type", "application/x-rtp", "play-speed", 2.0, NULL); - validate_event (4, "flush-start", - NULL); + validate_event (4, "flush-start", NULL); - validate_event (5, "flush-stop", - NULL); + validate_event (5, "flush-stop", NULL); validate_event (6, "segment", "time", G_GUINT64_CONSTANT (0), "start", G_GUINT64_CONSTANT (0), - "stop", G_MAXUINT64, - "rate", 2.0, - "applied-rate", 1.0, - NULL); + "stop", G_MAXUINT64, "rate", 2.0, "applied-rate", 1.0, NULL); destroy_depayloader (state); } GST_END_TEST +/* when a depayloader receives new caps events with npt-start, npt-stop and + * clock-base it should save these timestamps as they should affect the next + * segment event being pushed by the depayloader. the produce segment should + * make the positon of the stream reflect the postion form clock-base instead + * of reflecting the running time (for RTSP). + */ +GST_START_TEST (rtp_base_depayload_clock_base_test) +{ + State *state; + + state = create_depayloader ("application/x-rtp", NULL); + + set_state (state, GST_STATE_PLAYING); + + push_rtp_buffer (state, + "pts", 0 * GST_SECOND, + "rtptime", G_GUINT64_CONSTANT (1234), "seq", 0x4242, NULL); + + reconfigure_caps (state, + "application/x-rtp, npt-start=(guint64)1234, npt-stop=(guint64)4321, clock-base=(guint)1234"); + + flush_pipeline (state); + + push_rtp_buffer (state, + "pts", 1 * GST_SECOND, + "rtptime", G_GUINT64_CONSTANT (1234) + 1 * DEFAULT_CLOCK_RATE, + "seq", 0x4242 + 1, NULL); + + set_state (state, GST_STATE_NULL); + + validate_buffers_received (2); + + validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL); + + validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL); + + validate_events_received (7); + + validate_event (0, "stream-start", NULL); + + validate_event (1, "caps", "media-type", "application/x-rtp", NULL); + + validate_event (2, "segment", + "time", G_GUINT64_CONSTANT (0), + "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL); + + validate_event (3, "caps", + "media-type", "application/x-rtp", + "npt-start", G_GUINT64_CONSTANT (1234), + "npt-stop", G_GUINT64_CONSTANT (4321), + "clock-base", 1234, NULL); + + validate_event (4, "flush-start", NULL); + + validate_event (5, "flush-stop", NULL); + + validate_event (6, "segment", + "time", G_GUINT64_CONSTANT (1234), + "start", GST_SECOND, + "stop", GST_SECOND + G_GUINT64_CONSTANT (4321 - 1234), + "base", GST_SECOND, NULL); + + destroy_depayloader (state); +} -static Suite * +GST_END_TEST static Suite * rtp_basepayloading_suite (void) { Suite *s = suite_create ("rtp_base_depayloading_test"); @@ -1240,6 +1165,7 @@ tcase_add_test (tc_chain, rtp_base_depayload_npt_test); tcase_add_test (tc_chain, rtp_base_depayload_play_scale_test); tcase_add_test (tc_chain, rtp_base_depayload_play_speed_test); + tcase_add_test (tc_chain, rtp_base_depayload_clock_base_test); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/rtp.c gst-plugins-base1.0-1.6.1/tests/check/libs/rtp.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/rtp.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/rtp.c 2015-10-22 08:01:34.000000000 +0000 @@ -171,6 +171,36 @@ GST_END_TEST; +GST_START_TEST (test_rtp_buffer_validate_padding) +{ + GstBuffer *buf; + guint8 packet_with_padding[] = { + 0xa0, 0x60, 0x6c, 0x49, 0x58, 0xab, 0xaa, 0x65, 0x65, 0x2e, 0xaf, 0xce, + 0x68, 0xce, 0x3c, 0x80, 0x00, 0x00, 0x00, 0x04 + }; + GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; + + buf = gst_buffer_new_and_alloc (sizeof (packet_with_padding)); + gst_buffer_fill (buf, 0, packet_with_padding, sizeof (packet_with_padding)); + fail_unless (gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp)); + gst_rtp_buffer_unmap (&rtp); + gst_buffer_unref (buf); + + /* Set the padding to something invalid */ + buf = gst_buffer_new_and_alloc (sizeof (packet_with_padding)); + gst_buffer_fill (buf, 0, packet_with_padding, sizeof (packet_with_padding)); + gst_buffer_memset (buf, gst_buffer_get_size (buf) - 1, 0xff, 1); + fail_if (gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp)); + + memset (&rtp, 0, sizeof (rtp)); + fail_unless (gst_rtp_buffer_map (buf, GST_MAP_READ | + GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING, &rtp)); + gst_rtp_buffer_unmap (&rtp); + gst_buffer_unref (buf); +} + +GST_END_TEST; + #if 0 GST_START_TEST (test_rtp_buffer_list) { @@ -757,11 +787,203 @@ /* close and validate */ gst_rtcp_buffer_unmap (&rtcp); fail_unless (gst_rtcp_buffer_validate (buf) == TRUE); + fail_unless (gst_rtcp_buffer_validate_reduced (buf) == TRUE); + gst_buffer_unref (buf); +} + +GST_END_TEST; + +GST_START_TEST (test_rtcp_reduced_buffer) +{ + GstBuffer *buf; + GstRTCPPacket packet; + GstRTCPBuffer rtcp = { NULL, }; + gsize offset; + gsize maxsize; + + buf = gst_rtcp_buffer_new (1400); + fail_unless (buf != NULL); + fail_unless_equals_int (gst_buffer_get_sizes (buf, &offset, &maxsize), 0); + fail_unless_equals_int (offset, 0); + fail_unless_equals_int (maxsize, 1400); + + gst_rtcp_buffer_map (buf, GST_MAP_READWRITE, &rtcp); + + fail_unless (gst_rtcp_buffer_validate (buf) == FALSE); + fail_unless (gst_rtcp_buffer_get_first_packet (&rtcp, &packet) == FALSE); + fail_unless (gst_rtcp_buffer_get_packet_count (&rtcp) == 0); + + /* add an SR packet */ + fail_unless (gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_PSFB, + &packet) == TRUE); + + /* close and validate */ + gst_rtcp_buffer_unmap (&rtcp); + fail_unless (gst_rtcp_buffer_validate (buf) == FALSE); + fail_unless (gst_rtcp_buffer_validate_reduced (buf) == TRUE); gst_buffer_unref (buf); } GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_with_padding) +{ + /* Compound packet with padding in the last packet. Padding is included in + * the length of the last packet. */ + guint8 rtcp_pkt[] = { + 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + 0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */ + 0x97, 0x6d, 0x21, 0x6a, + 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */ + 0x00, 0x00, 0x00, 0x04 /* RTCP padding */ + }; + + fail_unless (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_with_padding_wrong_padlength) +{ + /* Compound packet with padding in the last packet. Padding is included in + * the length of the last packet. */ + guint8 rtcp_pkt[] = { + 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + 0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */ + 0x97, 0x6d, 0x21, 0x6a, + 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */ + 0x00, 0x00, 0x00, 0x03 /* RTCP padding (wrong length) */ + }; + + fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_with_padding_excluded_from_length) +{ + /* Compound packet with padding in the last packet. Padding is not included + * in the length. */ + guint8 rtcp_pkt[] = { + 0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + 0xA0, 0xCA, 0x00, 0x09, /* P=1, Type SDES, length = 9 (excludes padding) */ + 0x97, 0x6d, 0x21, 0x6a, + 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */ + 0x00, 0x00, 0x00, 0x04 /* RTCP padding */ + }; + + fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_with_padding_set_in_first_packet) +{ + /* Compound packet with padding in the last packet but with the pad + bit set on first packet */ + guint8 rtcp_pkt[] = { + 0xA0, 0xC9, 0x00, 0x07, /* P=1, Type RR, length = 7 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + 0x80, 0xCA, 0x00, 0x0a, /* Type SDES, length = 10 (include padding) */ + 0x97, 0x6d, 0x21, 0x6a, + 0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */ + 0x00, 0x00, 0x00, 0x04 /* RTCP padding */ + }; + + fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_reduced_without_padding) +{ + /* Reduced size packet without padding */ + guint8 rtcp_pkt[] = { + 0x80, 0xcd, 0x00, 0x07, /* Type FB, length = 8 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + }; + + fail_unless (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + +GST_START_TEST (test_rtcp_validate_reduced_with_padding) +{ + /* Reduced size packet with padding. */ + guint8 rtcp_pkt[] = { + 0xA0, 0xcd, 0x00, 0x08, /* P=1, Type FB, length = 8 */ + 0x97, 0x6d, 0x21, 0x6a, + 0x4d, 0x16, 0xaf, 0x14, + 0x10, 0x1f, 0xd9, 0x91, + 0x0f, 0xb7, 0x50, 0x88, + 0x3b, 0x79, 0x31, 0x50, + 0xbe, 0x19, 0x12, 0xa8, + 0xbb, 0xce, 0x9e, 0x3e, + 0x00, 0x00, 0x00, 0x04 /* RTCP padding */ + }; + + fail_if (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt))); +} +GST_END_TEST; + GST_START_TEST (test_rtp_ntp64_extension) { GstBuffer *buf; @@ -987,11 +1209,19 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_rtp_buffer); tcase_add_test (tc_chain, test_rtp_buffer_validate_corrupt); + tcase_add_test (tc_chain, test_rtp_buffer_validate_padding); tcase_add_test (tc_chain, test_rtp_buffer_set_extension_data); //tcase_add_test (tc_chain, test_rtp_buffer_list_set_extension); tcase_add_test (tc_chain, test_rtp_seqnum_compare); tcase_add_test (tc_chain, test_rtcp_buffer); + tcase_add_test (tc_chain, test_rtcp_reduced_buffer); + tcase_add_test (tc_chain, test_rtcp_validate_with_padding); + tcase_add_test (tc_chain, test_rtcp_validate_with_padding_wrong_padlength); + tcase_add_test (tc_chain, test_rtcp_validate_with_padding_excluded_from_length); + tcase_add_test (tc_chain, test_rtcp_validate_with_padding_set_in_first_packet); + tcase_add_test (tc_chain, test_rtcp_validate_reduced_without_padding); + tcase_add_test (tc_chain, test_rtcp_validate_reduced_with_padding); tcase_add_test (tc_chain, test_rtp_ntp64_extension); tcase_add_test (tc_chain, test_rtp_ntp56_extension); @@ -1004,19 +1234,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = rtp_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (rtp); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/rtsp.c gst-plugins-base1.0-1.6.1/tests/check/libs/rtsp.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/rtsp.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/rtsp.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,6 +1,6 @@ /* GStreamer unit tests for the RTSP support library - * * Copyright (C) 2010 Andy Wingo + * Copyright (C) 2015 Tim-Philipp Müller * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -24,8 +24,7 @@ #include -#include -#include +#include #include GST_START_TEST (test_rtsp_url_basic) @@ -539,6 +538,120 @@ GST_END_TEST; +GST_START_TEST (test_rtsp_message) +{ + GstRTSPMessage *msg; + GstRTSPResult res; + gchar *val = NULL; + + res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY, + "rtsp://foo.bar:8554/test"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CSEQ, "3"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SERVER, "GStreamer"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_TRANSPORT, + "RTP/AVP/TCP;unicast;interleaved=0-1"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SESSION, "xnb_NpaKEc"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.0"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header_by_name (msg, "Custom", "value"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.1"); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.2"); + fail_unless_equals_int (res, GST_RTSP_OK); + + /* make sure fields added via enum work as well */ + res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 1); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + + res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 1); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + + res = gst_rtsp_message_get_header_by_name (msg, "DoesNotExist", &val, 0); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + + res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 1); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "value"); + + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 3); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "bar.1"); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "bar.2"); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "bar.0"); + + res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 3); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 1); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + + /* 2 shifted to position 1 */ + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "bar.2"); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "bar.0"); + + /* remove all headers for a name */ + res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", -1); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + + /* gst_rtsp_message_dump (msg); */ + + res = gst_rtsp_message_free (msg); + fail_unless_equals_int (res, GST_RTSP_OK); + + /* === */ + + res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY, + "rtsp://foo.bar:8554/test"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_add_header_by_name (msg, "CSeq", "3"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + + val = NULL; + res = gst_rtsp_message_get_header_by_name (msg, "cseq", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + + res = gst_rtsp_message_free (msg); + fail_unless_equals_int (res, GST_RTSP_OK); +} + +GST_END_TEST; + static Suite * rtsp_suite (void) { @@ -554,23 +667,9 @@ tcase_add_test (tc_chain, test_rtsp_range_smpte); tcase_add_test (tc_chain, test_rtsp_range_clock); tcase_add_test (tc_chain, test_rtsp_range_convert); + tcase_add_test (tc_chain, test_rtsp_message); return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = rtsp_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (rtsp); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/rtspconnection.c gst-plugins-base1.0-1.6.1/tests/check/libs/rtspconnection.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/rtspconnection.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/rtspconnection.c 2015-10-22 08:01:34.000000000 +0000 @@ -817,19 +817,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = rtspconnection_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (rtspconnection); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/struct_ppc32.h gst-plugins-base1.0-1.6.1/tests/check/libs/struct_ppc32.h --- gst-plugins-base1.0-1.4.3/tests/check/libs/struct_ppc32.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/struct_ppc32.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,80 @@ + +GstCheckABIStruct list[] = { + {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 28}, + {"GstAppSinkClass", sizeof (GstAppSinkClass), 436}, + {"GstAppSink", sizeof (GstAppSink), 488}, + {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 28}, + {"GstAppSrcClass", sizeof (GstAppSrcClass), 440}, + {"GstAppSrc", sizeof (GstAppSrc), 472}, + {"GstAudioCdSrcClass", sizeof (GstAudioCdSrcClass), 524}, + {"GstAudioCdSrc", sizeof (GstAudioCdSrc), 488}, + {"GstAudioCdSrcTrack", sizeof (GstAudioCdSrcTrack), 36}, + {"GstAudioClockClass", sizeof (GstAudioClockClass), 164}, + {"GstAudioClock", sizeof (GstAudioClock), 160}, + {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 436}, + {"GstAudioFilter", sizeof (GstAudioFilter), 704}, + {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 468}, + {"GstAudioSink", sizeof (GstAudioSink), 552}, + {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 496}, + {"GstAudioSrc", sizeof (GstAudioSrc), 544}, + {"GstAudioBaseSinkClass", sizeof (GstAudioBaseSinkClass), 424}, + {"GstAudioBaseSink", sizeof (GstAudioBaseSink), 528}, + {"GstAudioBaseSrcClass", sizeof (GstAudioBaseSrcClass), 452}, + {"GstAudioBaseSrc", sizeof (GstAudioBaseSrc), 520}, + {"GstRTPBaseAudioPayloadClass", sizeof (GstRTPBaseAudioPayloadClass), 304}, + {"GstRTPBaseAudioPayload", sizeof (GstRTPBaseAudioPayload), 456}, + {"GstRTPBaseDepayloadClass", sizeof (GstRTPBaseDepayloadClass), 280}, + {"GstRTPBaseDepayload", sizeof (GstRTPBaseDepayload), 328}, + {"GstRTPBasePayloadClass", sizeof (GstRTPBasePayloadClass), 288}, + {"GstRTPBasePayload", sizeof (GstRTPBasePayload), 408}, + {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 88}, + {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 40}, + {"GstColorBalanceInterface", sizeof (GstColorBalanceInterface), 44}, + {"GstDiscovererClass", sizeof (GstDiscovererClass), 100}, + {"GstDiscoverer", sizeof (GstDiscoverer), 32}, + {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8}, + {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16}, + {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4}, + {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8}, + {"GstNavigationInterface", sizeof (GstNavigationInterface), 12}, + {"gst_riff_acid", sizeof (gst_riff_acid), 24}, + {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4}, + {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16}, + {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16}, + {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32}, + {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40}, + {"gst_riff_strh", sizeof (gst_riff_strh), 48}, + {"GstAudioRingBufferClass", sizeof (GstAudioRingBufferClass), 156}, + {"GstAudioRingBuffer", sizeof (GstAudioRingBuffer), 768}, + {"GstAudioRingBufferSpec", sizeof (GstAudioRingBufferSpec), 352}, + {"GstRTCPPacket", sizeof (GstRTCPPacket), 36}, + {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 40}, + {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 64}, + {"GstRTSPMessage", sizeof (GstRTSPMessage), 44}, + {"GstRTSPRange", sizeof (GstRTSPRange), 8}, + {"GstRTSPTime", sizeof (GstRTSPTime), 16}, + {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 88}, + {"GstRTSPTransport", sizeof (GstRTSPTransport), 92}, + {"GstRTSPUrl", sizeof (GstRTSPUrl), 32}, + {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 48}, + {"GstSDPAttribute", sizeof (GstSDPAttribute), 8}, + {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 8}, + {"GstSDPConnection", sizeof (GstSDPConnection), 20}, + {"GstSDPKey", sizeof (GstSDPKey), 8}, + {"GstSDPMedia", sizeof (GstSDPMedia), 44}, + {"GstSDPMessage", sizeof (GstSDPMessage), 96}, + {"GstSDPOrigin", sizeof (GstSDPOrigin), 24}, + {"GstSDPTime", sizeof (GstSDPTime), 12}, + {"GstSDPZone", sizeof (GstSDPZone), 8}, + {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 8}, + {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 284}, + {"GstTagDemux", sizeof (GstTagDemux), 208}, + {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 444}, + {"GstVideoFilter", sizeof (GstVideoFilter), 640}, + {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 40}, + {"GstVideoRectangle", sizeof (GstVideoRectangle), 16}, + {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 420}, + {"GstVideoSink", sizeof (GstVideoSink), 496}, + {"GstVideoOverlayInterface", sizeof (GstVideoOverlayInterface), 24}, + {NULL, 0, 0} +}; diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/struct_ppc64.h gst-plugins-base1.0-1.6.1/tests/check/libs/struct_ppc64.h --- gst-plugins-base1.0-1.4.3/tests/check/libs/struct_ppc64.h 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/struct_ppc64.h 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,80 @@ + +GstCheckABIStruct list[] = { + {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 56}, + {"GstAppSinkClass", sizeof (GstAppSinkClass), 864}, + {"GstAppSink", sizeof (GstAppSink), 704}, + {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 56}, + {"GstAppSrcClass", sizeof (GstAppSrcClass), 872}, + {"GstAppSrc", sizeof (GstAppSrc), 688}, + {"GstAudioCdSrcClass", sizeof (GstAudioCdSrcClass), 1040}, + {"GstAudioCdSrc", sizeof (GstAudioCdSrc), 720}, + {"GstAudioCdSrcTrack", sizeof (GstAudioCdSrcTrack), 48}, + {"GstAudioClockClass", sizeof (GstAudioClockClass), 328}, + {"GstAudioClock", sizeof (GstAudioClock), 240}, + {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 856}, + {"GstAudioFilter", sizeof (GstAudioFilter), 928}, + {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 928}, + {"GstAudioSink", sizeof (GstAudioSink), 792}, + {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 984}, + {"GstAudioSrc", sizeof (GstAudioSrc), 800}, + {"GstAudioBaseSinkClass", sizeof (GstAudioBaseSinkClass), 840}, + {"GstAudioBaseSink", sizeof (GstAudioBaseSink), 752}, + {"GstAudioBaseSrcClass", sizeof (GstAudioBaseSrcClass), 896}, + {"GstAudioBaseSrc", sizeof (GstAudioBaseSrc), 760}, + {"GstRTPBaseAudioPayloadClass", sizeof (GstRTPBaseAudioPayloadClass), 600}, + {"GstRTPBaseAudioPayload", sizeof (GstRTPBaseAudioPayload), 600}, + {"GstRTPBaseDepayloadClass", sizeof (GstRTPBaseDepayloadClass), 552}, + {"GstRTPBaseDepayload", sizeof (GstRTPBaseDepayload), 456}, + {"GstRTPBasePayloadClass", sizeof (GstRTPBasePayloadClass), 568}, + {"GstRTPBasePayload", sizeof (GstRTPBasePayload), 536}, + {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 176}, + {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 72}, + {"GstColorBalanceInterface", sizeof (GstColorBalanceInterface), 88}, + {"GstDiscovererClass", sizeof (GstDiscovererClass), 200}, + {"GstDiscoverer", sizeof (GstDiscoverer), 64}, + {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8}, + {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16}, + {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4}, + {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8}, + {"GstNavigationInterface", sizeof (GstNavigationInterface), 24}, + {"gst_riff_acid", sizeof (gst_riff_acid), 24}, + {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4}, + {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16}, + {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16}, + {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32}, + {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40}, + {"gst_riff_strh", sizeof (gst_riff_strh), 48}, + {"GstAudioRingBufferClass", sizeof (GstAudioRingBufferClass), 312}, + {"GstAudioRingBuffer", sizeof (GstAudioRingBuffer), 888}, + {"GstAudioRingBufferSpec", sizeof (GstAudioRingBufferSpec), 400}, + {"GstRTCPPacket", sizeof (GstRTCPPacket), 40}, + {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 80}, + {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 128}, + {"GstRTSPMessage", sizeof (GstRTSPMessage), 88}, + {"GstRTSPRange", sizeof (GstRTSPRange), 8}, + {"GstRTSPTime", sizeof (GstRTSPTime), 16}, + {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 88}, + {"GstRTSPTransport", sizeof (GstRTSPTransport), 120}, + {"GstRTSPUrl", sizeof (GstRTSPUrl), 56}, + {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 96}, + {"GstSDPAttribute", sizeof (GstSDPAttribute), 16}, + {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 16}, + {"GstSDPConnection", sizeof (GstSDPConnection), 32}, + {"GstSDPKey", sizeof (GstSDPKey), 16}, + {"GstSDPMedia", sizeof (GstSDPMedia), 80}, + {"GstSDPMessage", sizeof (GstSDPMessage), 184}, + {"GstSDPOrigin", sizeof (GstSDPOrigin), 48}, + {"GstSDPTime", sizeof (GstSDPTime), 24}, + {"GstSDPZone", sizeof (GstSDPZone), 16}, + {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 16}, + {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 552}, + {"GstTagDemux", sizeof (GstTagDemux), 304}, + {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 872}, + {"GstVideoFilter", sizeof (GstVideoFilter), 920}, + {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 80}, + {"GstVideoRectangle", sizeof (GstVideoRectangle), 16}, + {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 832}, + {"GstVideoSink", sizeof (GstVideoSink), 712}, + {"GstVideoOverlayInterface", sizeof (GstVideoOverlayInterface), 48}, + {NULL, 0, 0} +}; diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/tag.c gst-plugins-base1.0-1.6.1/tests/check/libs/tag.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/tag.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/tag.c 2015-10-22 08:01:34.000000000 +0000 @@ -1811,19 +1811,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = tag_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (tag); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/video.c gst-plugins-base1.0-1.6.1/tests/check/libs/video.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/video.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/video.c 2015-10-22 08:01:34.000000000 +0000 @@ -365,6 +365,17 @@ return FALSE; } +static gint +get_num_formats (void) +{ + gint num_formats = 100; + fail_unless (gst_video_format_to_string (num_formats) == NULL); + while (gst_video_format_to_string (num_formats) == NULL) + --num_formats; + GST_INFO ("number of known video formats: %d", num_formats); + return num_formats + 1; +} + GST_START_TEST (test_video_formats_all) { GstStructure *s; @@ -372,11 +383,7 @@ GstCaps *caps; guint num, n, num_formats; - num_formats = 100; - fail_unless (gst_video_format_to_string (num_formats) == NULL); - while (gst_video_format_to_string (num_formats) == NULL) - --num_formats; - GST_INFO ("number of known video formats: %d", num_formats); + num_formats = get_num_formats (); caps = gst_caps_from_string ("video/x-raw, format=" GST_VIDEO_FORMATS_ALL); s = gst_caps_get_structure (caps, 0); @@ -395,8 +402,8 @@ fail_if (gst_video_format_from_string (fmt_str) == GST_VIDEO_FORMAT_UNKNOWN); } - /* Take into account GST_VIDEO_FORMAT_ENCODED */ - fail_unless_equals_int (num, num_formats - 1); + /* Take into account GST_VIDEO_FORMAT_ENCODED and UNKNOWN */ + fail_unless_equals_int (num, num_formats - 2); gst_caps_unref (caps); } @@ -405,16 +412,11 @@ #define WIDTH 77 #define HEIGHT 20 - GST_START_TEST (test_video_formats_pack_unpack) { guint n, num_formats; - num_formats = 100; - fail_unless (gst_video_format_to_string (num_formats) == NULL); - while (gst_video_format_to_string (num_formats) == NULL) - --num_formats; - GST_INFO ("number of known video formats: %d", num_formats); + num_formats = get_num_formats (); for (n = GST_VIDEO_FORMAT_ENCODED + 1; n < num_formats; ++n) { const GstVideoFormatInfo *vfinfo, *unpackinfo; @@ -476,6 +478,8 @@ } GST_END_TEST; +#undef WIDTH +#undef HEIGHT GST_START_TEST (test_video_formats) { @@ -739,11 +743,15 @@ GstCaps *caps, *caps2; caps = gst_caps_from_string (formats[i].tmpl_caps_string); + fail_unless (caps != NULL); gst_caps_set_simple (caps, "width", G_TYPE_INT, 2 * (i + 1), "height", G_TYPE_INT, i + 1, "framerate", GST_TYPE_FRACTION, 15, 1, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, "interlace-mode", G_TYPE_STRING, "progressive", - "colorimetry", G_TYPE_STRING, "1:1:0:0", NULL); + "colorimetry", G_TYPE_STRING, "1:1:0:0", + "multiview-mode", G_TYPE_STRING, "mono", + "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, 0, + GST_FLAG_SET_MASK_EXACT, NULL); g_assert (gst_caps_is_fixed (caps)); GST_DEBUG ("testing caps: %" GST_PTR_FORMAT, caps); @@ -756,10 +764,14 @@ /* make sure they're serialised back correctly */ caps2 = gst_video_info_to_caps (&vinfo); - fail_unless (caps != NULL); - fail_unless (gst_caps_is_equal (caps, caps2), - "caps [%" GST_PTR_FORMAT "] not equal to caps2 [%" GST_PTR_FORMAT "]", - caps, caps2); + fail_unless (caps2 != NULL); + if (!gst_caps_is_equal (caps, caps2)) { + gchar *caps1s = gst_caps_to_string (caps); + gchar *caps2s = gst_caps_to_string (caps2); + fail ("caps [%s] not equal to caps2 [%s]", caps1s, caps2s); + g_free (caps1s); + g_free (caps2s); + } gst_caps_unref (caps); gst_caps_unref (caps2); @@ -768,6 +780,73 @@ GST_END_TEST; +GST_START_TEST (test_parse_caps_multiview) +{ + gint i, j; + GstVideoMultiviewMode modes[] = { + GST_VIDEO_MULTIVIEW_MODE_MONO, + GST_VIDEO_MULTIVIEW_MODE_LEFT, + GST_VIDEO_MULTIVIEW_MODE_RIGHT, + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, + GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, + GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, + GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, + GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD, + GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME, + GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME, + GST_VIDEO_MULTIVIEW_MODE_SEPARATED, + }; + GstVideoMultiviewFlags flags[] = { + GST_VIDEO_MULTIVIEW_FLAGS_NONE, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST, + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED, + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED, + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO | + GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST, + GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO | + GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED + }; + + for (i = 0; i < G_N_ELEMENTS (modes); i++) { + for (j = 0; j < G_N_ELEMENTS (flags); j++) { + GstVideoInfo vinfo; + GstCaps *caps; + + gst_video_info_init (&vinfo); + gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_I420, 320, 240); + + GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo) = modes[i]; + GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo) = flags[j]; + + caps = gst_video_info_to_caps (&vinfo); + fail_if (caps == NULL); + GST_LOG ("mview mode %d flags %x -> caps %" GST_PTR_FORMAT, + modes[i], flags[j], caps); + + fail_unless (gst_video_info_from_caps (&vinfo, caps)); + + GST_LOG ("mview mode %d flags %x -> info mode %d flags %x", + modes[i], flags[j], GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo), + GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo)); + + fail_unless (GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo) == modes[i], + "Expected multiview mode %d got mode %d", modes[i], + GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo)); + fail_unless (GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo) == flags[j], + "Expected multiview flags 0x%x got 0x%x", flags[j], + GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo)); + + gst_caps_unref (caps); + } + } +} + +GST_END_TEST; + GST_START_TEST (test_events) { GstEvent *e; @@ -1693,12 +1772,877 @@ GST_END_TEST; +static guint8 * +make_pixels (gint depth, gint width, gint height) +{ + guint32 color = 0xff000000; + gint i, j; + + if (depth == 8) { + guint8 *pixels = g_malloc (width * height * 4); + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + pixels[(i * width + j) * 4 + 0] = ((color >> 24) & 0xff); + pixels[(i * width + j) * 4 + 1] = ((color >> 16) & 0xff); + pixels[(i * width + j) * 4 + 2] = ((color >> 8) & 0xff); + pixels[(i * width + j) * 4 + 3] = (color & 0xff); + color++; + } + } + return pixels; + } else { +#define TO16(a) (((a)<<8)|(a)) + guint16 *pixels = g_malloc (width * height * 8); + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + pixels[(i * width + j) * 4 + 0] = TO16 ((color >> 24) & 0xff); + pixels[(i * width + j) * 4 + 1] = TO16 ((color >> 16) & 0xff); + pixels[(i * width + j) * 4 + 2] = TO16 ((color >> 8) & 0xff); + pixels[(i * width + j) * 4 + 3] = TO16 (color & 0xff); + color++; + } + } +#undef TO16 + return (guint8 *) pixels; + } +} + +#define HS(x,o) ((x)&hs[o]) +#define WS(x,o) ((x)&ws[o]) +#define IN(i,j,o) (in[(HS(i, o)*width + WS(j,o))*4+(o)] & mask[o]) +#define OUT(i,j,o) (out[((i)*width + (j))*4+o] & mask[o]) +static gint +compare_frame (const GstVideoFormatInfo * finfo, gint depth, guint8 * outpixels, + guint8 * pixels, gint width, gint height) +{ + gint diff, i, j, k; + guint ws[4], hs[4], mask[4]; + + for (k = 0; k < 4; k++) { + hs[k] = G_MAXUINT << finfo->h_sub[(3 + k) % 4]; + ws[k] = G_MAXUINT << finfo->w_sub[(3 + k) % 4]; + mask[k] = G_MAXUINT << (depth - finfo->depth[(3 + k) % 4]); + } + diff = 0; + if (depth == 8) { + guint8 *in = pixels; + guint8 *out = outpixels; + + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + for (k = 0; k < 4; k++) { + diff += IN (i, j, k) != OUT (i, j, k); + } + } + } + } else { + guint16 *in = (guint16 *) pixels; + guint16 *out = (guint16 *) outpixels; + + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + for (k = 0; k < 4; k++) { + diff += IN (i, j, k) != OUT (i, j, k); + } + } + } + } + return diff; +} + +#undef WS +#undef HS +#undef IN +#undef OUT + +typedef struct +{ + GstVideoFormat infmt; + GstVideoFormat outfmt; + gint method; + gdouble convert_sec; +} ConvertResult; + +#define SIGN(a,b) ((a) < (b) ? -1 : (a) > (b) ? 1 : 0) + +static gint +compare_result (gconstpointer a, gconstpointer b) +{ + const ConvertResult *ap = a; + const ConvertResult *bp = b; + + return SIGN (ap->convert_sec, bp->convert_sec); +} + +#define UNPACK_FRAME(frame,dest,line,x,width) \ + (frame)->info.finfo->unpack_func ((frame)->info.finfo, \ + (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ + GST_VIDEO_PACK_FLAG_INTERLACED : \ + GST_VIDEO_PACK_FLAG_NONE), \ + dest, (frame)->data, (frame)->info.stride, x, \ + line, width) +#define PACK_FRAME(frame,src,line,width) \ + (frame)->info.finfo->pack_func ((frame)->info.finfo, \ + (GST_VIDEO_FRAME_IS_INTERLACED (frame) ? \ + GST_VIDEO_PACK_FLAG_INTERLACED : \ + GST_VIDEO_PACK_FLAG_NONE), \ + src, 0, (frame)->data, (frame)->info.stride, \ + (frame)->info.chroma_site, line, width); + +GST_START_TEST (test_video_pack_unpack2) +{ + GstVideoFormat format; + GTimer *timer; + gint num_formats, i; + GArray *packarray, *unpackarray; + +#define WIDTH 320 +#define HEIGHT 240 +/* set to something larger to do benchmarks */ +#define TIME 0.01 + + timer = g_timer_new (); + packarray = g_array_new (FALSE, FALSE, sizeof (ConvertResult)); + unpackarray = g_array_new (FALSE, FALSE, sizeof (ConvertResult)); + + num_formats = get_num_formats (); + + GST_DEBUG ("pack/sec\t unpack/sec \tpack GB/sec\tunpack GB/sec\tformat"); + + for (format = GST_VIDEO_FORMAT_I420; format < num_formats; format++) { + GstVideoInfo info; + const GstVideoFormatInfo *finfo, *fuinfo; + GstBuffer *buffer; + GstVideoFrame frame; + gint k, stride, count, diff, depth; + guint8 *pixels, *outpixels; + gdouble elapsed; + gdouble unpack_sec, pack_sec; + ConvertResult res; + + finfo = gst_video_format_get_info (format); + fail_unless (finfo != NULL); + + if (GST_VIDEO_FORMAT_INFO_HAS_PALETTE (finfo)) + continue; + + fuinfo = gst_video_format_get_info (finfo->unpack_format); + fail_unless (fuinfo != NULL); + + depth = GST_VIDEO_FORMAT_INFO_BITS (fuinfo); + fail_unless (depth == 8 || depth == 16); + + pixels = make_pixels (depth, WIDTH, HEIGHT); + stride = WIDTH * (depth >> 1); + + gst_video_info_set_format (&info, format, WIDTH, HEIGHT); + buffer = gst_buffer_new_and_alloc (info.size); + gst_video_frame_map (&frame, &info, buffer, GST_MAP_READWRITE); + + /* pack the frame into the target format */ + /* warmup */ + PACK_FRAME (&frame, pixels, 0, WIDTH); + + count = 0; + g_timer_start (timer); + while (TRUE) { + for (k = 0; k < HEIGHT; k += finfo->pack_lines) { + PACK_FRAME (&frame, pixels + k * stride, k, WIDTH); + } + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + unpack_sec = count / elapsed; + + res.infmt = format; + res.outfmt = finfo->unpack_format; + res.convert_sec = unpack_sec; + g_array_append_val (unpackarray, res); + + outpixels = g_malloc0 (HEIGHT * stride); + + /* unpack the frame */ + /* warmup */ + UNPACK_FRAME (&frame, outpixels, 0, 0, WIDTH); + + count = 0; + g_timer_start (timer); + while (TRUE) { + for (k = 0; k < HEIGHT; k += finfo->pack_lines) { + UNPACK_FRAME (&frame, outpixels + k * stride, k, 0, WIDTH); + } + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + pack_sec = count / elapsed; + + res.outfmt = format; + res.infmt = finfo->unpack_format; + res.convert_sec = pack_sec; + g_array_append_val (packarray, res); + + /* compare the frame */ + diff = compare_frame (finfo, depth, outpixels, pixels, WIDTH, HEIGHT); + + GST_DEBUG ("%f \t %f \t %f \t %f \t %s %d/%f", pack_sec, unpack_sec, + info.size * pack_sec, info.size * unpack_sec, finfo->name, count, + elapsed); + + if (diff != 0) { + gst_util_dump_mem (outpixels, 128); + gst_util_dump_mem (pixels, 128); + fail_if (diff != 0); + } + gst_video_frame_unmap (&frame); + gst_buffer_unref (buffer); + g_free (pixels); + g_free (outpixels); + } + + g_array_sort (packarray, compare_result); + for (i = 0; i < packarray->len; i++) { + ConvertResult *res = &g_array_index (packarray, ConvertResult, i); + + GST_DEBUG ("%f pack/sec %s->%s", res->convert_sec, + gst_video_format_to_string (res->infmt), + gst_video_format_to_string (res->outfmt)); + } + + g_array_sort (unpackarray, compare_result); + for (i = 0; i < unpackarray->len; i++) { + ConvertResult *res = &g_array_index (unpackarray, ConvertResult, i); + + GST_DEBUG ("%f unpack/sec %s->%s", res->convert_sec, + gst_video_format_to_string (res->infmt), + gst_video_format_to_string (res->outfmt)); + } + + g_timer_destroy (timer); + g_array_free (packarray, TRUE); + g_array_free (unpackarray, TRUE); +} + +GST_END_TEST; +#undef WIDTH +#undef HEIGHT +#undef TIME + +#define WIDTH 320 +#define HEIGHT 240 +#define TIME 0.1 +#define GET_LINE(l) (pixels + CLAMP (l, 0, HEIGHT-1) * WIDTH * 4) +GST_START_TEST (test_video_chroma) +{ + guint8 *pixels; + guint n_lines; + gint i, j, k, offset, count; + gpointer lines[10]; + GTimer *timer; + gdouble elapsed, subsample_sec; + GstVideoChromaSite sites[] = { + GST_VIDEO_CHROMA_SITE_NONE, + GST_VIDEO_CHROMA_SITE_H_COSITED, + }; + + timer = g_timer_new (); + pixels = make_pixels (8, WIDTH, HEIGHT); + + for (k = 0; k < G_N_ELEMENTS (sites); k++) { + GstVideoChromaResample *resample; + + resample = gst_video_chroma_resample_new (GST_VIDEO_CHROMA_METHOD_LINEAR, + sites[k], GST_VIDEO_CHROMA_FLAG_NONE, GST_VIDEO_FORMAT_AYUV, -1, -1); + + gst_video_chroma_resample_get_info (resample, &n_lines, &offset); + fail_unless (n_lines < 10); + + /* warmup */ + for (j = 0; j < n_lines; j++) + lines[j] = GET_LINE (offset + j); + gst_video_chroma_resample (resample, lines, WIDTH); + + count = 0; + g_timer_start (timer); + while (TRUE) { + for (i = 0; i < HEIGHT; i += n_lines) { + for (j = 0; j < n_lines; j++) + lines[j] = GET_LINE (i + offset + j); + + gst_video_chroma_resample (resample, lines, WIDTH); + } + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + subsample_sec = count / elapsed; + GST_DEBUG ("%f downsamples/sec %d/%f", subsample_sec, count, elapsed); + gst_video_chroma_resample_free (resample); + + resample = gst_video_chroma_resample_new (GST_VIDEO_CHROMA_METHOD_LINEAR, + sites[k], GST_VIDEO_CHROMA_FLAG_NONE, GST_VIDEO_FORMAT_AYUV, 1, 1); + + gst_video_chroma_resample_get_info (resample, &n_lines, &offset); + fail_unless (n_lines < 10); + + /* warmup */ + for (j = 0; j < n_lines; j++) + lines[j] = GET_LINE (offset + j); + gst_video_chroma_resample (resample, lines, WIDTH); + + count = 0; + g_timer_start (timer); + while (TRUE) { + for (i = 0; i < HEIGHT; i += n_lines) { + for (j = 0; j < n_lines; j++) + lines[j] = GET_LINE (i + offset + j); + + gst_video_chroma_resample (resample, lines, WIDTH); + } + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + subsample_sec = count / elapsed; + GST_DEBUG ("%f upsamples/sec %d/%f", subsample_sec, count, elapsed); + gst_video_chroma_resample_free (resample); + } + + g_free (pixels); + g_timer_destroy (timer); +} + +GST_END_TEST; +#undef WIDTH +#undef HEIGHT +#undef TIME + +GST_START_TEST (test_video_scaler) +{ + GstVideoScaler *scale; + + scale = gst_video_scaler_new (GST_VIDEO_RESAMPLER_METHOD_LINEAR, + GST_VIDEO_SCALER_FLAG_NONE, 2, 10, 5, NULL); + gst_video_scaler_free (scale); + + scale = gst_video_scaler_new (GST_VIDEO_RESAMPLER_METHOD_LINEAR, + GST_VIDEO_SCALER_FLAG_NONE, 2, 15, 5, NULL); + gst_video_scaler_free (scale); +} + +GST_END_TEST; + +#define WIDTH 320 +#define HEIGHT 240 +#define TIME 0.01 + +GST_START_TEST (test_video_color_convert) +{ + GstVideoFormat infmt, outfmt; + GTimer *timer; + gint num_formats, i; + GArray *array; + + array = g_array_new (FALSE, FALSE, sizeof (ConvertResult)); + + timer = g_timer_new (); + + num_formats = get_num_formats (); + + for (infmt = GST_VIDEO_FORMAT_I420; infmt < num_formats; infmt++) { + GstVideoInfo ininfo; + GstVideoFrame inframe; + GstBuffer *inbuffer; + + gst_video_info_set_format (&ininfo, infmt, WIDTH, HEIGHT); + inbuffer = gst_buffer_new_and_alloc (ininfo.size); + gst_buffer_memset (inbuffer, 0, 0, -1); + gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ); + + for (outfmt = GST_VIDEO_FORMAT_I420; outfmt < num_formats; outfmt++) { + GstVideoInfo outinfo; + GstVideoFrame outframe; + GstBuffer *outbuffer; + GstVideoConverter *convert; + gdouble elapsed; + gint count; + ConvertResult res; + + gst_video_info_set_format (&outinfo, outfmt, WIDTH, HEIGHT); + outbuffer = gst_buffer_new_and_alloc (outinfo.size); + gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE); + + convert = gst_video_converter_new (&ininfo, &outinfo, NULL); + /* warmup */ + gst_video_converter_frame (convert, &inframe, &outframe); + + count = 0; + g_timer_start (timer); + while (TRUE) { + gst_video_converter_frame (convert, &inframe, &outframe); + + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + + res.infmt = infmt; + res.outfmt = outfmt; + res.convert_sec = count / elapsed; + + GST_DEBUG ("%f conversions/sec %s->%s, %d/%f", res.convert_sec, + gst_video_format_to_string (infmt), + gst_video_format_to_string (outfmt), count, elapsed); + + g_array_append_val (array, res); + + gst_video_converter_free (convert); + + gst_video_frame_unmap (&outframe); + gst_buffer_unref (outbuffer); + } + gst_video_frame_unmap (&inframe); + gst_buffer_unref (inbuffer); + } + + g_array_sort (array, compare_result); + + for (i = 0; i < array->len; i++) { + ConvertResult *res = &g_array_index (array, ConvertResult, i); + + GST_DEBUG ("%f conversions/sec %s->%s", res->convert_sec, + gst_video_format_to_string (res->infmt), + gst_video_format_to_string (res->outfmt)); + } + + g_array_free (array, TRUE); + + g_timer_destroy (timer); +} + +GST_END_TEST; +#undef WIDTH +#undef HEIGHT + +#define WIDTH_IN 320 +#define HEIGHT_IN 240 +#define WIDTH_OUT 400 +#define HEIGHT_OUT 300 +#define TIME 0.01 + +GST_START_TEST (test_video_size_convert) +{ + GstVideoFormat infmt, outfmt; + GTimer *timer; + gint num_formats, i; + GArray *array; + + array = g_array_new (FALSE, FALSE, sizeof (ConvertResult)); + + timer = g_timer_new (); + + num_formats = get_num_formats (); + + for (infmt = GST_VIDEO_FORMAT_I420; infmt < num_formats; infmt++) { + GstVideoInfo ininfo, outinfo; + GstVideoFrame inframe, outframe; + GstBuffer *inbuffer, *outbuffer; + GstVideoConverter *convert; + gdouble elapsed; + gint count, method; + ConvertResult res; + + gst_video_info_set_format (&ininfo, infmt, WIDTH_IN, HEIGHT_IN); + inbuffer = gst_buffer_new_and_alloc (ininfo.size); + gst_buffer_memset (inbuffer, 0, 0, -1); + gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ); + + outfmt = infmt; + gst_video_info_set_format (&outinfo, outfmt, WIDTH_OUT, HEIGHT_OUT); + outbuffer = gst_buffer_new_and_alloc (outinfo.size); + gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE); + + for (method = 0; method < 4; method++) { + convert = gst_video_converter_new (&ininfo, &outinfo, + gst_structure_new ("options", + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, method, NULL)); + + /* warmup */ + gst_video_converter_frame (convert, &inframe, &outframe); + + count = 0; + g_timer_start (timer); + while (TRUE) { + gst_video_converter_frame (convert, &inframe, &outframe); + + count++; + elapsed = g_timer_elapsed (timer, NULL); + if (elapsed >= TIME) + break; + } + + res.infmt = infmt; + res.outfmt = outfmt; + res.method = method; + res.convert_sec = count / elapsed; + + GST_DEBUG ("%f resize/sec %s->%s, %d, %d/%f", res.convert_sec, + gst_video_format_to_string (infmt), + gst_video_format_to_string (outfmt), method, count, elapsed); + + g_array_append_val (array, res); + + gst_video_converter_free (convert); + } + gst_video_frame_unmap (&outframe); + gst_buffer_unref (outbuffer); + gst_video_frame_unmap (&inframe); + gst_buffer_unref (inbuffer); + } + + g_array_sort (array, compare_result); + + for (i = 0; i < array->len; i++) { + ConvertResult *res = &g_array_index (array, ConvertResult, i); + + GST_DEBUG ("%f method %d, resize/sec %s->%s", res->convert_sec, res->method, + gst_video_format_to_string (res->infmt), + gst_video_format_to_string (res->outfmt)); + } + + g_array_free (array, TRUE); + + g_timer_destroy (timer); +} + +GST_END_TEST; +#undef WIDTH +#undef HEIGHT + +GST_START_TEST (test_video_convert) +{ + GstVideoInfo ininfo, outinfo; + GstVideoFrame inframe, outframe; + GstBuffer *inbuffer, *outbuffer; + GstVideoConverter *convert; + + gst_video_info_set_format (&ininfo, GST_VIDEO_FORMAT_ARGB, 320, 240); + inbuffer = gst_buffer_new_and_alloc (ininfo.size); + gst_buffer_memset (inbuffer, 0, 0, -1); + gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ); + + gst_video_info_set_format (&outinfo, GST_VIDEO_FORMAT_BGRx, 400, 300); + outbuffer = gst_buffer_new_and_alloc (outinfo.size); + gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE); + + /* see that we don't reuse the source line directly because we need + * to add borders to it */ + convert = gst_video_converter_new (&ininfo, &outinfo, + gst_structure_new ("options", + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, 3, + GST_VIDEO_CONVERTER_OPT_SRC_X, G_TYPE_INT, 10, + GST_VIDEO_CONVERTER_OPT_SRC_Y, G_TYPE_INT, 0, + GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, G_TYPE_INT, 300, + GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT, G_TYPE_INT, 220, + GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, 80, + GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, 60, + GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT, 300, + GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, 220, NULL)); + + gst_video_converter_frame (convert, &inframe, &outframe); + gst_video_converter_free (convert); + + /* see that we reuse the source line directly because we need to scale + * it first */ + convert = gst_video_converter_new (&ininfo, &outinfo, + gst_structure_new ("options", + GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, + GST_TYPE_VIDEO_RESAMPLER_METHOD, 3, + GST_VIDEO_CONVERTER_OPT_SRC_X, G_TYPE_INT, 10, + GST_VIDEO_CONVERTER_OPT_SRC_Y, G_TYPE_INT, 0, + GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, G_TYPE_INT, 300, + GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT, G_TYPE_INT, 220, + GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, 80, + GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, 60, + GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT, 310, + GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, 230, NULL)); + + gst_video_converter_frame (convert, &inframe, &outframe); + gst_video_converter_free (convert); + + gst_video_frame_unmap (&outframe); + gst_buffer_unref (outbuffer); + gst_video_frame_unmap (&inframe); + gst_buffer_unref (inbuffer); + +} + +GST_END_TEST; + +GST_START_TEST (test_video_transfer) +{ + gint i, j; + + for (j = GST_VIDEO_TRANSFER_GAMMA10; j <= GST_VIDEO_TRANSFER_LOG316; j++) { + for (i = 0; i < 256; i++) { + gdouble val1, val2; + + val1 = gst_video_color_transfer_encode (j, i / 255.0); + fail_if (val1 < 0.0 || val1 > 1.0); + + val2 = gst_video_color_transfer_decode (j, val1); + fail_if (val2 < 0.0 || val2 > 1.0); + + GST_DEBUG ("%d: %d %f->%f->%f %d", j, i, i / 255.0, val1, val2, + (int) lrint (val2 * 255.0)); + if (val1 == 0.0) + fail_if (val2 != 0.0); + else + fail_if (lrint (val2 * 255.0) != i); + } + } +} + +GST_END_TEST; + +GST_START_TEST (test_video_center_rect) +{ + GstVideoRectangle src, dest, result, expected; + +#define NEW_RECT(x,y,w,h) ((GstVideoRectangle) {x,y,w,h}) +#define CHECK_RECT(res, exp) \ + fail_unless_equals_int(exp.x, res.x);\ + fail_unless_equals_int(exp.y, res.y);\ + fail_unless_equals_int(exp.w, res.w);\ + fail_unless_equals_int(exp.h, res.h); + + /* 1:1 Aspect Ratio */ + src = NEW_RECT (0, 0, 100, 100); + dest = NEW_RECT (0, 0, 100, 100); + expected = NEW_RECT (0, 0, 100, 100); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + src = NEW_RECT (0, 0, 100, 100); + dest = NEW_RECT (0, 0, 50, 50); + expected = NEW_RECT (0, 0, 50, 50); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + src = NEW_RECT (0, 0, 100, 100); + dest = NEW_RECT (50, 50, 100, 100); + expected = NEW_RECT (50, 50, 100, 100); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + /* Aspect ratio scaling (tall) */ + src = NEW_RECT (0, 0, 50, 100); + dest = NEW_RECT (0, 0, 50, 50); + expected = NEW_RECT (12, 0, 25, 50); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + src = NEW_RECT (0, 0, 50, 100); + dest = NEW_RECT (50, 50, 50, 50); + expected = NEW_RECT (62, 50, 25, 50); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + /* Aspect ratio scaling (wide) */ + src = NEW_RECT (0, 0, 100, 50); + dest = NEW_RECT (0, 0, 50, 50); + expected = NEW_RECT (0, 12, 50, 25); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); + + src = NEW_RECT (0, 0, 100, 50); + dest = NEW_RECT (50, 50, 50, 50); + expected = NEW_RECT (50, 62, 50, 25); + gst_video_sink_center_rect (src, dest, &result, TRUE); + CHECK_RECT (result, expected); +} + +GST_END_TEST; + +void test_overlay_blend_rect (gint x, gint y, gint width, gint height, + GstVideoFrame * video_frame); +void test_overlay_blend_rect_verify (gint x, gint y, gint width, + gint height, GstVideoFrame * video_frame); +#define VIDEO_WIDTH 320 +#define VIDEO_HEIGHT 240 + +void +test_overlay_blend_rect_verify (gint x, gint y, gint width, gint height, + GstVideoFrame * video_frame) +{ + guint8 *data; + gint i = 0, prev_i = 0; + gint size = 0; + gint temp_width = 0, temp_height = 0; + + data = GST_VIDEO_FRAME_PLANE_DATA (video_frame, 0); + size = GST_VIDEO_FRAME_SIZE (video_frame); + + if (x + width < 0 || y + height < 0 || x >= VIDEO_WIDTH || y >= VIDEO_HEIGHT) + return; + if (x <= 0) + temp_width = width + x; + else if (x > 0 && (x + width) <= VIDEO_WIDTH) + temp_width = width; + else + temp_width = VIDEO_WIDTH - x; + if (y <= 0) + temp_height = height + y; + else if (y > 0 && (y + height) <= VIDEO_HEIGHT) + temp_height = height; + else + temp_height = VIDEO_HEIGHT - y; + + if (x <= 0 && y <= 0) + i = 0; + else + i = (((x <= 0) ? 0 : x) + (((y <= 0) ? 0 : y) * VIDEO_WIDTH)) * 4; + prev_i = i; + + for (; i < size - 4; i += 4) { +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + /* B - G - R - A */ + fail_unless_equals_int (data[i], 0x40); + fail_unless_equals_int (data[i + 1], 0x40); + fail_unless_equals_int (data[i + 2], 0x40); + fail_unless_equals_int (data[i + 3], 0x00); +#else + /* A - R - G - B */ + fail_unless_equals_int (data[i], 0x00); + fail_unless_equals_int (data[i + 1], 0x40); + fail_unless_equals_int (data[i + 2], 0x40); + fail_unless_equals_int (data[i + 3], 0x40); +#endif + if ((i + 4) == (4 * (((((y > 0) ? (y + temp_height) : temp_height) - + 1) * VIDEO_WIDTH) + ((x > + 0) ? (x + temp_width) : temp_width)))) + break; + if ((i + 4 - prev_i) == ((temp_width) * 4)) { + i += ((VIDEO_WIDTH - (temp_width)) * 4); + prev_i = i + 4; + } + + } +} + +void +test_overlay_blend_rect (gint x, gint y, gint width, gint height, + GstVideoFrame * video_frame) +{ + GstVideoOverlayComposition *comp1; + GstVideoOverlayRectangle *rect1; + GstBuffer *pix, *pix1; + GstVideoInfo vinfo; + + memset (video_frame, 0, sizeof (GstVideoFrame)); + pix = + gst_buffer_new_and_alloc (VIDEO_WIDTH * VIDEO_HEIGHT * sizeof (guint32)); + gst_buffer_memset (pix, 0, 0, gst_buffer_get_size (pix)); + gst_video_info_init (&vinfo); + gst_video_info_set_format (&vinfo, GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, + VIDEO_WIDTH, VIDEO_HEIGHT); + gst_video_frame_map (video_frame, &vinfo, pix, GST_MAP_READWRITE); + gst_buffer_unref (pix); + pix = NULL; + + pix1 = gst_buffer_new_and_alloc (width * height * sizeof (guint32)); + gst_buffer_memset (pix1, 0, 0x80, gst_buffer_get_size (pix1)); + gst_buffer_add_video_meta (pix1, GST_VIDEO_FRAME_FLAG_NONE, + GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, width, height); + rect1 = gst_video_overlay_rectangle_new_raw (pix1, + x, y, width, height, GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE); + gst_buffer_unref (pix1); + pix1 = NULL; + + comp1 = gst_video_overlay_composition_new (rect1); + fail_unless (gst_video_overlay_composition_blend (comp1, video_frame)); + gst_video_overlay_composition_unref (comp1); + gst_video_overlay_rectangle_unref (rect1); + + test_overlay_blend_rect_verify (x, y, width, height, video_frame); + gst_video_frame_unmap (video_frame); +} + +GST_START_TEST (test_overlay_blend) +{ + GstVideoFrame video_frame; + + /* Overlay width & height smaller than video width & height */ + /* Overlay rendered completely left of video surface + * x + overlay_width <= 0 */ + test_overlay_blend_rect (-60, 50, 50, 50, &video_frame); + /* Overlay rendered completely right of video surface + * x >= video_width */ + test_overlay_blend_rect (330, 50, 50, 50, &video_frame); + /* Overlay rendered completely top of video surface + * y + overlay_height <= 0 */ + test_overlay_blend_rect (50, -60, 50, 50, &video_frame); + /* Overlay rendered completely bottom of video surface + * y >= video_height */ + test_overlay_blend_rect (50, 250, 50, 50, &video_frame); + /* Overlay rendered partially left of video surface + * x < 0 && -x < overlay_width */ + test_overlay_blend_rect (-40, 50, 50, 50, &video_frame); + /* Overlay rendered partially right of video surface + * x < video_width && (overlay_width + x) > video_width */ + test_overlay_blend_rect (300, 50, 50, 50, &video_frame); + /* Overlay rendered partially top of video surface + * y < 0 && -y < overlay_height */ + test_overlay_blend_rect (50, -40, 50, 50, &video_frame); + /* Overlay rendered partially bottom of video surface + * y < video_height && (overlay_height + y) > video_height */ + test_overlay_blend_rect (50, 220, 50, 50, &video_frame); + + /* Overlay width & height bigger than video width & height */ + /* Overlay rendered completely left of video surface + * x + overlay_width <= 0 */ + test_overlay_blend_rect (-360, 50, 350, 250, &video_frame); + /* Overlay rendered completely right of video surface + * x >= video_width */ + test_overlay_blend_rect (330, 50, 350, 250, &video_frame); + /* Overlay rendered completely top of video surface + * y + overlay_height <= 0 */ + test_overlay_blend_rect (50, -260, 350, 250, &video_frame); + /* Overlay rendered completely bottom of video surface + * y >= video_height */ + test_overlay_blend_rect (50, 250, 350, 250, &video_frame); + /* Overlay rendered partially left of video surface + * x < 0 && -x < overlay_width */ + test_overlay_blend_rect (-40, 50, 350, 250, &video_frame); + /* Overlay rendered partially right of video surface + * x < video_width && (overlay_width + x) > video_width */ + test_overlay_blend_rect (300, 50, 350, 250, &video_frame); + /* Overlay rendered partially top of video surface + * y < 0 && -y < overlay_height */ + test_overlay_blend_rect (50, -40, 350, 250, &video_frame); + /* Overlay rendered partially bottom of video surface + * y < video_height && (overlay_height + y) > video_height */ + test_overlay_blend_rect (50, 220, 350, 250, &video_frame); +} + +GST_END_TEST; + static Suite * video_suite (void) { Suite *s = suite_create ("video support library"); TCase *tc_chain = tcase_create ("general"); + tcase_set_timeout (tc_chain, 60 * 60); + suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_video_formats); tcase_add_test (tc_chain, test_video_formats_rgb); @@ -1707,6 +2651,7 @@ tcase_add_test (tc_chain, test_video_formats_pack_unpack); tcase_add_test (tc_chain, test_dar_calc); tcase_add_test (tc_chain, test_parse_caps_rgb); + tcase_add_test (tc_chain, test_parse_caps_multiview); tcase_add_test (tc_chain, test_events); tcase_add_test (tc_chain, test_convert_frame); tcase_add_test (tc_chain, test_convert_frame_async); @@ -1714,6 +2659,15 @@ tcase_add_test (tc_chain, test_overlay_composition); tcase_add_test (tc_chain, test_overlay_composition_premultiplied_alpha); tcase_add_test (tc_chain, test_overlay_composition_global_alpha); + tcase_add_test (tc_chain, test_video_pack_unpack2); + tcase_add_test (tc_chain, test_video_chroma); + tcase_add_test (tc_chain, test_video_scaler); + tcase_add_test (tc_chain, test_video_color_convert); + tcase_add_test (tc_chain, test_video_size_convert); + tcase_add_test (tc_chain, test_video_convert); + tcase_add_test (tc_chain, test_video_transfer); + tcase_add_test (tc_chain, test_overlay_blend); + tcase_add_test (tc_chain, test_video_center_rect); return s; } diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/videodecoder.c gst-plugins-base1.0-1.6.1/tests/check/libs/videodecoder.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/videodecoder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/videodecoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -27,6 +27,38 @@ #include #include +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-raw") + ); + +#define RESTRICTED_CAPS_WIDTH 800 +#define RESTRICTED_CAPS_HEIGHT 600 +#define RESTRICTED_CAPS_FPS_N 30 +#define RESTRICTED_CAPS_FPS_D 1 +static GstStaticPadTemplate sinktemplate_restricted = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-raw, width=(int)800, height=(int)600," + " framerate=(fraction)30/1") + ); + +static GstStaticPadTemplate sinktemplate_with_range = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-raw, width=(int)[1,800], height=(int)[1,600]," + " framerate=(fraction)[1/1, 30/1]") + ); + +static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-test-custom") + ); + static GstPad *mysrcpad, *mysinkpad; static GstElement *dec; static GList *events = NULL; @@ -181,22 +213,17 @@ } static void -setup_videodecodertester (void) +setup_videodecodertester (GstStaticPadTemplate * sinktmpl, + GstStaticPadTemplate * srctmpl) { - static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw") - ); - static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-test-custom") - ); + if (sinktmpl == NULL) + sinktmpl = &sinktemplate; + if (srctmpl == NULL) + srctmpl = &srctemplate; dec = g_object_new (GST_VIDEO_DECODER_TESTER_TYPE, NULL); - mysrcpad = gst_check_setup_src_pad (dec, &srctemplate); - mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate); + mysrcpad = gst_check_setup_src_pad (dec, srctmpl); + mysinkpad = gst_check_setup_sink_pad (dec, sinktmpl); gst_pad_set_event_function (mysinkpad, _mysinkpad_event); } @@ -259,7 +286,7 @@ guint64 i; GList *iter; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -317,11 +344,11 @@ { GstSegment segment; GstBuffer *buffer; - guint64 i; + guint i; GList *iter; GList *events_iter; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -426,10 +453,10 @@ { GstSegment segment; GstBuffer *buffer; - guint64 i; + guint i; GList *events_iter; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -533,7 +560,7 @@ GstBuffer *buffer; guint64 i = 0; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -592,7 +619,7 @@ GstClockTime pos; GList *iter; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -653,6 +680,57 @@ GST_END_TEST; +/* make sure that the segment event is pushed before the gap */ +GST_START_TEST (videodecoder_first_data_is_gap) +{ + GstSegment segment; + GList *events_iter; + + setup_videodecodertester (NULL, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + send_startup_events (); + + /* push a new segment */ + gst_segment_init (&segment, GST_FORMAT_TIME); + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment))); + + /* push a gap */ + fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0, + GST_SECOND))); + events_iter = events; + /* make sure the usual events have been received */ + { + GstEvent *sstart = events_iter->data; + fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START); + events_iter = g_list_next (events_iter); + } + { + GstEvent *caps_event = events_iter->data; + fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS); + events_iter = g_list_next (events_iter); + } + { + GstEvent *segment_event = events_iter->data; + fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT); + events_iter = g_list_next (events_iter); + } + + /* Make sure the gap was pushed */ + { + GstEvent *gap = events_iter->data; + fail_unless (GST_EVENT_TYPE (gap) == GST_EVENT_GAP); + events_iter = g_list_next (events_iter); + } + fail_unless (events_iter == NULL); + + cleanup_videodecodertest (); +} + +GST_END_TEST; GST_START_TEST (videodecoder_backwards_playback) { @@ -661,7 +739,7 @@ guint64 i; GList *iter; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -744,7 +822,7 @@ guint64 i; GstClockTime pos; - setup_videodecodertester (); + setup_videodecodertester (NULL, NULL); gst_pad_set_active (mysrcpad, TRUE); gst_element_set_state (dec, GST_STATE_PLAYING); @@ -817,6 +895,187 @@ GST_END_TEST; +GST_START_TEST (videodecoder_query_caps_with_fixed_caps_peer) +{ + GstCaps *caps; + GstCaps *filter; + GstStructure *structure; + gint width, height, fps_n, fps_d; + + setup_videodecodertester (&sinktemplate_restricted, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + structure = gst_caps_get_structure (caps, 0); + fail_unless (gst_structure_get_int (structure, "width", &width)); + fail_unless (gst_structure_get_int (structure, "height", &height)); + fail_unless (gst_structure_get_fraction (structure, "framerate", &fps_n, + &fps_d)); + /* match our restricted caps values */ + fail_unless (width == RESTRICTED_CAPS_WIDTH); + fail_unless (height == RESTRICTED_CAPS_HEIGHT); + fail_unless (fps_n == RESTRICTED_CAPS_FPS_N); + fail_unless (fps_d == RESTRICTED_CAPS_FPS_D); + gst_caps_unref (caps); + + filter = gst_caps_new_simple ("video/x-custom-test", "width", G_TYPE_INT, + 1000, "height", G_TYPE_INT, 1000, "framerate", GST_TYPE_FRACTION, + 1000, 1, NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + fail_unless (gst_caps_is_empty (caps)); + gst_caps_unref (caps); + gst_caps_unref (filter); + + cleanup_videodecodertest (); +} + +GST_END_TEST; + +static void +_get_int_range (GstStructure * s, const gchar * field, gint * min_v, + gint * max_v) +{ + const GValue *value; + + value = gst_structure_get_value (s, field); + fail_unless (value != NULL); + fail_unless (GST_VALUE_HOLDS_INT_RANGE (value)); + + *min_v = gst_value_get_int_range_min (value); + *max_v = gst_value_get_int_range_max (value); +} + +static void +_get_fraction_range (GstStructure * s, const gchar * field, gint * fps_n_min, + gint * fps_d_min, gint * fps_n_max, gint * fps_d_max) +{ + const GValue *value; + const GValue *min_v, *max_v; + + value = gst_structure_get_value (s, field); + fail_unless (value != NULL); + fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (value)); + + min_v = gst_value_get_fraction_range_min (value); + fail_unless (GST_VALUE_HOLDS_FRACTION (min_v)); + *fps_n_min = gst_value_get_fraction_numerator (min_v); + *fps_d_min = gst_value_get_fraction_denominator (min_v); + + max_v = gst_value_get_fraction_range_max (value); + fail_unless (GST_VALUE_HOLDS_FRACTION (max_v)); + *fps_n_max = gst_value_get_fraction_numerator (max_v); + *fps_d_max = gst_value_get_fraction_denominator (max_v); +} + +GST_START_TEST (videodecoder_query_caps_with_range_caps_peer) +{ + GstCaps *caps; + GstCaps *filter; + GstStructure *structure; + gint width, height, fps_n, fps_d; + gint width_min, height_min, fps_n_min, fps_d_min; + gint width_max, height_max, fps_n_max, fps_d_max; + + setup_videodecodertester (&sinktemplate_with_range, NULL); + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + structure = gst_caps_get_structure (caps, 0); + _get_int_range (structure, "width", &width_min, &width_max); + _get_int_range (structure, "height", &height_min, &height_max); + _get_fraction_range (structure, "framerate", &fps_n_min, &fps_d_min, + &fps_n_max, &fps_d_max); + fail_unless (width_min == 1); + fail_unless (width_max == RESTRICTED_CAPS_WIDTH); + fail_unless (height_min == 1); + fail_unless (height_max == RESTRICTED_CAPS_HEIGHT); + fail_unless (fps_n_min == 1); + fail_unless (fps_d_min == 1); + fail_unless (fps_n_max == RESTRICTED_CAPS_FPS_N); + fail_unless (fps_d_max == RESTRICTED_CAPS_FPS_D); + gst_caps_unref (caps); + + /* query with a fixed filter */ + filter = gst_caps_new_simple ("video/x-test-custom", "width", G_TYPE_INT, + RESTRICTED_CAPS_WIDTH, "height", G_TYPE_INT, RESTRICTED_CAPS_HEIGHT, + "framerate", GST_TYPE_FRACTION, RESTRICTED_CAPS_FPS_N, + RESTRICTED_CAPS_FPS_D, NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + structure = gst_caps_get_structure (caps, 0); + fail_unless (gst_structure_get_int (structure, "width", &width)); + fail_unless (gst_structure_get_int (structure, "height", &height)); + fail_unless (gst_structure_get_fraction (structure, "framerate", &fps_n, + &fps_d)); + fail_unless (width == RESTRICTED_CAPS_WIDTH); + fail_unless (height == RESTRICTED_CAPS_HEIGHT); + fail_unless (fps_n == RESTRICTED_CAPS_FPS_N); + fail_unless (fps_d == RESTRICTED_CAPS_FPS_D); + gst_caps_unref (caps); + gst_caps_unref (filter); + + /* query with a fixed filter that will lead to empty result */ + filter = gst_caps_new_simple ("video/x-test-custom", "width", G_TYPE_INT, + 1000, "height", G_TYPE_INT, 1000, "framerate", GST_TYPE_FRACTION, + 1000, 1, NULL); + caps = gst_pad_peer_query_caps (mysrcpad, filter); + fail_unless (caps != NULL); + fail_unless (gst_caps_is_empty (caps)); + gst_caps_unref (caps); + gst_caps_unref (filter); + + cleanup_videodecodertest (); +} + +GST_END_TEST; + +#define GETCAPS_CAPS_STR "video/x-test-custom, somefield=(string)getcaps" +static GstCaps * +_custom_video_decoder_getcaps (GstVideoDecoder * dec, GstCaps * filter) +{ + return gst_caps_from_string (GETCAPS_CAPS_STR); +} + +GST_START_TEST (videodecoder_query_caps_with_custom_getcaps) +{ + GstCaps *caps; + GstVideoDecoderClass *klass; + GstCaps *expected_caps; + + setup_videodecodertester (&sinktemplate_restricted, NULL); + + klass = GST_VIDEO_DECODER_CLASS (GST_VIDEO_DECODER_GET_CLASS (dec)); + klass->getcaps = _custom_video_decoder_getcaps; + + gst_pad_set_active (mysrcpad, TRUE); + gst_element_set_state (dec, GST_STATE_PLAYING); + gst_pad_set_active (mysinkpad, TRUE); + + caps = gst_pad_peer_query_caps (mysrcpad, NULL); + fail_unless (caps != NULL); + + expected_caps = gst_caps_from_string (GETCAPS_CAPS_STR); + fail_unless (gst_caps_is_equal (expected_caps, caps)); + gst_caps_unref (expected_caps); + gst_caps_unref (caps); + + cleanup_videodecodertest (); +} + +GST_END_TEST; + + static Suite * gst_videodecoder_suite (void) { @@ -824,10 +1083,16 @@ TCase *tc = tcase_create ("general"); suite_add_tcase (s, tc); + + tcase_add_test (tc, videodecoder_query_caps_with_fixed_caps_peer); + tcase_add_test (tc, videodecoder_query_caps_with_range_caps_peer); + tcase_add_test (tc, videodecoder_query_caps_with_custom_getcaps); + tcase_add_test (tc, videodecoder_playback); tcase_add_test (tc, videodecoder_playback_with_events); tcase_add_test (tc, videodecoder_playback_first_frames_not_decoded); tcase_add_test (tc, videodecoder_buffer_after_segment); + tcase_add_test (tc, videodecoder_first_data_is_gap); tcase_add_test (tc, videodecoder_backwards_playback); tcase_add_test (tc, videodecoder_backwards_buffer_after_segment); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/videoencoder.c gst-plugins-base1.0-1.6.1/tests/check/libs/videoencoder.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/videoencoder.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/videoencoder.c 2015-10-22 08:01:34.000000000 +0000 @@ -396,7 +396,7 @@ { GstSegment segment; GstBuffer *buffer; - guint64 i; + guint i; GList *events_iter; setup_videoencodertester (); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/libs/xmpwriter.c gst-plugins-base1.0-1.6.1/tests/check/libs/xmpwriter.c --- gst-plugins-base1.0-1.4.3/tests/check/libs/xmpwriter.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/libs/xmpwriter.c 2015-10-22 08:01:34.000000000 +0000 @@ -203,19 +203,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = xmp_config_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (xmp_config); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/Makefile.am gst-plugins-base1.0-1.6.1/tests/check/Makefile.am --- gst-plugins-base1.0-1.4.3/tests/check/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -6,7 +6,7 @@ REGISTRY_ENVIRONMENT = \ GST_REGISTRY_1_0=$(CHECK_REGISTRY) -TESTS_ENVIRONMENT = \ +AM_TESTS_ENVIRONMENT = \ CK_DEFAULT_TIMEOUT=120 \ GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)" \ $(REGISTRY_ENVIRONMENT) \ @@ -20,11 +20,11 @@ CLEANFILES = core.* test-registry.* clean-local: clean-local-check - + distclean-local: distclean-local-orc $(CHECK_REGISTRY): - $(TESTS_ENVIRONMENT) + $(AM_TESTS_ENVIRONMENT) # elements to ignore for the state tests STATE_IGNORE_ELEMENTS = cdio cdparanoiasrc libvisual_ alsasrc alsasink @@ -140,7 +140,7 @@ endif if HAVE_ORC -check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc +check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videotestsrc else check_orc = endif @@ -164,7 +164,11 @@ endif if USE_PLUGIN_TCP +if USE_PLUGIN_APP +check_tcp = elements/multifdsink elements/multisocketsink pipelines/tcp +else check_tcp = elements/multifdsink elements/multisocketsink +endif else check_tcp = endif @@ -185,6 +189,7 @@ generic/clock-selection \ generic/states \ libs/libsabi \ + libs/allocators \ libs/audio \ libs/audiocdsrc \ libs/audiodecoder \ @@ -209,6 +214,7 @@ pipelines/simple-launch-lines \ pipelines/basetime \ pipelines/capsfilter-renegotiation \ + pipelines/streamsynchronizer \ $(check_adder) \ $(check_app) \ $(check_audioconvert) \ @@ -238,8 +244,7 @@ # videoconvert takes too long, so disabled for now VALGRIND_TO_FIX = \ - elements/videoconvert \ - libs/video + $(check_orc) # these tests don't even pass noinst_PROGRAMS = $(check_libvisual) @@ -248,15 +253,19 @@ libs/struct_arm.h \ libs/struct_i386.h \ libs/struct_i386_osx.h \ + libs/struct_ppc32.h \ + libs/struct_ppc64.h \ libs/struct_x86_64.h AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \ $(GST_CFLAGS) $(GST_CHECK_CFLAGS) \ -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \ + -DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \ $(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \ -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \ + -DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS LDADD = $(GST_LIBS) $(GST_CHECK_LIBS) @@ -282,6 +291,16 @@ $(GST_BASE_LIBS) \ $(LDADD) +libs_allocators_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(AM_CFLAGS) + +libs_allocators_LDADD = \ + $(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) \ + $(LDADD) + libs_audio_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ @@ -589,6 +608,14 @@ elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD) +if USE_GIO_UNIX_2_0 +GIO_UNIX_2_0_DEFINED=-DHAVE_GIO_UNIX_2_0=1 +endif + +pipelines_tcp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GIO_CFLAGS) $(GIO_UNIX_2_0_CFLAGS) $(GIO_UNIX_2_0_DEFINED) $(AM_CFLAGS) +pipelines_tcp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) $(GIO_LIBS) $(LDADD) \ + $(GIO_UNIX_2_0_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la + pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD) @@ -631,9 +658,6 @@ orc_volume_CFLAGS = $(ORC_CFLAGS) orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4 nodist_orc_volume_SOURCES = orc/volume.c -orc_videoscale_CFLAGS = $(ORC_CFLAGS) -orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4 -nodist_orc_videoscale_SOURCES = orc/videoscale.c orc_videotestsrc_CFLAGS = $(ORC_CFLAGS) orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4 nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c @@ -658,10 +682,6 @@ $(MKDIR_P) orc/ $(ORCC) --test -o $@ $< -orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc - $(MKDIR_P) orc/ - $(ORCC) --test -o $@ $< - orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc $(MKDIR_P) orc/ $(ORCC) --test -o $@ $< diff -Nru gst-plugins-base1.0-1.4.3/tests/check/Makefile.in gst-plugins-base1.0-1.6.1/tests/check/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/check/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -80,23 +90,22 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/check.mak $(srcdir)/Makefile.in \ - $(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) \ - $(top_srcdir)/test-driver check_PROGRAMS = generic/clock-selection$(EXEEXT) \ generic/states$(EXEEXT) libs/libsabi$(EXEEXT) \ - libs/audio$(EXEEXT) libs/audiocdsrc$(EXEEXT) \ - libs/audiodecoder$(EXEEXT) libs/audioencoder$(EXEEXT) \ - libs/discoverer$(EXEEXT) libs/fft$(EXEEXT) \ - libs/navigation$(EXEEXT) libs/pbutils$(EXEEXT) \ - libs/profile$(EXEEXT) libs/mikey$(EXEEXT) libs/rtp$(EXEEXT) \ + libs/allocators$(EXEEXT) libs/audio$(EXEEXT) \ + libs/audiocdsrc$(EXEEXT) libs/audiodecoder$(EXEEXT) \ + libs/audioencoder$(EXEEXT) libs/discoverer$(EXEEXT) \ + libs/fft$(EXEEXT) libs/navigation$(EXEEXT) \ + libs/pbutils$(EXEEXT) libs/profile$(EXEEXT) \ + libs/mikey$(EXEEXT) libs/rtp$(EXEEXT) \ libs/rtpbasedepayload$(EXEEXT) libs/rtpbasepayload$(EXEEXT) \ libs/rtsp$(EXEEXT) libs/rtspconnection$(EXEEXT) \ libs/sdp$(EXEEXT) libs/tag$(EXEEXT) libs/video$(EXEEXT) \ libs/videodecoder$(EXEEXT) libs/videoencoder$(EXEEXT) \ libs/xmpwriter$(EXEEXT) pipelines/simple-launch-lines$(EXEEXT) \ pipelines/basetime$(EXEEXT) \ - pipelines/capsfilter-renegotiation$(EXEEXT) $(am__EXEEXT_1) \ + pipelines/capsfilter-renegotiation$(EXEEXT) \ + pipelines/streamsynchronizer$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \ $(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_10) \ @@ -127,7 +136,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -144,6 +152,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -167,8 +177,11 @@ @USE_PLUGIN_PLAYBACK_TRUE@ elements/playbin-complex$(EXEEXT) \ @USE_PLUGIN_PLAYBACK_TRUE@ elements/streamsynchronizer$(EXEEXT) @USE_PLUGIN_SUBPARSE_TRUE@am__EXEEXT_12 = elements/subparse$(EXEEXT) -@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \ -@USE_PLUGIN_TCP_TRUE@ elements/multisocketsink$(EXEEXT) +@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \ +@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@ elements/multisocketsink$(EXEEXT) +@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \ +@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@ elements/multisocketsink$(EXEEXT) \ +@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@ pipelines/tcp$(EXEEXT) @USE_THEORA_TRUE@am__EXEEXT_14 = pipelines/theoraenc$(EXEEXT) @USE_PLUGIN_TYPEFIND_TRUE@am__EXEEXT_15 = \ @USE_PLUGIN_TYPEFIND_TRUE@ gst/typefindfunctions$(EXEEXT) @@ -188,8 +201,7 @@ @HAVE_CXX_TRUE@am__EXEEXT_22 = libs/gstlibscpp$(EXEEXT) @HAVE_ORC_TRUE@am__EXEEXT_23 = orc/video$(EXEEXT) orc/audio$(EXEEXT) \ @HAVE_ORC_TRUE@ orc/adder$(EXEEXT) orc/audioconvert$(EXEEXT) \ -@HAVE_ORC_TRUE@ orc/volume$(EXEEXT) orc/videoscale$(EXEEXT) \ -@HAVE_ORC_TRUE@ orc/videotestsrc$(EXEEXT) +@HAVE_ORC_TRUE@ orc/volume$(EXEEXT) orc/videotestsrc$(EXEEXT) @USE_LIBVISUAL_TRUE@am__EXEEXT_24 = elements/libvisual$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) elements_adder_SOURCES = elements/adder.c @@ -413,6 +425,14 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(gst_typefindfunctions_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ +libs_allocators_SOURCES = libs/allocators.c +libs_allocators_OBJECTS = libs/libs_allocators-allocators.$(OBJEXT) +libs_allocators_DEPENDENCIES = $(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) +libs_allocators_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libs_allocators_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ libs_audio_SOURCES = libs/audio.c libs_audio_OBJECTS = libs/libs_audio-audio.$(OBJEXT) libs_audio_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \ @@ -626,14 +646,6 @@ orc_video_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(orc_video_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -nodist_orc_videoscale_OBJECTS = \ - orc/orc_videoscale-videoscale.$(OBJEXT) -orc_videoscale_OBJECTS = $(nodist_orc_videoscale_OBJECTS) -orc_videoscale_DEPENDENCIES = $(am__DEPENDENCIES_1) -orc_videoscale_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(orc_videoscale_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ - $@ nodist_orc_videotestsrc_OBJECTS = \ orc/orc_videotestsrc-videotestsrc.$(OBJEXT) orc_videotestsrc_OBJECTS = $(nodist_orc_videotestsrc_OBJECTS) @@ -685,6 +697,21 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ +pipelines_streamsynchronizer_SOURCES = pipelines/streamsynchronizer.c +pipelines_streamsynchronizer_OBJECTS = \ + pipelines/streamsynchronizer.$(OBJEXT) +pipelines_streamsynchronizer_LDADD = $(LDADD) +pipelines_streamsynchronizer_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +pipelines_tcp_SOURCES = pipelines/tcp.c +pipelines_tcp_OBJECTS = pipelines/pipelines_tcp-tcp.$(OBJEXT) +pipelines_tcp_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) \ + $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la +pipelines_tcp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pipelines_tcp_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ pipelines_theoraenc_SOURCES = pipelines/theoraenc.c pipelines_theoraenc_OBJECTS = \ pipelines/pipelines_theoraenc-theoraenc.$(OBJEXT) @@ -777,21 +804,21 @@ elements/videorate.c elements/videoscale.c \ elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \ elements/vorbistag.c generic/clock-selection.c \ - generic/states.c gst/typefindfunctions.c libs/audio.c \ - libs/audiocdsrc.c libs/audiodecoder.c libs/audioencoder.c \ - libs/discoverer.c libs/fft.c $(libs_gstlibscpp_SOURCES) \ - libs/libsabi.c libs/mikey.c libs/navigation.c libs/pbutils.c \ - libs/profile.c libs/rtp.c libs/rtpbasedepayload.c \ - libs/rtpbasepayload.c libs/rtsp.c libs/rtspconnection.c \ - libs/sdp.c libs/tag.c libs/video.c libs/videodecoder.c \ - libs/videoencoder.c libs/xmpwriter.c \ + generic/states.c gst/typefindfunctions.c libs/allocators.c \ + libs/audio.c libs/audiocdsrc.c libs/audiodecoder.c \ + libs/audioencoder.c libs/discoverer.c libs/fft.c \ + $(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/mikey.c \ + libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \ + libs/rtpbasedepayload.c libs/rtpbasepayload.c libs/rtsp.c \ + libs/rtspconnection.c libs/sdp.c libs/tag.c libs/video.c \ + libs/videodecoder.c libs/videoencoder.c libs/xmpwriter.c \ $(nodist_orc_adder_SOURCES) $(nodist_orc_audio_SOURCES) \ $(nodist_orc_audioconvert_SOURCES) $(nodist_orc_video_SOURCES) \ - $(nodist_orc_videoscale_SOURCES) \ $(nodist_orc_videotestsrc_SOURCES) \ $(nodist_orc_volume_SOURCES) pipelines/basetime.c \ pipelines/capsfilter-renegotiation.c pipelines/gio.c \ pipelines/oggmux.c pipelines/simple-launch-lines.c \ + pipelines/streamsynchronizer.c pipelines/tcp.c \ pipelines/theoraenc.c pipelines/vorbisdec.c \ pipelines/vorbisenc.c DIST_SOURCES = elements/adder.c elements/appsink.c elements/appsrc.c \ @@ -805,17 +832,18 @@ elements/videorate.c elements/videoscale.c \ elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \ elements/vorbistag.c generic/clock-selection.c \ - generic/states.c gst/typefindfunctions.c libs/audio.c \ - libs/audiocdsrc.c libs/audiodecoder.c libs/audioencoder.c \ - libs/discoverer.c libs/fft.c $(libs_gstlibscpp_SOURCES) \ - libs/libsabi.c libs/mikey.c libs/navigation.c libs/pbutils.c \ - libs/profile.c libs/rtp.c libs/rtpbasedepayload.c \ - libs/rtpbasepayload.c libs/rtsp.c libs/rtspconnection.c \ - libs/sdp.c libs/tag.c libs/video.c libs/videodecoder.c \ - libs/videoencoder.c libs/xmpwriter.c pipelines/basetime.c \ - pipelines/capsfilter-renegotiation.c pipelines/gio.c \ - pipelines/oggmux.c pipelines/simple-launch-lines.c \ - pipelines/theoraenc.c pipelines/vorbisdec.c \ + generic/states.c gst/typefindfunctions.c libs/allocators.c \ + libs/audio.c libs/audiocdsrc.c libs/audiodecoder.c \ + libs/audioencoder.c libs/discoverer.c libs/fft.c \ + $(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/mikey.c \ + libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \ + libs/rtpbasedepayload.c libs/rtpbasepayload.c libs/rtsp.c \ + libs/rtspconnection.c libs/sdp.c libs/tag.c libs/video.c \ + libs/videodecoder.c libs/videoencoder.c libs/xmpwriter.c \ + pipelines/basetime.c pipelines/capsfilter-renegotiation.c \ + pipelines/gio.c pipelines/oggmux.c \ + pipelines/simple-launch-lines.c pipelines/streamsynchronizer.c \ + pipelines/tcp.c pipelines/theoraenc.c pipelines/vorbisdec.c \ pipelines/vorbisenc.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ @@ -1046,6 +1074,8 @@ TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak \ + $(top_srcdir)/depcomp $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -1106,6 +1136,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -1135,6 +1167,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -1162,7 +1196,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -1177,6 +1210,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -1266,13 +1300,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -1325,6 +1358,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1345,7 +1379,7 @@ REGISTRY_ENVIRONMENT = \ GST_REGISTRY_1_0=$(CHECK_REGISTRY) -TESTS_ENVIRONMENT = \ +AM_TESTS_ENVIRONMENT = \ CK_DEFAULT_TIMEOUT=120 \ GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)" \ $(REGISTRY_ENVIRONMENT) \ @@ -1401,15 +1435,16 @@ @USE_PLUGIN_ADDER_FALSE@check_adder = @USE_PLUGIN_ADDER_TRUE@check_adder = elements/adder @HAVE_ORC_FALSE@check_orc = -@HAVE_ORC_TRUE@check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc +@HAVE_ORC_TRUE@check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videotestsrc @USE_PLUGIN_GIO_FALSE@check_gio = @USE_PLUGIN_GIO_TRUE@check_gio = pipelines/gio @USE_PLUGIN_APP_FALSE@check_app = @USE_PLUGIN_APP_TRUE@check_app = elements/appsink elements/appsrc @USE_PLUGIN_AUDIORATE_FALSE@check_audiorate = @USE_PLUGIN_AUDIORATE_TRUE@check_audiorate = elements/audiorate +@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink +@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink pipelines/tcp @USE_PLUGIN_TCP_FALSE@check_tcp = -@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink @USE_PLUGIN_AUDIORESAMPLE_FALSE@check_audioresample = @USE_PLUGIN_AUDIORESAMPLE_TRUE@check_audioresample = elements/audioresample @HAVE_CXX_FALSE@cxx_checks = @@ -1420,23 +1455,26 @@ # videoconvert takes too long, so disabled for now VALGRIND_TO_FIX = \ - elements/videoconvert \ - libs/video + $(check_orc) noinst_HEADERS = \ libs/struct_arm.h \ libs/struct_i386.h \ libs/struct_i386_osx.h \ + libs/struct_ppc32.h \ + libs/struct_ppc64.h \ libs/struct_x86_64.h AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \ $(GST_CFLAGS) $(GST_CHECK_CFLAGS) \ -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \ + -DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \ $(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \ -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \ + -DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS LDADD = $(GST_LIBS) $(GST_CHECK_LIBS) @@ -1461,6 +1499,16 @@ $(GST_BASE_LIBS) \ $(LDADD) +libs_allocators_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(AM_CFLAGS) + +libs_allocators_LDADD = \ + $(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) \ + $(LDADD) + libs_audio_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ @@ -1769,6 +1817,11 @@ elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD) +@USE_GIO_UNIX_2_0_TRUE@GIO_UNIX_2_0_DEFINED = -DHAVE_GIO_UNIX_2_0=1 +pipelines_tcp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GIO_CFLAGS) $(GIO_UNIX_2_0_CFLAGS) $(GIO_UNIX_2_0_DEFINED) $(AM_CFLAGS) +pipelines_tcp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) $(GIO_LIBS) $(LDADD) \ + $(GIO_UNIX_2_0_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la + pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD) pipelines_vorbisenc_CFLAGS = \ @@ -1808,9 +1861,6 @@ orc_volume_CFLAGS = $(ORC_CFLAGS) orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4 nodist_orc_volume_SOURCES = orc/volume.c -orc_videoscale_CFLAGS = $(ORC_CFLAGS) -orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4 -nodist_orc_videoscale_SOURCES = orc/videoscale.c orc_videotestsrc_CFLAGS = $(ORC_CFLAGS) orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4 nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c @@ -1831,7 +1881,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/check/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/check/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -1840,7 +1889,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/check.mak: +$(top_srcdir)/common/check.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -2054,6 +2103,12 @@ libs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) libs/$(DEPDIR) @: > libs/$(DEPDIR)/$(am__dirstamp) +libs/libs_allocators-allocators.$(OBJEXT): libs/$(am__dirstamp) \ + libs/$(DEPDIR)/$(am__dirstamp) + +libs/allocators$(EXEEXT): $(libs_allocators_OBJECTS) $(libs_allocators_DEPENDENCIES) $(EXTRA_libs_allocators_DEPENDENCIES) libs/$(am__dirstamp) + @rm -f libs/allocators$(EXEEXT) + $(AM_V_CCLD)$(libs_allocators_LINK) $(libs_allocators_OBJECTS) $(libs_allocators_LDADD) $(LIBS) libs/libs_audio-audio.$(OBJEXT): libs/$(am__dirstamp) \ libs/$(DEPDIR)/$(am__dirstamp) @@ -2222,12 +2277,6 @@ orc/video$(EXEEXT): $(orc_video_OBJECTS) $(orc_video_DEPENDENCIES) $(EXTRA_orc_video_DEPENDENCIES) orc/$(am__dirstamp) @rm -f orc/video$(EXEEXT) $(AM_V_CCLD)$(orc_video_LINK) $(orc_video_OBJECTS) $(orc_video_LDADD) $(LIBS) -orc/orc_videoscale-videoscale.$(OBJEXT): orc/$(am__dirstamp) \ - orc/$(DEPDIR)/$(am__dirstamp) - -orc/videoscale$(EXEEXT): $(orc_videoscale_OBJECTS) $(orc_videoscale_DEPENDENCIES) $(EXTRA_orc_videoscale_DEPENDENCIES) orc/$(am__dirstamp) - @rm -f orc/videoscale$(EXEEXT) - $(AM_V_CCLD)$(orc_videoscale_LINK) $(orc_videoscale_OBJECTS) $(orc_videoscale_LDADD) $(LIBS) orc/orc_videotestsrc-videotestsrc.$(OBJEXT): orc/$(am__dirstamp) \ orc/$(DEPDIR)/$(am__dirstamp) @@ -2276,6 +2325,18 @@ pipelines/simple-launch-lines$(EXEEXT): $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_DEPENDENCIES) $(EXTRA_pipelines_simple_launch_lines_DEPENDENCIES) pipelines/$(am__dirstamp) @rm -f pipelines/simple-launch-lines$(EXEEXT) $(AM_V_CCLD)$(pipelines_simple_launch_lines_LINK) $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_LDADD) $(LIBS) +pipelines/streamsynchronizer.$(OBJEXT): pipelines/$(am__dirstamp) \ + pipelines/$(DEPDIR)/$(am__dirstamp) + +pipelines/streamsynchronizer$(EXEEXT): $(pipelines_streamsynchronizer_OBJECTS) $(pipelines_streamsynchronizer_DEPENDENCIES) $(EXTRA_pipelines_streamsynchronizer_DEPENDENCIES) pipelines/$(am__dirstamp) + @rm -f pipelines/streamsynchronizer$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pipelines_streamsynchronizer_OBJECTS) $(pipelines_streamsynchronizer_LDADD) $(LIBS) +pipelines/pipelines_tcp-tcp.$(OBJEXT): pipelines/$(am__dirstamp) \ + pipelines/$(DEPDIR)/$(am__dirstamp) + +pipelines/tcp$(EXEEXT): $(pipelines_tcp_OBJECTS) $(pipelines_tcp_DEPENDENCIES) $(EXTRA_pipelines_tcp_DEPENDENCIES) pipelines/$(am__dirstamp) + @rm -f pipelines/tcp$(EXEEXT) + $(AM_V_CCLD)$(pipelines_tcp_LINK) $(pipelines_tcp_OBJECTS) $(pipelines_tcp_LDADD) $(LIBS) pipelines/pipelines_theoraenc-theoraenc.$(OBJEXT): \ pipelines/$(am__dirstamp) pipelines/$(DEPDIR)/$(am__dirstamp) @@ -2335,6 +2396,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/states.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gst_typefindfunctions-typefindfunctions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/gstlibscpp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_allocators-allocators.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audio-audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiocdsrc-audiocdsrc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Po@am__quote@ @@ -2361,7 +2423,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audio-audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audioconvert-audioconvert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_video-video.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_videoscale-videoscale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_volume-volume.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/basetime.Po@am__quote@ @@ -2369,9 +2430,11 @@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_gio-gio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_oggmux-oggmux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_vorbisdec-vorbisdec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_vorbisenc-vorbisenc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/streamsynchronizer.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -2677,6 +2740,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -c -o gst/gst_typefindfunctions-typefindfunctions.obj `if test -f 'gst/typefindfunctions.c'; then $(CYGPATH_W) 'gst/typefindfunctions.c'; else $(CYGPATH_W) '$(srcdir)/gst/typefindfunctions.c'; fi` +libs/libs_allocators-allocators.o: libs/allocators.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -MT libs/libs_allocators-allocators.o -MD -MP -MF libs/$(DEPDIR)/libs_allocators-allocators.Tpo -c -o libs/libs_allocators-allocators.o `test -f 'libs/allocators.c' || echo '$(srcdir)/'`libs/allocators.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_allocators-allocators.Tpo libs/$(DEPDIR)/libs_allocators-allocators.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/allocators.c' object='libs/libs_allocators-allocators.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -c -o libs/libs_allocators-allocators.o `test -f 'libs/allocators.c' || echo '$(srcdir)/'`libs/allocators.c + +libs/libs_allocators-allocators.obj: libs/allocators.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -MT libs/libs_allocators-allocators.obj -MD -MP -MF libs/$(DEPDIR)/libs_allocators-allocators.Tpo -c -o libs/libs_allocators-allocators.obj `if test -f 'libs/allocators.c'; then $(CYGPATH_W) 'libs/allocators.c'; else $(CYGPATH_W) '$(srcdir)/libs/allocators.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_allocators-allocators.Tpo libs/$(DEPDIR)/libs_allocators-allocators.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/allocators.c' object='libs/libs_allocators-allocators.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -c -o libs/libs_allocators-allocators.obj `if test -f 'libs/allocators.c'; then $(CYGPATH_W) 'libs/allocators.c'; else $(CYGPATH_W) '$(srcdir)/libs/allocators.c'; fi` + libs/libs_audio-audio.o: libs/audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -MT libs/libs_audio-audio.o -MD -MP -MF libs/$(DEPDIR)/libs_audio-audio.Tpo -c -o libs/libs_audio-audio.o `test -f 'libs/audio.c' || echo '$(srcdir)/'`libs/audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_audio-audio.Tpo libs/$(DEPDIR)/libs_audio-audio.Po @@ -3041,20 +3118,6 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_video_CFLAGS) $(CFLAGS) -c -o orc/orc_video-video.obj `if test -f 'orc/video.c'; then $(CYGPATH_W) 'orc/video.c'; else $(CYGPATH_W) '$(srcdir)/orc/video.c'; fi` -orc/orc_videoscale-videoscale.o: orc/videoscale.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc/orc_videoscale-videoscale.o -MD -MP -MF orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc/orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo orc/$(DEPDIR)/orc_videoscale-videoscale.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='orc/videoscale.c' object='orc/orc_videoscale-videoscale.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc/orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c - -orc/orc_videoscale-videoscale.obj: orc/videoscale.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc/orc_videoscale-videoscale.obj -MD -MP -MF orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc/orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo orc/$(DEPDIR)/orc_videoscale-videoscale.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='orc/videoscale.c' object='orc/orc_videoscale-videoscale.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc/orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi` - orc/orc_videotestsrc-videotestsrc.o: orc/videotestsrc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -MT orc/orc_videotestsrc-videotestsrc.o -MD -MP -MF orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo -c -o orc/orc_videotestsrc-videotestsrc.o `test -f 'orc/videotestsrc.c' || echo '$(srcdir)/'`orc/videotestsrc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Po @@ -3125,6 +3188,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_simple_launch_lines-simple-launch-lines.obj `if test -f 'pipelines/simple-launch-lines.c'; then $(CYGPATH_W) 'pipelines/simple-launch-lines.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/simple-launch-lines.c'; fi` +pipelines/pipelines_tcp-tcp.o: pipelines/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_tcp-tcp.o -MD -MP -MF pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo -c -o pipelines/pipelines_tcp-tcp.o `test -f 'pipelines/tcp.c' || echo '$(srcdir)/'`pipelines/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/tcp.c' object='pipelines/pipelines_tcp-tcp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_tcp-tcp.o `test -f 'pipelines/tcp.c' || echo '$(srcdir)/'`pipelines/tcp.c + +pipelines/pipelines_tcp-tcp.obj: pipelines/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_tcp-tcp.obj -MD -MP -MF pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo -c -o pipelines/pipelines_tcp-tcp.obj `if test -f 'pipelines/tcp.c'; then $(CYGPATH_W) 'pipelines/tcp.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/tcp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/tcp.c' object='pipelines/pipelines_tcp-tcp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_tcp-tcp.obj `if test -f 'pipelines/tcp.c'; then $(CYGPATH_W) 'pipelines/tcp.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/tcp.c'; fi` + pipelines/pipelines_theoraenc-theoraenc.o: pipelines/theoraenc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_theoraenc-theoraenc.o -MD -MP -MF pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo -c -o pipelines/pipelines_theoraenc-theoraenc.o `test -f 'pipelines/theoraenc.c' || echo '$(srcdir)/'`pipelines/theoraenc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Po @@ -3285,7 +3362,7 @@ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ - else \ + elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ @@ -3417,6 +3494,13 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +libs/allocators.log: libs/allocators$(EXEEXT) + @p='libs/allocators$(EXEEXT)'; \ + b='libs/allocators'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) libs/audio.log: libs/audio$(EXEEXT) @p='libs/audio$(EXEEXT)'; \ b='libs/audio'; \ @@ -3585,6 +3669,13 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +pipelines/streamsynchronizer.log: pipelines/streamsynchronizer$(EXEEXT) + @p='pipelines/streamsynchronizer$(EXEEXT)'; \ + b='pipelines/streamsynchronizer'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) elements/adder.log: elements/adder$(EXEEXT) @p='elements/adder$(EXEEXT)'; \ b='elements/adder'; \ @@ -3711,6 +3802,13 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +pipelines/tcp.log: pipelines/tcp$(EXEEXT) + @p='pipelines/tcp$(EXEEXT)'; \ + b='pipelines/tcp'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) pipelines/theoraenc.log: pipelines/theoraenc$(EXEEXT) @p='pipelines/theoraenc$(EXEEXT)'; \ b='pipelines/theoraenc'; \ @@ -3830,13 +3928,6 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -orc/videoscale.log: orc/videoscale$(EXEEXT) - @p='orc/videoscale$(EXEEXT)'; \ - b='orc/videoscale'; \ - $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) orc/videotestsrc.log: orc/videotestsrc$(EXEEXT) @p='orc/videotestsrc$(EXEEXT)'; \ b='orc/videotestsrc'; \ @@ -4029,6 +4120,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \ uninstall uninstall-am +.PRECIOUS: Makefile + # keep target around, since it's referenced in the modules' Makefiles clean-local-check: @@ -4045,37 +4138,38 @@ # run any given test by running make test.check # if the test fails, run it again at at least debug level 2 %.check: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* || \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ GST_DEBUG=$$GST_DEBUG,*:2 \ CK_DEFAULT_TIMEOUT=20 \ $* # just like 'check', but don't run it again if it fails (useful for debugging) %.check-norepeat: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* # run any given test in a loop %.torture: % @for i in `seq 1 $(LOOPS)`; do \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $*; done # run any given test in an infinite loop %.forever: % @while true; do \ - $(TESTS_ENVIRONMENT) \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=20 \ $* || break; done # valgrind any given test by running make test.valgrind %.valgrind: % - @$(TESTS_ENVIRONMENT) \ + @valgrind_log=$(subst /,-,$*-valgrind.log); \ + $(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=360 \ G_SLICE=always-malloc \ $(LIBTOOL) --mode=execute \ @@ -4084,16 +4178,16 @@ --tool=memcheck --leak-check=full --trace-children=yes \ --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ - ./$* 2>&1 | tee valgrind.log - @if grep "==" valgrind.log > /dev/null 2>&1; then \ - rm valgrind.log; \ + ./$* 2>&1 | tee $$valgrind_log ; \ + if grep "==" $$valgrind_log > /dev/null 2>&1; then \ + rm $$valgrind_log; \ exit 1; \ - fi - @rm valgrind.log + fi ; \ + rm $$valgrind_log # valgrind any given test and generate suppressions for it %.valgrind.gen-suppressions: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_DEFAULT_TIMEOUT=360 \ G_SLICE=always-malloc \ $(LIBTOOL) --mode=execute \ @@ -4123,7 +4217,7 @@ # gdb any given test by running make test.gdb %.gdb: % - @$(TESTS_ENVIRONMENT) \ + @$(AM_TESTS_ENVIRONMENT) \ CK_FORK=no \ $(LIBTOOL) --mode=execute \ gdb $* @@ -4176,19 +4270,13 @@ # valgrind all tests valgrind: $(TESTS) @echo "Valgrinding tests ..." - @failed=0; \ + @failed=0; valgrind_targets=""; \ for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \ - $(MAKE) $$t.valgrind; \ - if test "$$?" -ne 0; then \ - echo "Valgrind error for test $$t"; \ - failed=`expr $$failed + 1`; \ - whicht="$$whicht $$t"; \ - fi; \ + valgrind_targets="$$valgrind_targets $$t.valgrind"; \ done; \ - if test "$$failed" -ne 0; then \ - echo "$$failed tests had leaks or errors under valgrind:"; \ - echo "$$whicht"; \ - false; \ + if ! $(MAKE) $$valgrind_targets ; then \ + echo "Some tests had leaks or errors under valgrind"; \ + false; \ fi # valgrind all tests until failure @@ -4233,11 +4321,14 @@ fi inspect: @echo "Inspecting features ..." - @for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ + @for e in `$(AM_TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 \ | cut -d: -f2`; \ do echo Inspecting $$e; \ $(GST_INSPECT) $$e > /dev/null 2>&1; done +# build all tests +build-checks: $(TESTS) + help: @echo @echo "make check -- run all checks" @@ -4260,6 +4351,7 @@ @echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions" @echo " and save to suppressions.log" @echo "make inspect -- inspect all plugin features" + @echo "make build-checks -- build all checks (but don't run them)" @echo @echo @echo "Additionally, you can use the GST_CHECKS environment variable to" @@ -4278,7 +4370,7 @@ distclean-local: distclean-local-orc $(CHECK_REGISTRY): - $(TESTS_ENVIRONMENT) + $(AM_TESTS_ENVIRONMENT) orc/video.c: $(top_srcdir)/gst-libs/gst/video/video-orc.orc $(MKDIR_P) orc/ @@ -4300,10 +4392,6 @@ $(MKDIR_P) orc/ $(ORCC) --test -o $@ $< -orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc - $(MKDIR_P) orc/ - $(ORCC) --test -o $@ $< - orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc $(MKDIR_P) orc/ $(ORCC) --test -o $@ $< diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/basetime.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/basetime.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/basetime.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/basetime.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,6 +24,10 @@ #include "config.h" #endif +#ifdef HAVE_VALGRIND +#include +#endif + #include #ifndef GST_DISABLE_PARSE @@ -55,7 +59,7 @@ } old_ts = new_ts; - return TRUE; + return GST_PAD_PROBE_OK; } GST_START_TEST (test_basetime_calculation) @@ -68,7 +72,7 @@ loop = g_main_loop_new (NULL, FALSE); /* The "main" pipeline */ - p1 = gst_parse_launch ("fakesrc ! fakesink", NULL); + p1 = gst_parse_launch ("fakesrc ! identity sleep-time=1 ! fakesink", NULL); fail_if (p1 == NULL); /* Create a sub-bin that is activated only in "certain situations" */ @@ -130,9 +134,19 @@ { Suite *s = suite_create ("baseaudiosrc"); TCase *tc_chain = tcase_create ("general"); + guint timeout; /* timeout 6 sec */ - tcase_set_timeout (tc_chain, 6); + timeout = 6; + +#ifdef HAVE_VALGRIND + { + if (RUNNING_ON_VALGRIND) + timeout *= 4; + } +#endif + + tcase_set_timeout (tc_chain, timeout); suite_add_tcase (s, tc_chain); #ifndef GST_DISABLE_PARSE @@ -142,19 +156,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = baseaudiosrc_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (baseaudiosrc); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/capsfilter-renegotiation.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/capsfilter-renegotiation.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/capsfilter-renegotiation.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/capsfilter-renegotiation.c 2015-10-22 08:01:34.000000000 +0000 @@ -104,13 +104,13 @@ current_caps = NULL; pipeline = gst_parse_launch (launch_line, NULL); - g_assert (pipeline); + fail_unless (pipeline != NULL); capsfilter = gst_bin_get_by_name (GST_BIN (pipeline), "cf"); - g_assert (capsfilter); + fail_unless (capsfilter != NULL); sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink"); - g_assert (sink); + fail_unless (sink != NULL); pad = gst_element_get_static_pad (sink, "sink"); gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_probe, capsfilter, @@ -125,8 +125,8 @@ msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_EOS | GST_MESSAGE_ERROR); - g_assert (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_EOS); - g_assert (caps_change == 4); + fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_EOS); + fail_unless_equals_int (caps_change, 4); gst_element_set_state (pipeline, GST_STATE_NULL); @@ -168,19 +168,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = capsfilter_renegotiation_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (capsfilter_renegotiation); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/gio.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/gio.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/gio.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/gio.c 2015-10-22 08:01:34.000000000 +0000 @@ -151,7 +151,7 @@ GST_END_TEST; static Suite * -gio_testsuite (void) +gio_suite (void) { Suite *s = suite_create ("gio"); TCase *tc_chain = tcase_create ("general"); @@ -162,19 +162,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = gio_testsuite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (gio); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/simple-launch-lines.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/simple-launch-lines.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/simple-launch-lines.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/simple-launch-lines.c 2015-10-22 08:01:34.000000000 +0000 @@ -222,19 +222,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = simple_launch_lines_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (simple_launch_lines); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/streamsynchronizer.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/streamsynchronizer.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/streamsynchronizer.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/streamsynchronizer.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,166 @@ +/* GStreamer + * Copyright (C) 2014 Song Bing + * + * streamsynchronizer.c: Unit test for streamsynchronizer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include + +static gboolean have_group_id = FALSE; +static guint group_id_pre; +static GMutex test_mutex; + +static GstPadProbeReturn +event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata) +{ + GstPadProbeReturn ret = GST_PAD_PROBE_OK; + GstEvent *event = GST_PAD_PROBE_INFO_DATA (info); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_STREAM_START:{ + guint group_id; + + g_mutex_lock (&test_mutex); + fail_unless (gst_event_parse_group_id (event, &group_id)); + + if (have_group_id) { + if (group_id_pre != group_id) { + event = gst_event_copy (event); + gst_event_set_group_id (event, group_id_pre); + gst_event_replace ((GstEvent **) & info->data, event); + gst_event_unref (event); + } + } else { + group_id_pre = group_id; + have_group_id = TRUE; + } + g_mutex_unlock (&test_mutex); + break; + } + default: + break; + } + + return ret; +} + +static void +run_streamsynchronizer_handle_eos (const gchar * launch_line) +{ + GstElement *pipeline; + GstElement *audiosrc; + GstElement *videosrc; + GstMessage *msg; + GstPad *pad; + GstBus *bus; + + pipeline = gst_parse_launch (launch_line, NULL); + fail_unless (pipeline != NULL); + + videosrc = gst_bin_get_by_name (GST_BIN (pipeline), "videosrc"); + fail_unless (videosrc != NULL); + + pad = gst_element_get_static_pad (videosrc, "src"); + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe, + videosrc, NULL); + gst_object_unref (pad); + gst_object_unref (videosrc); + + audiosrc = gst_bin_get_by_name (GST_BIN (pipeline), "audiosrc"); + fail_unless (audiosrc != NULL); + + pad = gst_element_get_static_pad (audiosrc, "src"); + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe, + audiosrc, NULL); + gst_object_unref (pad); + gst_object_unref (audiosrc); + + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + + fail_unless (gst_element_set_state (pipeline, GST_STATE_PLAYING) != + GST_STATE_CHANGE_FAILURE); + + msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, + GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR); + + fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ASYNC_DONE); + gst_message_unref (msg); + + fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL, + GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS); + + fail_unless (gst_element_set_state (pipeline, GST_STATE_PAUSED) != + GST_STATE_CHANGE_FAILURE); + + /* can't ensure can received async-done message when call state change very quickly. */ + fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL, + GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS); + + fail_unless (gst_element_set_state (pipeline, GST_STATE_PLAYING) != + GST_STATE_CHANGE_FAILURE); + + fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL, + GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS); + + gst_element_set_state (pipeline, GST_STATE_NULL); + + gst_object_unref (bus); + gst_object_unref (pipeline); +} + +GST_START_TEST (test_streamsynchronizer_normal) +{ + run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! " + "streamsynchronizer name=streamsync audiotestsrc name=audiosrc ! " + "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true"); +} + +GST_END_TEST; + +GST_START_TEST (test_streamsynchronizer_track_with_less_data) +{ + run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! " + "streamsynchronizer name=streamsync audiotestsrc name=audiosrc num-buffers=1 ! " + "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true"); +} + +GST_END_TEST; + +GST_START_TEST (test_streamsynchronizer_track_without_data) +{ + run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! " + "streamsynchronizer name=streamsync audiotestsrc name=audiosrc num-buffers=0 ! " + "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true"); +} + +GST_END_TEST; + +static Suite * +streamsynchronizer_handle_eos_suite (void) +{ + Suite *s = suite_create ("streamsynchronizer"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_streamsynchronizer_normal); + tcase_add_test (tc_chain, test_streamsynchronizer_track_with_less_data); + tcase_add_test (tc_chain, test_streamsynchronizer_track_without_data); + return s; +} + +GST_CHECK_MAIN (streamsynchronizer_handle_eos); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/tcp.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/tcp.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/tcp.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/tcp.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,375 @@ +/* GStreamer + * + * Copyright (C) 2014 William Manley + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include +#include + +#include +#include +#include +#include +#include + +#ifdef HAVE_GIO_UNIX_2_0 +#include +#endif /* HAVE_GIO_UNIX_2_0 */ + +#include +#include +#include + +static gboolean +g_socketpair (GSocketFamily family, GSocketType type, GSocketProtocol protocol, + GSocket * gsv[2], GError ** error); + +typedef struct +{ + GstElement *sink; + GstElement *src; + + GstPipeline *sink_pipeline; + GstPipeline *src_pipeline; + GstAppSrc *sink_src; + GstAppSink *src_sink; +} SymmetryTest; + +static void +symmetry_test_setup (SymmetryTest * st, GstElement * sink, GstElement * src) +{ + GstCaps *caps; + st->sink = sink; + g_object_set (sink, "sync", FALSE, NULL); + st->src = src; + + st->sink_pipeline = GST_PIPELINE (gst_pipeline_new (NULL)); + st->src_pipeline = GST_PIPELINE (gst_pipeline_new (NULL)); + + st->sink_src = GST_APP_SRC (gst_element_factory_make ("appsrc", NULL)); + fail_unless (st->sink_src != NULL); + caps = gst_caps_from_string ("application/x-gst-check"); + gst_app_src_set_caps (st->sink_src, caps); + gst_caps_unref (caps); + + gst_bin_add_many (GST_BIN (st->sink_pipeline), GST_ELEMENT (st->sink_src), + st->sink, NULL); + fail_unless (gst_element_link_many (GST_ELEMENT (st->sink_src), st->sink, + NULL)); + + st->src_sink = GST_APP_SINK (gst_element_factory_make ("appsink", NULL)); + fail_unless (st->src_sink != NULL); + gst_bin_add_many (GST_BIN (st->src_pipeline), st->src, + GST_ELEMENT (st->src_sink), NULL); + fail_unless (gst_element_link_many (st->src, GST_ELEMENT (st->src_sink), + NULL)); + + gst_element_set_state (GST_ELEMENT (st->sink_pipeline), GST_STATE_PLAYING); + gst_element_set_state (GST_ELEMENT (st->src_pipeline), GST_STATE_PLAYING); +} + +static void +symmetry_test_teardown (SymmetryTest * st) +{ + fail_unless (gst_element_set_state (GST_ELEMENT (st->sink_pipeline), + GST_STATE_NULL) != GST_STATE_CHANGE_FAILURE); + fail_unless (gst_element_set_state (GST_ELEMENT (st->src_pipeline), + GST_STATE_NULL) != GST_STATE_CHANGE_FAILURE); + + gst_object_unref (st->sink_pipeline); + gst_object_unref (st->src_pipeline); + + memset (st, 0, sizeof (*st)); +} + +static void +symmetry_test_assert_passthrough (SymmetryTest * st, GstBuffer * in) +{ + gpointer copy; + gsize data_size; + GstSample *out; + + gst_buffer_extract_dup (in, 0, -1, ©, &data_size); + + fail_unless (gst_app_src_push_buffer (st->sink_src, in) == GST_FLOW_OK); + in = NULL; + out = gst_app_sink_pull_sample (st->src_sink); + fail_unless (out != NULL); + + fail_unless (gst_buffer_get_size (gst_sample_get_buffer (out)) == data_size); + fail_unless (gst_buffer_memcmp (gst_sample_get_buffer (out), 0, copy, + data_size) == 0); + g_free (copy); + gst_sample_unref (out); +} + +static gboolean +g_socketpair (GSocketFamily family, GSocketType type, GSocketProtocol protocol, + GSocket * gsv[2], GError ** error) +{ + int ret; + int sv[2]; + + ret = socketpair (family, type, protocol, sv); + if (ret != 0) { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "socketpair failed: %s", + g_strerror (errno)); + return FALSE; + } + + gsv[0] = g_socket_new_from_fd (sv[0], error); + if (gsv[0] == NULL) { + close (sv[0]); + close (sv[1]); + return FALSE; + } + gsv[1] = g_socket_new_from_fd (sv[1], error); + if (gsv[1] == NULL) { + g_object_unref (gsv[0]); + gsv[0] = NULL; + close (sv[1]); + return FALSE; + } + return TRUE; +} + +static void +setup_multisocketsink_and_socketsrc (SymmetryTest * st) +{ + GSocket *sockets[2] = { NULL, NULL }; + GError *err = NULL; + + st->sink = gst_check_setup_element ("multisocketsink"); + st->src = gst_check_setup_element ("socketsrc"); + + fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX, + G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, sockets, &err)); + + g_object_set (st->src, "socket", sockets[0], NULL); + g_object_unref (sockets[0]); + sockets[0] = NULL; + + symmetry_test_setup (st, st->sink, st->src); + + g_signal_emit_by_name (st->sink, "add", sockets[1], NULL); + g_object_unref (sockets[1]); + sockets[1] = NULL; +} + +GST_START_TEST (test_that_socketsrc_and_multisocketsink_are_symmetrical) +{ + SymmetryTest st = { 0 }; + setup_multisocketsink_and_socketsrc (&st); + symmetry_test_assert_passthrough (&st, + gst_buffer_new_wrapped (g_strdup ("hello"), 5)); + symmetry_test_teardown (&st); +} + +GST_END_TEST; + + +GST_START_TEST (test_that_tcpclientsink_and_tcpserversrc_are_symmetrical) +{ + SymmetryTest st = { 0 }; + GstElement *serversrc = gst_check_setup_element ("tcpserversrc"); + + gst_element_set_state (serversrc, GST_STATE_PAUSED); + symmetry_test_setup (&st, gst_check_setup_element ("tcpclientsink"), + serversrc); + + symmetry_test_assert_passthrough (&st, + gst_buffer_new_wrapped (g_strdup ("hello"), 5)); + + symmetry_test_teardown (&st); +} + +GST_END_TEST; + + +GST_START_TEST (test_that_tcpserversink_and_tcpclientsrc_are_symmetrical) +{ + SymmetryTest st = { 0 }; + + symmetry_test_setup (&st, gst_check_setup_element ("tcpserversink"), + gst_check_setup_element ("tcpclientsrc")); + + symmetry_test_assert_passthrough (&st, + gst_buffer_new_wrapped (g_strdup ("hello"), 5)); + symmetry_test_teardown (&st); +} + +GST_END_TEST; + +static void +on_connection_closed (GstElement * socketsrc, gpointer user_data) +{ + GSocket *socket = (GSocket *) user_data; + + g_object_set (socketsrc, "socket", socket, NULL); +} + +GST_START_TEST (test_that_we_can_provide_new_socketsrc_sockets_during_signal) +{ + GSocket *sockets[4] = { NULL, NULL }; + + GstPipeline *pipeline = NULL; + GstAppSink *appsink = NULL; + GstElement *socketsrc = NULL; + GstSample *sample = NULL; + + socketsrc = gst_check_setup_element ("socketsrc"); + + fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX, + G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &sockets[0], NULL)); + + fail_unless (g_socket_send (sockets[0], "hello", 5, NULL, NULL) == 5); + fail_unless (g_socket_shutdown (sockets[0], FALSE, TRUE, NULL)); + + fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX, + G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &sockets[2], NULL)); + fail_unless (g_socket_send (sockets[2], "goodbye", 7, NULL, NULL) == 7); + fail_unless (g_socket_shutdown (sockets[2], FALSE, TRUE, NULL)); + + g_object_set (socketsrc, "socket", sockets[1], NULL); + + g_signal_connect (socketsrc, "connection-closed-by-peer", + G_CALLBACK (on_connection_closed), sockets[3]); + + pipeline = (GstPipeline *) gst_pipeline_new (NULL); + appsink = GST_APP_SINK (gst_check_setup_element ("appsink")); + gst_bin_add_many (GST_BIN (pipeline), socketsrc, GST_ELEMENT (appsink), NULL); + fail_unless (gst_element_link_many (socketsrc, GST_ELEMENT (appsink), NULL)); + + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING); + + fail_unless ((sample = gst_app_sink_pull_sample (appsink)) != NULL); + gst_buffer_memcmp (gst_sample_get_buffer (sample), 0, "hello", 5); + gst_sample_unref (sample); + + fail_unless ((sample = gst_app_sink_pull_sample (appsink)) != NULL); + gst_buffer_memcmp (gst_sample_get_buffer (sample), 0, "goodbye", 7); + gst_sample_unref (sample); + + fail_unless (NULL == gst_app_sink_pull_sample (appsink)); + fail_unless (gst_app_sink_is_eos (appsink)); + + gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL); + g_clear_object (&sockets[0]); + g_clear_object (&sockets[1]); + g_clear_object (&sockets[2]); + g_clear_object (&sockets[3]); + gst_object_unref (pipeline); +} + +GST_END_TEST +#ifdef HAVE_GIO_UNIX_2_0 +static GSocketControlMessage * +get_control_message_meta (GstBuffer * buf) +{ + GstMeta *meta; + gpointer iter_state = NULL; + + while ((meta = gst_buffer_iterate_meta (buf, &iter_state)) != NULL) { + if (meta->info->api == GST_NET_CONTROL_MESSAGE_META_API_TYPE) + return ((GstNetControlMessageMeta *) meta)->message; + } + fail ("Expected GSocketControlMessage attached to buffer"); + return NULL; +} + + +GST_START_TEST (test_that_multisocketsink_and_socketsrc_preserve_meta) +{ + GstBuffer *buf; + GSocketControlMessage *msg; + SymmetryTest st = { 0 }; + char tmpfilename[] = "/tmp/tcp-test.XXXXXX"; + GstSample *out; + int orig_fd, *new_fds, new_fds_len; + struct stat orig_stat, new_stat; + + setup_multisocketsink_and_socketsrc (&st); + + orig_fd = mkstemp (tmpfilename); + fail_unless (orig_fd > 0); + fail_unless (unlink (tmpfilename) == 0); + fstat (orig_fd, &orig_stat); + + msg = g_unix_fd_message_new (); + fail_unless (g_unix_fd_message_append_fd ((GUnixFDMessage *) msg, orig_fd, + NULL)); + close (orig_fd); + orig_fd = -1; + + buf = gst_buffer_new_wrapped (g_strdup ("hello"), 5); + gst_buffer_add_net_control_message_meta (buf, msg); + g_clear_object (&msg); + + fail_unless (gst_app_src_push_buffer (st.sink_src, buf) == GST_FLOW_OK); + buf = NULL; + + out = gst_app_sink_pull_sample (st.src_sink); + fail_unless (out != NULL); + + fail_unless (gst_buffer_get_size (gst_sample_get_buffer (out)) == 5); + fail_unless (gst_buffer_memcmp (gst_sample_get_buffer (out), 0, "hello", + 5) == 0); + + msg = get_control_message_meta (gst_sample_get_buffer (out)); + fail_unless (g_socket_control_message_get_msg_type (msg) == SCM_RIGHTS); + new_fds = g_unix_fd_message_steal_fds ((GUnixFDMessage *) msg, &new_fds_len); + fail_unless (new_fds_len == 1); + + fstat (new_fds[0], &new_stat); + fail_unless (orig_stat.st_ino, new_stat.st_ino); + + close (new_fds[0]); + g_free (new_fds); + + gst_sample_unref (out); + + symmetry_test_teardown (&st); +} + +GST_END_TEST; +#endif /* HAVE_GIO_UNIX_2_0 */ + +static Suite * +socketintegrationtest_suite (void) +{ + Suite *s = suite_create ("socketintegrationtest"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, + test_that_socketsrc_and_multisocketsink_are_symmetrical); + tcase_add_test (tc_chain, + test_that_tcpclientsink_and_tcpserversrc_are_symmetrical); + tcase_add_test (tc_chain, + test_that_tcpserversink_and_tcpclientsrc_are_symmetrical); + tcase_add_test (tc_chain, + test_that_we_can_provide_new_socketsrc_sockets_during_signal); +#ifdef HAVE_GIO_UNIX_2_0 + tcase_add_test (tc_chain, + test_that_multisocketsink_and_socketsrc_preserve_meta); +#endif /* HAVE_GIO_UNIX_2_0 */ + + return s; +} + +GST_CHECK_MAIN (socketintegrationtest); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/theoraenc.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/theoraenc.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/theoraenc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/theoraenc.c 2015-10-22 08:01:34.000000000 +0000 @@ -328,19 +328,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = theoraenc_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (theoraenc); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/vorbisdec.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/vorbisdec.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/vorbisdec.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/vorbisdec.c 2015-10-22 08:01:34.000000000 +0000 @@ -94,7 +94,7 @@ #endif /* #ifndef GST_DISABLE_PARSE */ static Suite * -vorbisenc_suite (void) +vorbisdec_suite (void) { Suite *s = suite_create ("vorbisdec"); TCase *tc_chain = tcase_create ("general"); @@ -107,19 +107,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = vorbisenc_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (vorbisdec); diff -Nru gst-plugins-base1.0-1.4.3/tests/check/pipelines/vorbisenc.c gst-plugins-base1.0-1.6.1/tests/check/pipelines/vorbisenc.c --- gst-plugins-base1.0-1.4.3/tests/check/pipelines/vorbisenc.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/check/pipelines/vorbisenc.c 2015-10-22 08:01:34.000000000 +0000 @@ -392,19 +392,4 @@ return s; } -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = vorbisenc_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +GST_CHECK_MAIN (vorbisenc); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/app/appsink-src2.c gst-plugins-base1.0-1.6.1/tests/examples/app/appsink-src2.c --- gst-plugins-base1.0-1.4.3/tests/examples/app/appsink-src2.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/app/appsink-src2.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,197 @@ +/* GStreamer + * + * appsrc-src2.c: example for using gst_app_src_push_sample(). + * + * Copyright (C) 2014 Nicola Murino + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include + +#include + +#include +#include + +/* + * In this sample we show the usage of gst_app_src_push_sample in push + * mode, this method set the appsrc caps based on the caps from the sample + * + */ + +typedef struct +{ + GMainLoop *loop; + GstElement *source; + GstElement *sink; +} ProgramData; + +/* called when the appsink notifies us that there is a new buffer ready for + * processing */ + +static GstFlowReturn +on_new_sample_from_sink (GstElement * elt, ProgramData * data) +{ + GstSample *sample; + GstElement *source; + GstFlowReturn ret; + + /* get the sample from appsink */ + sample = gst_app_sink_pull_sample (GST_APP_SINK (elt)); + + /* get source an push new sample */ + source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); + ret = gst_app_src_push_sample (GST_APP_SRC (source), sample); + gst_object_unref (source); + + /* we don't need the appsink sample anymore */ + gst_sample_unref (sample); + + return ret; +} + +/* called when we get a GstMessage from the source pipeline when we get EOS, we + * notify the appsrc of it. */ +static gboolean +on_source_message (GstBus * bus, GstMessage * message, ProgramData * data) +{ + GstElement *source; + + switch (GST_MESSAGE_TYPE (message)) { + case GST_MESSAGE_EOS: + g_print ("The source got dry\n"); + source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); + gst_app_src_end_of_stream (GST_APP_SRC (source)); + gst_object_unref (source); + break; + case GST_MESSAGE_ERROR: + g_print ("Received error\n"); + g_main_loop_quit (data->loop); + break; + default: + break; + } + return TRUE; +} + +/* called when we get a GstMessage from the sink pipeline when we get EOS, we + * exit the mainloop and this testapp. */ +static gboolean +on_sink_message (GstBus * bus, GstMessage * message, ProgramData * data) +{ + /* nil */ + switch (GST_MESSAGE_TYPE (message)) { + case GST_MESSAGE_EOS: + g_print ("Finished playback\n"); + g_main_loop_quit (data->loop); + break; + case GST_MESSAGE_ERROR: + g_print ("Received error\n"); + g_main_loop_quit (data->loop); + break; + default: + break; + } + return TRUE; +} + +int +main (int argc, char *argv[]) +{ + ProgramData *data = NULL; + gchar *string = NULL; + GstBus *bus = NULL; + GstElement *testsink = NULL; + GstElement *testsource = NULL; + + gst_init (&argc, &argv); + + data = g_new0 (ProgramData, 1); + + data->loop = g_main_loop_new (NULL, FALSE); + + /* setting up source pipeline, we read from a file and convert to our desired + * caps. */ + string = + g_strdup_printf + ("audiotestsrc num-buffers=200 ! wavenc ! wavparse ! appsink name=testsink"); + data->source = gst_parse_launch (string, NULL); + g_free (string); + + if (data->source == NULL) { + g_print ("Bad source\n"); + return -1; + } + + /* to be notified of messages from this pipeline, mostly EOS */ + bus = gst_element_get_bus (data->source); + gst_bus_add_watch (bus, (GstBusFunc) on_source_message, data); + gst_object_unref (bus); + + /* we use appsink in push mode, it sends us a signal when data is available + * and we pull out the data in the signal callback. We want the appsink to + * push as fast as it can, hence the sync=false */ + testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink"); + g_object_set (G_OBJECT (testsink), "emit-signals", TRUE, "sync", FALSE, NULL); + g_signal_connect (testsink, "new-sample", + G_CALLBACK (on_new_sample_from_sink), data); + gst_object_unref (testsink); + + /* setting up sink pipeline, we push audio data into this pipeline that will + * then play it back using the default audio sink. */ + string = + g_strdup_printf + ("appsrc name=testsource ! audioconvert ! audioresample ! autoaudiosink"); + data->sink = gst_parse_launch (string, NULL); + g_free (string); + + if (data->sink == NULL) { + g_print ("Bad sink\n"); + return -1; + } + + testsource = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); + /* configure for time-based format */ + g_object_set (testsource, "format", GST_FORMAT_TIME, NULL); + /* uncomment the next line to block when appsrc has buffered enough */ + /* g_object_set (testsource, "block", TRUE, NULL); */ + gst_object_unref (testsource); + + bus = gst_element_get_bus (data->sink); + gst_bus_add_watch (bus, (GstBusFunc) on_sink_message, data); + gst_object_unref (bus); + + /* launching things */ + gst_element_set_state (data->sink, GST_STATE_PLAYING); + gst_element_set_state (data->source, GST_STATE_PLAYING); + + /* let's run !, this loop will quit when the sink pipeline goes EOS or when an + * error occurs in the source or sink pipelines. */ + g_print ("Let's run!\n"); + g_main_loop_run (data->loop); + g_print ("Going out\n"); + + gst_element_set_state (data->source, GST_STATE_NULL); + gst_element_set_state (data->sink, GST_STATE_NULL); + + gst_object_unref (data->source); + gst_object_unref (data->sink); + g_main_loop_unref (data->loop); + g_free (data); + + return 0; +} diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/app/appsink-src.c gst-plugins-base1.0-1.6.1/tests/examples/app/appsink-src.c --- gst-plugins-base1.0-1.4.3/tests/examples/app/appsink-src.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/app/appsink-src.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,3 +1,25 @@ +/* GStreamer + * + * appsink-src.c: example for using appsink and appsrc. + * + * Copyright (C) 2008 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #include #include @@ -24,6 +46,7 @@ GstSample *sample; GstBuffer *app_buffer, *buffer; GstElement *source; + GstFlowReturn ret; /* get the sample from appsink */ sample = gst_app_sink_pull_sample (GST_APP_SINK (elt)); @@ -37,7 +60,10 @@ /* get source an push new buffer */ source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); - return gst_app_src_push_buffer (GST_APP_SRC (source), app_buffer); + ret = gst_app_src_push_buffer (GST_APP_SRC (source), app_buffer); + gst_object_unref (source); + + return ret; } /* called when we get a GstMessage from the source pipeline when we get EOS, we @@ -52,6 +78,7 @@ g_print ("The source got dry\n"); source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource"); gst_app_src_end_of_stream (GST_APP_SRC (source)); + gst_object_unref (source); break; case GST_MESSAGE_ERROR: g_print ("Received error\n"); @@ -101,6 +128,11 @@ else filename = g_strdup ("/usr/share/sounds/ekiga/ring.wav"); + if (!g_file_test (filename, G_FILE_TEST_EXISTS)) { + g_print ("File %s does not exist\n", filename); + return -1; + } + data = g_new0 (ProgramData, 1); data->loop = g_main_loop_new (NULL, FALSE); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/app/appsrc_ex.c gst-plugins-base1.0-1.6.1/tests/examples/app/appsrc_ex.c --- gst-plugins-base1.0-1.4.3/tests/examples/app/appsrc_ex.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/app/appsrc_ex.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,3 +1,24 @@ +/* GStreamer + * + * appsrc_ex.c: example for using appsrc and appsink linked. + * + * Copyright (C) 2007 David Schleef + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifdef HAVE_CONFIG_H diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/app/Makefile.am gst-plugins-base1.0-1.6.1/tests/examples/app/Makefile.am --- gst-plugins-base1.0-1.4.3/tests/examples/app/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/app/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -1,6 +1,6 @@ noinst_PROGRAMS = appsrc_ex appsrc-stream appsrc-stream2 appsrc-ra \ - appsrc-seekable appsink-src + appsrc-seekable appsink-src appsink-src2 appsrc_ex_SOURCES = appsrc_ex.c appsrc_ex_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) @@ -30,3 +30,8 @@ $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ $(GST_BASE_LIBS) $(GST_LIBS) +appsink_src2_SOURCES = appsink-src2.c +appsink_src2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) +appsink_src2_LDADD = \ + $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/app/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/app/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/app/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/app/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,10 +91,9 @@ target_triplet = @target@ noinst_PROGRAMS = appsrc_ex$(EXEEXT) appsrc-stream$(EXEEXT) \ appsrc-stream2$(EXEEXT) appsrc-ra$(EXEEXT) \ - appsrc-seekable$(EXEEXT) appsink-src$(EXEEXT) + appsrc-seekable$(EXEEXT) appsink-src$(EXEEXT) \ + appsink-src2$(EXEEXT) subdir = tests/examples/app -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -105,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -122,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -139,6 +148,13 @@ appsink_src_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsink_src_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_appsink_src2_OBJECTS = appsink_src2-appsink-src2.$(OBJEXT) +appsink_src2_OBJECTS = $(am_appsink_src2_OBJECTS) +appsink_src2_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +appsink_src2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsink_src2_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_appsrc_ra_OBJECTS = appsrc_ra-appsrc-ra.$(OBJEXT) appsrc_ra_OBJECTS = $(am_appsrc_ra_OBJECTS) appsrc_ra_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @@ -210,12 +226,14 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \ - $(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \ - $(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES) -DIST_SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \ - $(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \ - $(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES) +SOURCES = $(appsink_src_SOURCES) $(appsink_src2_SOURCES) \ + $(appsrc_ra_SOURCES) $(appsrc_seekable_SOURCES) \ + $(appsrc_stream_SOURCES) $(appsrc_stream2_SOURCES) \ + $(appsrc_ex_SOURCES) +DIST_SOURCES = $(appsink_src_SOURCES) $(appsink_src2_SOURCES) \ + $(appsrc_ra_SOURCES) $(appsrc_seekable_SOURCES) \ + $(appsrc_stream_SOURCES) $(appsrc_stream2_SOURCES) \ + $(appsrc_ex_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -240,6 +258,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -300,6 +319,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -329,6 +350,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -356,7 +379,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -371,6 +393,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -460,13 +483,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -519,6 +541,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -555,6 +578,12 @@ $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ $(GST_BASE_LIBS) $(GST_LIBS) +appsink_src2_SOURCES = appsink-src2.c +appsink_src2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) +appsink_src2_LDADD = \ + $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) + all: all-am .SUFFIXES: @@ -571,7 +600,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/app/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/app/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -603,6 +631,10 @@ @rm -f appsink-src$(EXEEXT) $(AM_V_CCLD)$(appsink_src_LINK) $(appsink_src_OBJECTS) $(appsink_src_LDADD) $(LIBS) +appsink-src2$(EXEEXT): $(appsink_src2_OBJECTS) $(appsink_src2_DEPENDENCIES) $(EXTRA_appsink_src2_DEPENDENCIES) + @rm -f appsink-src2$(EXEEXT) + $(AM_V_CCLD)$(appsink_src2_LINK) $(appsink_src2_OBJECTS) $(appsink_src2_LDADD) $(LIBS) + appsrc-ra$(EXEEXT): $(appsrc_ra_OBJECTS) $(appsrc_ra_DEPENDENCIES) $(EXTRA_appsrc_ra_DEPENDENCIES) @rm -f appsrc-ra$(EXEEXT) $(AM_V_CCLD)$(appsrc_ra_LINK) $(appsrc_ra_OBJECTS) $(appsrc_ra_LDADD) $(LIBS) @@ -630,6 +662,7 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink_src-appsink-src.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink_src2-appsink-src2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ex-appsrc_ex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ra-appsrc-ra.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_seekable-appsrc-seekable.Po@am__quote@ @@ -674,6 +707,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src_CFLAGS) $(CFLAGS) -c -o appsink_src-appsink-src.obj `if test -f 'appsink-src.c'; then $(CYGPATH_W) 'appsink-src.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src.c'; fi` +appsink_src2-appsink-src2.o: appsink-src2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -MT appsink_src2-appsink-src2.o -MD -MP -MF $(DEPDIR)/appsink_src2-appsink-src2.Tpo -c -o appsink_src2-appsink-src2.o `test -f 'appsink-src2.c' || echo '$(srcdir)/'`appsink-src2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src2-appsink-src2.Tpo $(DEPDIR)/appsink_src2-appsink-src2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='appsink-src2.c' object='appsink_src2-appsink-src2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -c -o appsink_src2-appsink-src2.o `test -f 'appsink-src2.c' || echo '$(srcdir)/'`appsink-src2.c + +appsink_src2-appsink-src2.obj: appsink-src2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -MT appsink_src2-appsink-src2.obj -MD -MP -MF $(DEPDIR)/appsink_src2-appsink-src2.Tpo -c -o appsink_src2-appsink-src2.obj `if test -f 'appsink-src2.c'; then $(CYGPATH_W) 'appsink-src2.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src2-appsink-src2.Tpo $(DEPDIR)/appsink_src2-appsink-src2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='appsink-src2.c' object='appsink_src2-appsink-src2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -c -o appsink_src2-appsink-src2.obj `if test -f 'appsink-src2.c'; then $(CYGPATH_W) 'appsink-src2.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src2.c'; fi` + appsrc_ra-appsrc-ra.o: appsrc-ra.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -MT appsrc_ra-appsrc-ra.o -MD -MP -MF $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo -c -o appsrc_ra-appsrc-ra.o `test -f 'appsrc-ra.c' || echo '$(srcdir)/'`appsrc-ra.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo $(DEPDIR)/appsrc_ra-appsrc-ra.Po @@ -953,6 +1000,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/audio/audiomix.c gst-plugins-base1.0-1.6.1/tests/examples/audio/audiomix.c --- gst-plugins-base1.0-1.4.3/tests/examples/audio/audiomix.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/audio/audiomix.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,9 +23,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GDK_DISABLE_DEPRECATION_WARNINGS #include #include @@ -55,8 +52,8 @@ gtk_window_set_title (GTK_WINDOW (window), "audiomix"); g_signal_connect (window, "destroy", gtk_main_quit, NULL); - layout = gtk_table_new (2, 3, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (layout), 6); + layout = gtk_grid_new (); + g_object_set (G_OBJECT (layout), "column-spacing", 6, NULL); gtk_container_add (GTK_CONTAINER (window), layout); /* channel labels */ @@ -65,25 +62,25 @@ *ext = '\0'; label = gtk_label_new (name); g_free (name); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (layout), label, 0, 1, 0, 1); + gtk_grid_attach (GTK_GRID (layout), label, 0, 0, 1, 1); - gtk_table_attach_defaults (GTK_TABLE (layout), gtk_label_new ("|"), 1, 2, 0, - 1); + gtk_grid_attach (GTK_GRID (layout), gtk_label_new ("|"), 1, 0, 1, 1); name = g_path_get_basename (file_name2); if ((ext = strrchr (name, '.'))) *ext = '\0'; label = gtk_label_new (name); g_free (name); - gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); - gtk_table_attach_defaults (GTK_TABLE (layout), label, 2, 3, 0, 1); + gtk_grid_attach (GTK_GRID (layout), label, 2, 0, 1, 1); /* mix slider */ - scale = gtk_hscale_new_with_range (0.0, 1.0, 1.0 / 200.0); + scale = + gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0.0, 1.0, + 1.0 / 200.0); gtk_range_set_value (GTK_RANGE (scale), 0.0); gtk_widget_set_size_request (scale, 200, -1); - gtk_table_attach_defaults (GTK_TABLE (layout), scale, 0, 3, 1, 2); + gtk_widget_set_hexpand (scale, TRUE); + gtk_grid_attach (GTK_GRID (layout), scale, 0, 1, 3, 1); g_signal_connect (scale, "value-changed", G_CALLBACK (value_changed_callback), volume); @@ -206,6 +203,7 @@ gtk_main (); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); + gst_object_unref (bus); return 0; } diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/audio/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/audio/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/audio/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/audio/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = tests/examples/audio -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -207,6 +215,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -267,6 +276,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -296,6 +307,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -323,7 +336,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -338,6 +350,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -427,13 +440,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -486,6 +498,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -522,7 +535,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/audio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/audio/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -828,6 +840,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/audio/volume.c gst-plugins-base1.0-1.6.1/tests/examples/audio/volume.c --- gst-plugins-base1.0-1.4.3/tests/examples/audio/volume.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/audio/volume.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,9 +23,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GDK_DISABLE_DEPRECATION_WARNINGS #include @@ -62,22 +59,23 @@ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "destroy", gtk_main_quit, NULL); - vbox = gtk_vbox_new (TRUE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (window), vbox); /* elapsed widget */ - hbox = gtk_hbox_new (TRUE, 0); - label = gtk_label_new ("Elapsed"); - elapsed = gtk_label_new ("0.000"); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + label = gtk_label_new ("Elapsed: "); + elapsed = gtk_label_new ("0.0"); gtk_container_add (GTK_CONTAINER (hbox), label); gtk_container_add (GTK_CONTAINER (hbox), elapsed); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* volume */ - hbox = gtk_hbox_new (TRUE, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); label = gtk_label_new ("volume"); gtk_container_add (GTK_CONTAINER (hbox), label); - scale = gtk_hscale_new_with_range (-90.0, 10.0, 0.2); + scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, -90.0, 10.0, + 0.2); gtk_range_set_value (GTK_RANGE (scale), 0.0); gtk_widget_set_size_request (scale, 100, -1); gtk_container_add (GTK_CONTAINER (hbox), scale); @@ -88,6 +86,24 @@ gtk_widget_show_all (GTK_WIDGET (window)); } +static gboolean +progress_update (gpointer data) +{ + GstElement *pipeline = (GstElement *) data; + gint64 position; + gchar *position_str; + + if (gst_element_query_position (pipeline, GST_FORMAT_TIME, &position)) + position_str = g_strdup_printf ("%.1f", (gfloat) position / GST_SECOND); + else + position_str = g_strdup_printf ("n/a"); + gtk_label_set_text (GTK_LABEL (elapsed), position_str); + + g_free (position_str); + + return TRUE; +} + static void message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline) { @@ -167,9 +183,11 @@ /* go to main loop */ gst_element_set_state (pipeline, GST_STATE_PLAYING); + g_timeout_add (100, progress_update, pipeline); gtk_main (); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); + gst_object_unref (bus); return 0; } diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/dynamic/addstream.c gst-plugins-base1.0-1.6.1/tests/examples/dynamic/addstream.c --- gst-plugins-base1.0-1.4.3/tests/examples/dynamic/addstream.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/dynamic/addstream.c 2015-10-22 08:01:34.000000000 +0000 @@ -53,7 +53,7 @@ return bin; } -static gboolean +static void pause_play_stream (GstElement * bin, gint seconds) { gboolean punch_in; @@ -85,9 +85,10 @@ * this situation timestamps start from 0. */ punch_in = TRUE; break; - default: case GST_STATE_CHANGE_FAILURE: - return FALSE; + /* fall through to return */ + default: + return; } if (seconds) @@ -106,8 +107,6 @@ /* now set the pipeline to PLAYING */ gst_element_set_state (bin, GST_STATE_PLAYING); - - return TRUE; } static void @@ -151,7 +150,8 @@ create_stream ("( v4l2src ! videoconvert ! timeoverlay ! queue ! xvimagesink name=v4llive )"); pause_play_stream (bin1, 0); - g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (1)); + g_timeout_add_seconds (1, (GSourceFunc) perform_step, + GINT_TO_POINTER (1)); break; case 1: /* live stream locks on to running_time, pipeline reconfigures latency @@ -159,14 +159,16 @@ g_print ("creating bin2\n"); bin2 = create_stream ("( alsasrc ! queue ! alsasink name=alsalive )"); pause_play_stream (bin2, 0); - g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (2)); + g_timeout_add_seconds (1, (GSourceFunc) perform_step, + GINT_TO_POINTER (2)); break; case 2: /* non-live stream, need base_time to align with current running live sources. */ g_print ("creating bin3\n"); bin3 = create_stream ("( audiotestsrc ! alsasink name=atnonlive )"); pause_play_stream (bin3, 0); - g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (3)); + g_timeout_add_seconds (1, (GSourceFunc) perform_step, + GINT_TO_POINTER (3)); break; case 3: g_print ("creating bin4\n"); @@ -174,7 +176,8 @@ create_stream ("( videotestsrc ! timeoverlay ! videoconvert ! ximagesink name=vtnonlive )"); pause_play_stream (bin4, 0); - g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (4)); + g_timeout_add_seconds (1, (GSourceFunc) perform_step, + GINT_TO_POINTER (4)); break; case 4: /* live stream locks on to running_time */ @@ -183,7 +186,8 @@ create_stream ("( videotestsrc is-live=1 ! timeoverlay ! videoconvert ! ximagesink name=vtlive )"); pause_play_stream (bin5, 0); - g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (5)); + g_timeout_add_seconds (1, (GSourceFunc) perform_step, + GINT_TO_POINTER (5)); break; case 5: /* pause the fist live stream for 2 seconds */ @@ -196,7 +200,8 @@ g_print ("PAUSE bin5 for 2 seconds\n"); pause_play_stream (bin5, 2); g_print ("Waiting 5 seconds\n"); - g_timeout_add_seconds (5, (GSourceFunc) perform_step, GINT_TO_POINTER (6)); + g_timeout_add_seconds (5, (GSourceFunc) perform_step, + GINT_TO_POINTER (6)); break; case 6: g_print ("quiting\n"); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/dynamic/codec-select.c gst-plugins-base1.0-1.6.1/tests/examples/dynamic/codec-select.c --- gst-plugins-base1.0-1.4.3/tests/examples/dynamic/codec-select.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/dynamic/codec-select.c 2015-10-22 08:01:34.000000000 +0000 @@ -214,6 +214,7 @@ /* set the active pad */ g_object_set (select, "active-pad", pad, NULL); + gst_object_unref (select); return TRUE; } diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/dynamic/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/dynamic/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/dynamic/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/dynamic/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -82,8 +92,6 @@ noinst_PROGRAMS = addstream$(EXEEXT) codec-select$(EXEEXT) \ sprinkle$(EXEEXT) sprinkle2$(EXEEXT) sprinkle3$(EXEEXT) subdir = tests/examples/dynamic -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -104,7 +112,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -121,6 +128,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -223,6 +231,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -283,6 +292,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -312,6 +323,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -339,7 +352,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -354,6 +366,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -443,13 +456,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -502,6 +514,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -545,7 +558,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -908,6 +920,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/dynamic/sprinkle.c gst-plugins-base1.0-1.6.1/tests/examples/dynamic/sprinkle.c --- gst-plugins-base1.0-1.4.3/tests/examples/dynamic/sprinkle.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/dynamic/sprinkle.c 2015-10-22 08:01:34.000000000 +0000 @@ -164,7 +164,12 @@ state->count++; } else { state->infos[0] = NULL; + + /* if no more sources left, quit */ + if (!state->infos[2]) + g_main_loop_quit (loop); } + return TRUE; } @@ -202,7 +207,7 @@ GstBus *bus; GstElement *filter, *convert, *sink; GstCaps *caps; - gboolean res; + gboolean linked; SprinkleState *state; gst_init (&argc, &argv); @@ -227,8 +232,8 @@ gst_bin_add_many (GST_BIN (pipeline), adder, filter, convert, sink, NULL); - res = gst_element_link_many (adder, filter, convert, sink, NULL); - g_assert (res); + linked = gst_element_link_many (adder, filter, convert, sink, NULL); + g_assert (linked); /* setup message handling */ bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/encoding/encoding.c gst-plugins-base1.0-1.6.1/tests/examples/encoding/encoding.c --- gst-plugins-base1.0-1.4.3/tests/examples/encoding/encoding.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/encoding/encoding.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,4 +1,7 @@ -/* Example application for using GstProfile and encodebin +/* GStreamer + * + * encoding.c: example application for using GstProfile and encodebin + * * Copyright (C) 2009 Edward Hervey * * This library is free software; you can redistribute it and/or @@ -34,9 +37,10 @@ static void list_codecs (void) { - GstCaps *l; - GstCaps *caps; + GstCaps *l, *caps; + GstStructure *st; guint i, len; + gchar *tmpstr, *desc; caps = gst_caps_new_empty (); @@ -44,9 +48,7 @@ l = gst_caps_list_container_formats (GST_RANK_NONE); len = gst_caps_get_size (l); for (i = 0; i < len; i++) { - GstStructure *st = gst_caps_steal_structure (l, 0); - gchar *tmpstr, *desc; - + st = gst_caps_steal_structure (l, 0); gst_caps_append_structure (caps, st); tmpstr = gst_caps_to_string (caps); @@ -64,9 +66,7 @@ l = gst_caps_list_video_encoding_formats (GST_RANK_NONE); len = gst_caps_get_size (l); for (i = 0; i < len; i++) { - GstStructure *st = gst_caps_steal_structure (l, 0); - gchar *tmpstr, *desc; - + st = gst_caps_steal_structure (l, 0); gst_caps_append_structure (caps, st); tmpstr = gst_caps_to_string (caps); @@ -84,9 +84,7 @@ l = gst_caps_list_audio_encoding_formats (GST_RANK_NONE); len = gst_caps_get_size (l); for (i = 0; i < len; i++) { - GstStructure *st = gst_caps_steal_structure (l, 0); - gchar *tmpstr, *desc; - + st = gst_caps_steal_structure (l, 0); gst_caps_append_structure (caps, st); tmpstr = gst_caps_to_string (caps); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/encoding/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/encoding/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/encoding/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/encoding/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = tests/examples/encoding -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -199,6 +207,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -259,6 +268,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -288,6 +299,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -315,7 +328,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -330,6 +342,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -419,13 +432,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -478,6 +490,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -521,7 +534,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/encoding/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/encoding/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -795,6 +807,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/fft/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/fft/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/fft/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/fft/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = fftrange$(EXEEXT) subdir = tests/examples/fft -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -197,6 +205,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -257,6 +266,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -286,6 +297,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -313,7 +326,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -328,6 +340,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -417,13 +430,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -476,6 +488,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -510,7 +523,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/fft/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/fft/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -797,6 +809,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/gio/giosrc-mounting.c gst-plugins-base1.0-1.6.1/tests/examples/gio/giosrc-mounting.c --- gst-plugins-base1.0-1.4.3/tests/examples/gio/giosrc-mounting.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/gio/giosrc-mounting.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,5 +1,8 @@ /* GStreamer * + * giosrc-mounting: example application that shows how to handle the + * "not-mounted" message + * * Copyright (C) 2009 Sebastian Dröge * * This library is free software; you can redistribute it and/or @@ -48,8 +51,7 @@ static gboolean message_handler (GstBus * bus, GstMessage * message, gpointer user_data) { - - switch (message->type) { + switch (GST_MESSAGE_TYPE (message)) { case GST_MESSAGE_ELEMENT:{ const GstStructure *s = gst_message_get_structure (message); const gchar *name = gst_structure_get_name (s); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/gio/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/gio/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/gio/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/gio/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ @HAVE_GTK_TRUE@noinst_PROGRAMS = giosrc-mounting$(EXEEXT) subdir = tests/examples/gio -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -200,6 +208,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -260,6 +269,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -289,6 +300,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -316,7 +329,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -331,6 +343,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -420,13 +433,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -479,6 +491,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -510,7 +523,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/gio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/gio/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -797,6 +809,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -19,7 +19,17 @@ # descending into all subdirectories a second time, but only after the first # (parallel) run has finished, so it should go right through the second time. VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \ - $(srcdir)/Makefile.in $(srcdir)/Makefile.am subdir = tests/examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -181,6 +189,8 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/common/parallel-subdirs.mak DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -266,6 +276,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -295,6 +307,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -322,7 +336,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -337,6 +350,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -426,13 +440,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -485,6 +498,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -517,7 +531,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -526,7 +539,7 @@ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/parallel-subdirs.mak: +$(top_srcdir)/common/parallel-subdirs.mak $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -813,6 +826,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + .PHONY: independent-subdirs $(SUBDIRS) diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/overlay/gtk-videooverlay.c gst-plugins-base1.0-1.6.1/tests/examples/overlay/gtk-videooverlay.c --- gst-plugins-base1.0-1.4.3/tests/examples/overlay/gtk-videooverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/overlay/gtk-videooverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,6 +23,8 @@ #include "config.h" #endif +#define GDK_VERSION_MIN_REQUIRED (GDK_VERSION_3_0) + #include #include #include @@ -123,12 +125,10 @@ gtk_window_set_title (GTK_WINDOW (window), "GstVideoOverlay Gtk+ demo"); video_window = gtk_drawing_area_new (); - gtk_widget_set_double_buffered (video_window, FALSE); gtk_container_add (GTK_CONTAINER (window), video_window); gtk_container_set_border_width (GTK_CONTAINER (window), 16); gtk_widget_show_all (window); - gtk_widget_realize (window); video_window_xwindow = gtk_widget_get_window (video_window); embed_xid = GDK_WINDOW_XID (video_window_xwindow); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/overlay/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/overlay/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/overlay/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/overlay/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -84,8 +94,6 @@ @HAVE_QT_MOC_TRUE@@USE_X_TRUE@am__append_3 = qtgv-videooverlay noinst_PROGRAMS = $(am__EXEEXT_4) subdir = tests/examples/overlay -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -260,6 +268,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -320,6 +329,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -349,6 +360,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -376,7 +389,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -391,6 +403,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -480,13 +493,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -539,6 +551,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -591,7 +604,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/overlay/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/overlay/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -956,6 +968,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + @HAVE_QT_MOC_TRUE@@USE_X_TRUE@moc_%.cpp:%.h @HAVE_QT_MOC_TRUE@@USE_X_TRUE@ $(AM_V_GEN)$(QT_MOC) $< -o $@ diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/playback/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/playback/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/playback/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/playback/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = playback-test$(EXEEXT) subdir = tests/examples/playback -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -196,6 +204,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -256,6 +265,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -285,6 +296,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -312,7 +325,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -327,6 +339,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -416,13 +429,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -475,6 +487,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -509,7 +522,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/playback/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/playback/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -782,6 +794,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/playback/playback-test.c gst-plugins-base1.0-1.6.1/tests/examples/playback/playback-test.c --- gst-plugins-base1.0-1.4.3/tests/examples/playback/playback-test.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/playback/playback-test.c 2015-10-22 08:01:34.000000000 +0000 @@ -26,10 +26,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GDK_DISABLE_DEPRECATION_WARNINGS -#define GLIB_DISABLE_DEPRECATION_WARNINGS #include #include @@ -77,6 +73,7 @@ //#define UPDATE_INTERVAL 500 //#define UPDATE_INTERVAL 100 #define UPDATE_INTERVAL 40 +#define SLOW_UPDATE_INTERVAL 500 /* number of milliseconds to play for after a seek */ #define SCRUB_TIME 100 @@ -118,6 +115,7 @@ GtkWidget *subtitle_fontdesc_button; GtkWidget *seek_format_combo, *seek_position_label, *seek_duration_label; + GtkWidget *seek_start_label, *seek_stop_label; GtkWidget *seek_entry; GtkWidget *seek_scale, *statusbar; @@ -151,6 +149,8 @@ gboolean scrub; gboolean play_scrub; gboolean skip_seek; + gboolean skip_seek_key_only; + gboolean skip_seek_no_audio; gdouble rate; gboolean snap_before; gboolean snap_after; @@ -174,6 +174,7 @@ gint64 buffering_left; GstState state; guint update_id; + guint slow_update_id; guint seek_timeout_id; /* Used for scrubbing in paused */ gulong changed_id; guint fill_id; @@ -293,13 +294,14 @@ { const gchar *name; void (*func) (PlaybackApp * app, const gchar * location); + const gchar *help; } Pipeline; static const Pipeline pipelines[] = { - {"playbin", make_playbin_pipeline}, + {"playbin", make_playbin_pipeline, "[URLS|FILENAMES]"}, #ifndef GST_DISABLE_PARSE - {"parse-launch", make_parselaunch_pipeline}, + {"parse-launch", make_parselaunch_pipeline, "[PARSE-LAUNCH-LINE]"}, #endif }; @@ -427,6 +429,37 @@ } static gboolean +update_seek_range (PlaybackApp * app) +{ + GstFormat format = GST_FORMAT_TIME; + gint64 seek_start, seek_stop; + gboolean seekable; + GstQuery *query; + + query = gst_query_new_seeking (format); + if (gst_element_query (app->pipeline, query)) { + gchar *str; + + gst_query_parse_seeking (query, &format, &seekable, &seek_start, + &seek_stop); + if (!seekable) { + seek_start = seek_stop = -1; + } + + str = g_strdup_printf ("%" G_GINT64_FORMAT, seek_start); + gtk_label_set_text (GTK_LABEL (app->seek_start_label), str); + g_free (str); + + str = g_strdup_printf ("%" G_GINT64_FORMAT, seek_stop); + gtk_label_set_text (GTK_LABEL (app->seek_stop_label), str); + g_free (str); + } + gst_query_unref (query); + + return TRUE; +} + +static gboolean update_scale (PlaybackApp * app) { GstFormat format = GST_FORMAT_TIME; @@ -508,7 +541,11 @@ if (app->loop_seek) flags |= GST_SEEK_FLAG_SEGMENT; if (app->skip_seek) - flags |= GST_SEEK_FLAG_SKIP; + flags |= GST_SEEK_FLAG_TRICKMODE; + if (app->skip_seek_key_only) + flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS; + if (app->skip_seek_no_audio) + flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO; if (app->snap_before) flags |= GST_SEEK_FLAG_SNAP_BEFORE; if (app->snap_after) @@ -619,11 +656,20 @@ app->update_id = g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, app); } + if (app->slow_update_id == 0) { + app->slow_update_id = + g_timeout_add (SLOW_UPDATE_INTERVAL, (GSourceFunc) update_seek_range, + app); + } } else { if (app->update_id) { g_source_remove (app->update_id); app->update_id = 0; } + if (app->slow_update_id) { + g_source_remove (app->slow_update_id); + app->slow_update_id = 0; + } } } @@ -878,9 +924,9 @@ } static void -skip_toggle_cb (GtkToggleButton * button, PlaybackApp * app) +skip_toggle_common (gboolean * v, GtkToggleButton * button, PlaybackApp * app) { - app->skip_seek = gtk_toggle_button_get_active (button); + *v = gtk_toggle_button_get_active (button); if (app->state == GST_STATE_PLAYING) { gint64 real; @@ -892,6 +938,24 @@ } static void +skip_toggle_cb (GtkToggleButton * button, PlaybackApp * app) +{ + skip_toggle_common (&app->skip_seek, button, app); +} + +static void +skip_key_toggle_cb (GtkToggleButton * button, PlaybackApp * app) +{ + skip_toggle_common (&app->skip_seek_key_only, button, app); +} + +static void +skip_audio_toggle_cb (GtkToggleButton * button, PlaybackApp * app) +{ + skip_toggle_common (&app->skip_seek_no_audio, button, app); +} + +static void rate_spinbutton_changed_cb (GtkSpinButton * button, PlaybackApp * app) { gboolean res = FALSE; @@ -912,7 +976,11 @@ if (app->keyframe_seek) flags |= GST_SEEK_FLAG_KEY_UNIT; if (app->skip_seek) - flags |= GST_SEEK_FLAG_SKIP; + flags |= GST_SEEK_FLAG_TRICKMODE; + if (app->skip_seek_key_only) + flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS; + if (app->skip_seek_no_audio) + flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO; if (app->rate >= 0.0) { s_event = gst_event_new_seek (app->rate, @@ -1112,6 +1180,7 @@ str = gst_tag_list_to_string (tags); g_print ("video %d: %s\n", i, str); g_free (str); + gst_tag_list_unref (tags); } /* find good name for the label */ name = g_strdup_printf ("video %d", i + 1); @@ -1131,6 +1200,7 @@ str = gst_tag_list_to_string (tags); g_print ("audio %d: %s\n", i, str); g_free (str); + gst_tag_list_unref (tags); } /* find good name for the label */ name = g_strdup_printf ("audio %d", i + 1); @@ -1160,6 +1230,7 @@ if (value && G_VALUE_HOLDS_STRING (value)) { name = g_strdup_printf ("text %s", g_value_get_string (value)); } + gst_tag_list_unref (tags); } /* find good name for the label if we didn't use a tag */ if (name == NULL) @@ -1249,6 +1320,7 @@ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->vis_combo), name); } gtk_combo_box_set_active (GTK_COMBO_BOX (app->vis_combo), 0); + gst_plugin_feature_list_free (list); } static void @@ -1827,7 +1899,11 @@ if (app->loop_seek) flags |= GST_SEEK_FLAG_SEGMENT; if (app->skip_seek) - flags |= GST_SEEK_FLAG_SKIP; + flags |= GST_SEEK_FLAG_TRICKMODE; + if (app->skip_seek_key_only) + flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS; + if (app->skip_seek_no_audio) + flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO; s_event = gst_event_new_seek (app->rate, GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0), @@ -1869,7 +1945,7 @@ } } else { /* buffering busy */ - if (app->buffering == FALSE && app->state == GST_STATE_PLAYING) { + if (!app->buffering && app->state == GST_STATE_PLAYING) { /* we were not buffering but PLAYING, PAUSE the pipeline. */ if (!app->is_live) { fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n"); @@ -2519,11 +2595,11 @@ { gint i; - g_print ("usage: %s \n", argv[0]); + g_print ("Usage: %s \n", argv[0]); g_print (" possible types:\n"); for (i = 0; i < G_N_ELEMENTS (pipelines); i++) { - g_print (" %d = %s\n", i, pipelines[i].name); + g_print (" %d = %s %s\n", i, pipelines[i].name, pipelines[i].help); } } @@ -2550,7 +2626,6 @@ g_signal_connect (app->video_window, "motion-notify-event", G_CALLBACK (motion_notify_cb), app); gtk_widget_set_can_focus (app->video_window, TRUE); - gtk_widget_set_double_buffered (app->video_window, FALSE); gtk_widget_add_events (app->video_window, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); @@ -2561,23 +2636,28 @@ "playback-test"); gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, "Stopped"); - hbox = gtk_hbox_new (FALSE, 0); - vbox = gtk_vbox_new (FALSE, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 3); /* media controls */ - play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); - pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE); - stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP); + play_button = gtk_button_new_from_icon_name ("media-playback-start", + GTK_ICON_SIZE_BUTTON); + pause_button = gtk_button_new_from_icon_name ("media-playback-pause", + GTK_ICON_SIZE_BUTTON); + stop_button = gtk_button_new_from_icon_name ("media-playback-stop", + GTK_ICON_SIZE_BUTTON); /* seek expander */ { GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox, *flush_checkbox, *snap_before_checkbox, *snap_after_checkbox; GtkWidget *scrub_checkbox, *play_scrub_checkbox, *rate_label; - GtkWidget *skip_checkbox, *rate_spinbutton; + GtkWidget *skip_checkbox, *skip_key_checkbox, *skip_audio_checkbox, + *rate_spinbutton; GtkWidget *flagtable, *advanced_seek, *advanced_seek_grid; GtkWidget *duration_label, *position_label, *seek_button; + GtkWidget *start_label, *stop_label; seek = gtk_expander_new ("seek options"); flagtable = gtk_grid_new (); @@ -2592,7 +2672,11 @@ flush_checkbox = gtk_check_button_new_with_label ("Flush"); scrub_checkbox = gtk_check_button_new_with_label ("Scrub"); play_scrub_checkbox = gtk_check_button_new_with_label ("Play Scrub"); - skip_checkbox = gtk_check_button_new_with_label ("Play Skip"); + skip_checkbox = gtk_check_button_new_with_label ("Trickmode Play"); + skip_key_checkbox = + gtk_check_button_new_with_label ("Trickmode - Keyframes Only"); + skip_audio_checkbox = + gtk_check_button_new_with_label ("Trickmode - No Audio"); snap_before_checkbox = gtk_check_button_new_with_label ("Snap before"); snap_after_checkbox = gtk_check_button_new_with_label ("Snap after"); rate_spinbutton = gtk_spin_button_new_with_range (-100, 100, 0.1); @@ -2613,6 +2697,10 @@ "play video while seeking"); gtk_widget_set_tooltip_text (skip_checkbox, "Skip frames while playing at high frame rates"); + gtk_widget_set_tooltip_text (skip_key_checkbox, + "Skip everything except keyframes while playing at high frame rates"); + gtk_widget_set_tooltip_text (skip_audio_checkbox, + "Do not decode audio during trick mode playback"); gtk_widget_set_tooltip_text (snap_before_checkbox, "Favor snapping to the frame before the seek target"); gtk_widget_set_tooltip_text (snap_after_checkbox, @@ -2637,6 +2725,10 @@ G_CALLBACK (play_scrub_toggle_cb), app); g_signal_connect (G_OBJECT (skip_checkbox), "toggled", G_CALLBACK (skip_toggle_cb), app); + g_signal_connect (G_OBJECT (skip_key_checkbox), "toggled", + G_CALLBACK (skip_key_toggle_cb), app); + g_signal_connect (G_OBJECT (skip_audio_checkbox), "toggled", + G_CALLBACK (skip_audio_toggle_cb), app); g_signal_connect (G_OBJECT (rate_spinbutton), "value-changed", G_CALLBACK (rate_spinbutton_changed_cb), app); g_signal_connect (G_OBJECT (snap_before_checkbox), "toggled", @@ -2651,6 +2743,8 @@ gtk_grid_attach (GTK_GRID (flagtable), scrub_checkbox, 1, 1, 1, 1); gtk_grid_attach (GTK_GRID (flagtable), play_scrub_checkbox, 2, 1, 1, 1); gtk_grid_attach (GTK_GRID (flagtable), skip_checkbox, 3, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flagtable), skip_key_checkbox, 3, 1, 1, 1); + gtk_grid_attach (GTK_GRID (flagtable), skip_audio_checkbox, 3, 2, 1, 1); gtk_grid_attach (GTK_GRID (flagtable), rate_label, 4, 0, 1, 1); gtk_grid_attach (GTK_GRID (flagtable), rate_spinbutton, 4, 1, 1, 1); gtk_grid_attach (GTK_GRID (flagtable), snap_before_checkbox, 0, 2, 1, 1); @@ -2691,6 +2785,18 @@ gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_duration_label, 3, 1, 1, 1); + start_label = gtk_label_new ("Seek start:"); + gtk_grid_attach (GTK_GRID (advanced_seek_grid), start_label, 4, 0, 1, 1); + stop_label = gtk_label_new ("Seek stop:"); + gtk_grid_attach (GTK_GRID (advanced_seek_grid), stop_label, 4, 1, 1, 1); + + app->seek_start_label = gtk_label_new ("-1"); + gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_start_label, 5, + 0, 1, 1); + app->seek_stop_label = gtk_label_new ("-1"); + gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_stop_label, 5, + 1, 1, 1); + gtk_container_add (GTK_CONTAINER (advanced_seek), advanced_seek_grid); gtk_grid_attach (GTK_GRID (flagtable), advanced_seek, 0, 3, 3, 2); gtk_container_add (GTK_CONTAINER (seek), flagtable); @@ -2702,7 +2808,7 @@ GtkWidget *step_button, *shuttle_checkbox; step = gtk_expander_new ("step options"); - hbox = gtk_hbox_new (FALSE, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); app->step_format_combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->step_format_combo), @@ -2728,7 +2834,9 @@ gtk_box_pack_start (GTK_BOX (hbox), app->step_rate_spinbutton, FALSE, FALSE, 2); - step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD); + step_button = + gtk_button_new_from_icon_name ("media-seek-forward", + GTK_ICON_SIZE_BUTTON); gtk_button_set_label (GTK_BUTTON (step_button), "Step"); gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2); @@ -2744,7 +2852,7 @@ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0)); - app->shuttle_scale = gtk_hscale_new (adjustment); + app->shuttle_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_digits (GTK_SCALE (app->shuttle_scale), 2); gtk_scale_set_value_pos (GTK_SCALE (app->shuttle_scale), GTK_POS_TOP); g_signal_connect (app->shuttle_scale, "value-changed", @@ -2897,14 +3005,15 @@ GtkWidget *vbox, *frame; colorbalance = gtk_expander_new ("color balance options"); - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); /* contrast scale */ frame = gtk_frame_new ("Contrast"); adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1, 1.0, 1.0)); - app->contrast_scale = gtk_hscale_new (adjustment); + app->contrast_scale = + gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (app->contrast_scale), FALSE); g_signal_connect (app->contrast_scale, "value-changed", G_CALLBACK (colorbalance_value_changed), app); @@ -2916,7 +3025,8 @@ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1, 1.0, 1.0)); - app->brightness_scale = gtk_hscale_new (adjustment); + app->brightness_scale = + gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (app->brightness_scale), FALSE); g_signal_connect (app->brightness_scale, "value-changed", G_CALLBACK (colorbalance_value_changed), app); @@ -2928,7 +3038,7 @@ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1, 1.0, 1.0)); - app->hue_scale = gtk_hscale_new (adjustment); + app->hue_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (app->hue_scale), FALSE); g_signal_connect (app->hue_scale, "value-changed", G_CALLBACK (colorbalance_value_changed), app); @@ -2940,7 +3050,8 @@ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1, 1.0, 1.0)); - app->saturation_scale = gtk_hscale_new (adjustment); + app->saturation_scale = + gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (app->saturation_scale), FALSE); g_signal_connect (app->saturation_scale, "value-changed", G_CALLBACK (colorbalance_value_changed), app); @@ -2953,7 +3064,7 @@ /* seek bar */ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, N_GRAD, 0.1, 1.0, 1.0)); - app->seek_scale = gtk_hscale_new (adjustment); + app->seek_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_digits (GTK_SCALE (app->seek_scale), 2); gtk_scale_set_value_pos (GTK_SCALE (app->seek_scale), GTK_POS_RIGHT); gtk_range_set_show_fill_level (GTK_RANGE (app->seek_scale), TRUE); @@ -2974,7 +3085,7 @@ playbin = gtk_expander_new ("playbin options"); /* the playbin panel controls for the video/audio/subtitle tracks */ - panel = gtk_hbox_new (FALSE, 0); + panel = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); app->video_combo = gtk_combo_box_text_new (); app->audio_combo = gtk_combo_box_text_new (); app->text_combo = gtk_combo_box_text_new (); @@ -3083,8 +3194,9 @@ g_signal_connect (G_OBJECT (app->volume_spinbutton), "value-changed", G_CALLBACK (volume_spinbutton_changed_cb), app); /* playbin panel for snapshot */ - boxes2 = gtk_hbox_new (FALSE, 0); - shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE); + boxes2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + shot_button = + gtk_button_new_from_icon_name ("document-save", GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text (shot_button, "save a screenshot .png in the current directory"); g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb), @@ -3187,7 +3299,7 @@ gtk_grid_attach (GTK_GRID (boxes3), app->subtitle_fontdesc_button, 1, 5, 1, 1); - pb2vbox = gtk_vbox_new (FALSE, 0); + pb2vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2); @@ -3215,7 +3327,8 @@ gtk_box_pack_start (GTK_BOX (vbox), step, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), navigation, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), colorbalance, FALSE, FALSE, 2); - gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 2); + gtk_box_pack_start (GTK_BOX (vbox), + gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), app->seek_scale, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (vbox), app->statusbar, FALSE, FALSE, 2); @@ -3272,7 +3385,8 @@ g_list_free (app->paths); g_list_foreach (app->sub_paths, (GFunc) g_free, NULL); g_list_free (app->sub_paths); - + if (app->vis_entries) + g_array_free (app->vis_entries, TRUE); g_print ("free pipeline\n"); gst_object_unref (app->pipeline); } @@ -3302,7 +3416,7 @@ g_print ("Error initializing: %s\n", err->message); exit (1); } - + g_option_context_free (ctx); GST_DEBUG_CATEGORY_INIT (playback_debug, "playback-test", 0, "playback example"); @@ -3311,7 +3425,19 @@ exit (-1); } - app.pipeline_type = atoi (argv[1]); + app.pipeline_type = -1; + if (g_ascii_isdigit (argv[1][0])) { + app.pipeline_type = atoi (argv[1]); + } else { + gint i; + + for (i = 0; i < G_N_ELEMENTS (pipelines); ++i) { + if (strcmp (pipelines[i].name, argv[1]) == 0) { + app.pipeline_type = i; + break; + } + } + } if (app.pipeline_type < 0 || app.pipeline_type >= G_N_ELEMENTS (pipelines)) { print_usage (argc, argv); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/playrec/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/playrec/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/playrec/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/playrec/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = playrec$(EXEEXT) subdir = tests/examples/playrec -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -196,6 +204,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -256,6 +265,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -285,6 +296,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -312,7 +325,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -327,6 +339,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -416,13 +429,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -475,6 +487,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -506,7 +519,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/playrec/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/playrec/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -793,6 +805,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/playrec/playrec.c gst-plugins-base1.0-1.6.1/tests/examples/playrec/playrec.c --- gst-plugins-base1.0-1.4.3/tests/examples/playrec/playrec.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/playrec/playrec.c 2015-10-22 08:01:34.000000000 +0000 @@ -26,9 +26,8 @@ #include -/* Define to run the asynchronous version. This requires 0.10.31 of the - * GStreamer core. The async version has the benefit that it doesn't block the - * main thread but it produces slightly less clear code. */ +/* Define to run the asynchronous version, which has the benefit that it doesn't + * block the main thread but it produces slightly less clear code. */ #define ASYNC_VERSION static GMainLoop *loop; diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/seek/jsseek.c gst-plugins-base1.0-1.6.1/tests/examples/seek/jsseek.c --- gst-plugins-base1.0-1.4.3/tests/examples/seek/jsseek.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/seek/jsseek.c 2015-10-22 08:01:34.000000000 +0000 @@ -24,9 +24,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GDK_DISABLE_DEPRECATION_WARNINGS #include #include @@ -1817,6 +1814,7 @@ str = gst_tag_list_to_string (tags); g_print ("video %d: %s\n", i, str); g_free (str); + gst_tag_list_unref (tags); } /* find good name for the label */ name = g_strdup_printf ("video %d", i + 1); @@ -1834,6 +1832,7 @@ str = gst_tag_list_to_string (tags); g_print ("audio %d: %s\n", i, str); g_free (str); + gst_tag_list_unref (tags); } /* find good name for the label */ name = g_strdup_printf ("audio %d", i + 1); @@ -1861,6 +1860,7 @@ if (value && G_VALUE_HOLDS_STRING (value)) { name = g_strdup_printf ("text %s", g_value_get_string (value)); } + gst_tag_list_unref (tags); } /* find good name for the label if we didn't use a tag */ if (name == NULL) @@ -1947,6 +1947,7 @@ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (vis_combo), name); } gtk_combo_box_set_active (GTK_COMBO_BOX (vis_combo), 0); + gst_plugin_feature_list_free (list); } static void @@ -2352,7 +2353,7 @@ } } else { /* buffering busy */ - if (buffering == FALSE && state == GST_STATE_PLAYING) { + if (!buffering && state == GST_STATE_PLAYING) { /* we were not buffering but PLAYING, PAUSE the pipeline. */ if (!is_live) { fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n"); @@ -2651,7 +2652,7 @@ main (int argc, char **argv) { GtkWidget *window, *hbox, *vbox, *panel, *expander, *pb2vbox, *boxes, - *flagtable, *boxes2, *step; + *flaggrid, *boxes2, *step; GtkWidget *play_button, *pause_button, *stop_button, *shot_button; GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox, *flush_checkbox; GtkWidget *scrub_checkbox, *play_scrub_checkbox; @@ -2679,7 +2680,7 @@ g_print ("Error initializing: %s\n", err->message); exit (1); } - + g_option_context_free (ctx); GST_DEBUG_CATEGORY_INIT (seek_debug, "seek", 0, "seek example"); if (argc != 3) { @@ -2727,20 +2728,22 @@ video_window = gtk_drawing_area_new (); g_signal_connect (video_window, "draw", G_CALLBACK (draw_cb), NULL); g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL); - gtk_widget_set_double_buffered (video_window, FALSE); statusbar = gtk_statusbar_new (); status_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "seek"); gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped"); - hbox = gtk_hbox_new (FALSE, 0); - vbox = gtk_vbox_new (FALSE, 0); - flagtable = gtk_table_new (4, 2, FALSE); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + flaggrid = gtk_grid_new (); gtk_container_set_border_width (GTK_CONTAINER (vbox), 3); /* media controls */ - play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); - pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE); - stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP); + play_button = gtk_button_new_from_icon_name ("media-playback-start", + GTK_ICON_SIZE_BUTTON); + pause_button = gtk_button_new_from_icon_name ("media-playback-pause", + GTK_ICON_SIZE_BUTTON); + stop_button = gtk_button_new_from_icon_name ("media-playback-stop", + GTK_ICON_SIZE_BUTTON); /* seek flags */ accurate_checkbox = gtk_check_button_new_with_label ("Accurate Seek"); @@ -2777,7 +2780,7 @@ GtkWidget *hbox; step = gtk_expander_new ("step options"); - hbox = gtk_hbox_new (FALSE, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); format_combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo), @@ -2798,7 +2801,8 @@ gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_rate_spinbutton), 1.0); gtk_box_pack_start (GTK_BOX (hbox), step_rate_spinbutton, FALSE, FALSE, 2); - step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD); + step_button = gtk_button_new_from_icon_name ("media-seek-forward", + GTK_ICON_SIZE_BUTTON); gtk_button_set_label (GTK_BUTTON (step_button), "Step"); gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2); @@ -2814,7 +2818,8 @@ shuttle_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0)); - shuttle_hscale = gtk_hscale_new (shuttle_adjustment); + shuttle_hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, + shuttle_adjustment); gtk_scale_set_digits (GTK_SCALE (shuttle_hscale), 2); gtk_scale_set_value_pos (GTK_SCALE (shuttle_hscale), GTK_POS_TOP); g_signal_connect (shuttle_hscale, "value_changed", @@ -2830,7 +2835,7 @@ /* seek bar */ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, 100.0, 0.1, 1.0, 1.0)); - hscale = gtk_hscale_new (adjustment); + hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_digits (GTK_SCALE (hscale), 2); gtk_scale_set_value_pos (GTK_SCALE (hscale), GTK_POS_RIGHT); gtk_range_set_show_fill_level (GTK_RANGE (hscale), TRUE); @@ -2845,7 +2850,7 @@ if (pipeline_type == 16) { /* the playbin panel controls for the video/audio/subtitle tracks */ - panel = gtk_hbox_new (FALSE, 0); + panel = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); video_combo = gtk_combo_box_text_new (); audio_combo = gtk_combo_box_text_new (); text_combo = gtk_combo_box_text_new (); @@ -2862,7 +2867,7 @@ g_signal_connect (G_OBJECT (text_combo), "changed", G_CALLBACK (text_combo_cb), pipeline); /* playbin panel for flag checkboxes and volume/mute */ - boxes = gtk_hbox_new (FALSE, 0); + boxes = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); vis_checkbox = gtk_check_button_new_with_label ("Vis"); video_checkbox = gtk_check_button_new_with_label ("Video"); audio_checkbox = gtk_check_button_new_with_label ("Audio"); @@ -2906,8 +2911,9 @@ g_signal_connect (G_OBJECT (volume_spinbutton), "value_changed", G_CALLBACK (volume_spinbutton_changed_cb), pipeline); /* playbin panel for snapshot */ - boxes2 = gtk_hbox_new (FALSE, 0); - shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE); + boxes2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + shot_button = gtk_button_new_from_icon_name ("document-save", + GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text (shot_button, "save a screenshot .png in the current directory"); g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb), @@ -2936,22 +2942,20 @@ gtk_box_pack_start (GTK_BOX (hbox), play_button, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), pause_button, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), stop_button, FALSE, FALSE, 2); - gtk_box_pack_start (GTK_BOX (hbox), flagtable, FALSE, FALSE, 2); - gtk_table_attach_defaults (GTK_TABLE (flagtable), accurate_checkbox, 0, 1, 0, - 1); - gtk_table_attach_defaults (GTK_TABLE (flagtable), flush_checkbox, 1, 2, 0, 1); - gtk_table_attach_defaults (GTK_TABLE (flagtable), loop_checkbox, 2, 3, 0, 1); - gtk_table_attach_defaults (GTK_TABLE (flagtable), key_checkbox, 0, 1, 1, 2); - gtk_table_attach_defaults (GTK_TABLE (flagtable), scrub_checkbox, 1, 2, 1, 2); - gtk_table_attach_defaults (GTK_TABLE (flagtable), play_scrub_checkbox, 2, 3, - 1, 2); - gtk_table_attach_defaults (GTK_TABLE (flagtable), skip_checkbox, 3, 4, 0, 1); - gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_label, 4, 5, 0, 1); - gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_spinbutton, 4, 5, 1, - 2); + gtk_box_pack_start (GTK_BOX (hbox), flaggrid, FALSE, FALSE, 2); + gtk_grid_attach (GTK_GRID (flaggrid), accurate_checkbox, 0, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), flush_checkbox, 1, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), loop_checkbox, 2, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), key_checkbox, 0, 1, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), scrub_checkbox, 1, 1, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), play_scrub_checkbox, 2, 1, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), skip_checkbox, 3, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), rate_label, 4, 0, 1, 1); + gtk_grid_attach (GTK_GRID (flaggrid), rate_spinbutton, 4, 1, 1, 1); + if (panel && boxes && boxes2) { expander = gtk_expander_new ("playbin options"); - pb2vbox = gtk_vbox_new (FALSE, 0); + pb2vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2); @@ -3019,6 +3023,7 @@ gst_element_set_state (pipeline, GST_STATE_NULL); g_print ("free pipeline\n"); + g_array_free (vis_entries, TRUE); gst_object_unref (pipeline); g_list_foreach (paths, (GFunc) g_free, NULL); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/seek/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/seek/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/seek/Makefile.in 2014-09-24 08:16:05.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/seek/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = $(am__EXEEXT_2) subdir = tests/examples/seek -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -218,6 +226,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -278,6 +287,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -307,6 +318,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -334,7 +347,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -349,6 +361,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -438,13 +451,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -497,6 +509,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -533,7 +546,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/seek/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/seek/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -821,6 +833,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/seek/scrubby.c gst-plugins-base1.0-1.6.1/tests/examples/seek/scrubby.c --- gst-plugins-base1.0-1.4.3/tests/examples/seek/scrubby.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/seek/scrubby.c 2015-10-22 08:01:34.000000000 +0000 @@ -1,9 +1,28 @@ +/* GStreamer + * + * scrubby.c: sample application to change the playback speed dynamically + * + * Copyright (C) 2005 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GDK_DISABLE_DEPRECATION_WARNINGS #include #include #include @@ -28,9 +47,11 @@ static guint schanged_id = 0; #define SOURCE "filesrc" -#define ASINK "alsasink" +#define ASINK "autoaudiosink" +//#define ASINK "alsasink" //#define ASINK "osssink" -#define VSINK "xvimagesink" +#define VSINK "autovideosink" +//#define VSINK "xvimagesink" //#define VSINK "ximagesink" //#define VSINK "aasink" //#define VSINK "cacasink" @@ -66,34 +87,6 @@ return element; } -static void -dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data) -{ - dyn_link *connect = (dyn_link *) data; - - if (connect->padname == NULL || - !strcmp (gst_pad_get_name (newpad), connect->padname)) { - if (connect->bin) - gst_bin_add (GST_BIN (pipeline), connect->bin); - gst_pad_link (newpad, connect->target); - } -} - -static void -setup_dynamic_link (GstElement * element, const gchar * padname, - GstPad * target, GstElement * bin) -{ - dyn_link *connect; - - connect = g_new0 (dyn_link, 1); - connect->padname = g_strdup (padname); - connect->target = target; - connect->bin = bin; - - g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link), - connect); -} - static GstElement * make_wav_pipeline (const gchar * location) { @@ -108,14 +101,8 @@ g_object_set (G_OBJECT (src), "location", location, NULL); - gst_bin_add (GST_BIN (pipeline), src); - gst_bin_add (GST_BIN (pipeline), decoder); - gst_bin_add (GST_BIN (pipeline), audiosink); - - gst_element_link (src, decoder); - - setup_dynamic_link (decoder, "src", gst_element_get_static_pad (audiosink, - "sink"), NULL); + gst_bin_add_many (GST_BIN (pipeline), src, decoder, audiosink, NULL); + gst_element_link_many (src, decoder, audiosink, NULL); return pipeline; } @@ -124,11 +111,12 @@ make_playerbin_pipeline (const gchar * location) { GstElement *player; + const gchar *uri = g_filename_to_uri (location, NULL, NULL); player = gst_element_factory_make ("playbin", "player"); g_assert (player); - g_object_set (G_OBJECT (player), "uri", location, NULL); + g_object_set (G_OBJECT (player), "uri", uri, NULL); return player; } @@ -198,7 +186,7 @@ GST_DEBUG ("seek because of slider move"); if (do_seek (widget, TRUE, TRUE)) { - g_source_remove (changed_id); + g_signal_handler_disconnect (hscale, changed_id); changed_id = 0; } } @@ -320,7 +308,7 @@ GST_DEBUG ("stop seek"); if (changed_id) { - g_source_remove (changed_id); + g_signal_handler_disconnect (hscale, changed_id); changed_id = 0; } @@ -337,8 +325,6 @@ gst_element_get_state (pipeline, &state, NULL, GST_CLOCK_TIME_NONE); if (state != GST_STATE_PLAYING) { g_print ("PLAY pipeline\n"); - gst_element_set_state (pipeline, GST_STATE_PAUSED); - gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE); gst_element_set_state (pipeline, GST_STATE_PLAYING); update_id = g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline); @@ -494,8 +480,8 @@ /* initialize gui elements ... */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - hbox = gtk_hbox_new (FALSE, 0); - vbox = gtk_vbox_new (FALSE, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); play_button = gtk_button_new_with_label ("play"); pause_button = gtk_button_new_with_label ("pause"); stop_button = gtk_button_new_with_label ("stop"); @@ -503,12 +489,12 @@ adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, (gdouble) RANGE_PREC, 0.1, 1.0, 1.0)); - hscale = gtk_hscale_new (adjustment); + hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_digits (GTK_SCALE (hscale), 2); sadjustment = GTK_ADJUSTMENT (gtk_adjustment_new (1.0, 0.0, 5.0, 0.1, 1.0, 0.0)); - shscale = gtk_hscale_new (sadjustment); + shscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, sadjustment); gtk_scale_set_digits (GTK_SCALE (shscale), 2); schanged_id = @@ -559,6 +545,8 @@ g_print ("NULL pipeline\n"); gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (bus); + g_print ("free pipeline\n"); gst_object_unref (pipeline); diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/snapshot/Makefile.in gst-plugins-base1.0-1.6.1/tests/examples/snapshot/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/examples/snapshot/Makefile.in 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/snapshot/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -81,8 +91,6 @@ target_triplet = @target@ noinst_PROGRAMS = $(am__EXEEXT_2) subdir = tests/examples/snapshot -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -103,7 +111,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -120,6 +127,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -194,6 +202,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -254,6 +263,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -283,6 +294,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -310,7 +323,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -325,6 +337,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -414,13 +427,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -473,6 +485,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -504,7 +517,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -777,6 +789,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/examples/snapshot/snapshot.c gst-plugins-base1.0-1.6.1/tests/examples/snapshot/snapshot.c --- gst-plugins-base1.0-1.4.3/tests/examples/snapshot/snapshot.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/examples/snapshot/snapshot.c 2015-10-22 08:01:34.000000000 +0000 @@ -104,6 +104,7 @@ /* get the preroll buffer from appsink, this block untils appsink really * prerolls */ g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL); + gst_object_unref (sink); /* if we have a buffer now, convert it to a pixbuf. It's possible that we * don't have a buffer because we went EOS right away or had an error. */ diff -Nru gst-plugins-base1.0-1.4.3/tests/files/Makefile.in gst-plugins-base1.0-1.6.1/tests/files/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/files/Makefile.in 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/files/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = tests/files -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -141,6 +150,7 @@ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -201,6 +211,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -230,6 +242,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -257,7 +271,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -272,6 +285,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -361,13 +375,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -420,6 +433,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -456,7 +470,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/files/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/files/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -631,6 +644,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/Makefile.am gst-plugins-base1.0-1.6.1/tests/icles/Makefile.am --- gst-plugins-base1.0-1.4.3/tests/icles/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -76,6 +76,14 @@ test_effect_switch_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_effect_switch_LDADD = $(GST_LIBS) +test_overlay_blending_SOURCES = test-overlay-blending.c +test_overlay_blending_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_CFLAGS) $(GIO_CFLAGS) +test_overlay_blending_LDADD = \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(GST_LIBS) $(GIO_LIBS) $(LIBM) + test_scale_SOURCES = test-scale.c test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_scale_LDADD = $(GST_LIBS) $(LIBM) @@ -84,6 +92,10 @@ test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_box_LDADD = $(GST_LIBS) $(LIBM) +test_reverseplay_SOURCES = test-reverseplay.c +test_reverseplay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) +test_reverseplay_LDADD = $(GST_LIBS) $(LIBM) + noinst_PROGRAMS = $(X_TESTS) $(PANGO_TESTS) \ audio-trickplay playbin-text position-formats stress-playbin \ - test-scale test-box test-effect-switch + test-scale test-box test-effect-switch test-overlay-blending test-reverseplay diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/Makefile.in gst-plugins-base1.0-1.6.1/tests/icles/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/icles/Makefile.in 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -84,10 +94,9 @@ audio-trickplay$(EXEEXT) playbin-text$(EXEEXT) \ position-formats$(EXEEXT) stress-playbin$(EXEEXT) \ test-scale$(EXEEXT) test-box$(EXEEXT) \ - test-effect-switch$(EXEEXT) + test-effect-switch$(EXEEXT) test-overlay-blending$(EXEEXT) \ + test-reverseplay$(EXEEXT) subdir = tests/icles -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -108,7 +117,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -125,6 +133,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -227,6 +236,25 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_effect_switch_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ +am_test_overlay_blending_OBJECTS = \ + test_overlay_blending-test-overlay-blending.$(OBJEXT) +test_overlay_blending_OBJECTS = $(am_test_overlay_blending_OBJECTS) +test_overlay_blending_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +test_overlay_blending_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(test_overlay_blending_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +am_test_reverseplay_OBJECTS = \ + test_reverseplay-test-reverseplay.$(OBJEXT) +test_reverseplay_OBJECTS = $(am_test_reverseplay_OBJECTS) +test_reverseplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +test_reverseplay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(test_reverseplay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ am_test_scale_OBJECTS = test_scale-test-scale.$(OBJEXT) test_scale_OBJECTS = $(am_test_scale_OBJECTS) test_scale_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @@ -294,6 +322,7 @@ $(position_formats_SOURCES) $(stress_playbin_SOURCES) \ $(stress_videooverlay_SOURCES) $(test_box_SOURCES) \ $(test_colorkey_SOURCES) $(test_effect_switch_SOURCES) \ + $(test_overlay_blending_SOURCES) $(test_reverseplay_SOURCES) \ $(test_scale_SOURCES) $(test_textoverlay_SOURCES) \ $(test_videooverlay_SOURCES) DIST_SOURCES = $(audio_trickplay_SOURCES) \ @@ -303,7 +332,8 @@ $(stress_playbin_SOURCES) \ $(am__stress_videooverlay_SOURCES_DIST) $(test_box_SOURCES) \ $(am__test_colorkey_SOURCES_DIST) \ - $(test_effect_switch_SOURCES) $(test_scale_SOURCES) \ + $(test_effect_switch_SOURCES) $(test_overlay_blending_SOURCES) \ + $(test_reverseplay_SOURCES) $(test_scale_SOURCES) \ $(am__test_textoverlay_SOURCES_DIST) \ $(am__test_videooverlay_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ @@ -346,6 +376,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -431,6 +462,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -460,6 +493,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -487,7 +522,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -502,6 +536,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -591,13 +626,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -650,6 +684,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -719,12 +754,24 @@ test_effect_switch_SOURCES = test-effect-switch.c test_effect_switch_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_effect_switch_LDADD = $(GST_LIBS) +test_overlay_blending_SOURCES = test-overlay-blending.c +test_overlay_blending_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_CFLAGS) $(GIO_CFLAGS) + +test_overlay_blending_LDADD = \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \ + $(GST_LIBS) $(GIO_LIBS) $(LIBM) + test_scale_SOURCES = test-scale.c test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_scale_LDADD = $(GST_LIBS) $(LIBM) test_box_SOURCES = test-box.c test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) test_box_LDADD = $(GST_LIBS) $(LIBM) +test_reverseplay_SOURCES = test-reverseplay.c +test_reverseplay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) +test_reverseplay_LDADD = $(GST_LIBS) $(LIBM) all: all-recursive .SUFFIXES: @@ -741,7 +788,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/icles/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -809,6 +855,14 @@ @rm -f test-effect-switch$(EXEEXT) $(AM_V_CCLD)$(test_effect_switch_LINK) $(test_effect_switch_OBJECTS) $(test_effect_switch_LDADD) $(LIBS) +test-overlay-blending$(EXEEXT): $(test_overlay_blending_OBJECTS) $(test_overlay_blending_DEPENDENCIES) $(EXTRA_test_overlay_blending_DEPENDENCIES) + @rm -f test-overlay-blending$(EXEEXT) + $(AM_V_CCLD)$(test_overlay_blending_LINK) $(test_overlay_blending_OBJECTS) $(test_overlay_blending_LDADD) $(LIBS) + +test-reverseplay$(EXEEXT): $(test_reverseplay_OBJECTS) $(test_reverseplay_DEPENDENCIES) $(EXTRA_test_reverseplay_DEPENDENCIES) + @rm -f test-reverseplay$(EXEEXT) + $(AM_V_CCLD)$(test_reverseplay_LINK) $(test_reverseplay_OBJECTS) $(test_reverseplay_LDADD) $(LIBS) + test-scale$(EXEEXT): $(test_scale_OBJECTS) $(test_scale_DEPENDENCIES) $(EXTRA_test_scale_DEPENDENCIES) @rm -f test-scale$(EXEEXT) $(AM_V_CCLD)$(test_scale_LINK) $(test_scale_OBJECTS) $(test_scale_LDADD) $(LIBS) @@ -837,6 +891,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_box-test-box.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_colorkey-test-colorkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_effect_switch-test-effect-switch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_overlay_blending-test-overlay-blending.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_reverseplay-test-reverseplay.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_scale-test-scale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_textoverlay-test-textoverlay.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_videooverlay-test-videooverlay.Po@am__quote@ @@ -1005,6 +1061,34 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_effect_switch_CFLAGS) $(CFLAGS) -c -o test_effect_switch-test-effect-switch.obj `if test -f 'test-effect-switch.c'; then $(CYGPATH_W) 'test-effect-switch.c'; else $(CYGPATH_W) '$(srcdir)/test-effect-switch.c'; fi` +test_overlay_blending-test-overlay-blending.o: test-overlay-blending.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.o -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c + +test_overlay_blending-test-overlay-blending.obj: test-overlay-blending.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.obj -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi` + +test_reverseplay-test-reverseplay.o: test-reverseplay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.o -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c + +test_reverseplay-test-reverseplay.obj: test-reverseplay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.obj -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi` + test_scale-test-scale.o: test-scale.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.o -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po @@ -1330,6 +1414,8 @@ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/decodetest.c gst-plugins-base1.0-1.6.1/tests/icles/playback/decodetest.c --- gst-plugins-base1.0-1.4.3/tests/icles/playback/decodetest.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/decodetest.c 2015-10-22 08:01:34.000000000 +0000 @@ -71,8 +71,7 @@ } static void -new_decoded_pad_cb (GstElement * decodebin, GstPad * pad, gboolean last, - GstElement * pipeline) +pad_added_cb (GstElement * decodebin, GstPad * pad, GstElement * pipeline) { GstPadLinkReturn ret; GstElement *fakesink; @@ -149,8 +148,7 @@ gst_element_link_pads (source, "src", decoder, "sink"); - g_signal_connect (decoder, "new-decoded-pad", - G_CALLBACK (new_decoded_pad_cb), pipeline); + g_signal_connect (decoder, "pad-added", G_CALLBACK (pad_added_cb), pipeline); res = gst_element_set_state (pipeline, GST_STATE_PLAYING); if (res == GST_STATE_CHANGE_FAILURE) { diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/Makefile.in gst-plugins-base1.0-1.6.1/tests/icles/playback/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/icles/playback/Makefile.in 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,7 +15,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -83,8 +93,6 @@ test3$(EXEEXT) test4$(EXEEXT) test5$(EXEEXT) test6$(EXEEXT) \ test7$(EXEEXT) subdir = tests/icles/playback -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -105,7 +113,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -122,6 +129,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -242,6 +250,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -302,6 +311,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -331,6 +342,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -358,7 +371,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -373,6 +385,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -462,13 +475,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -521,6 +533,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -565,7 +578,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/playback/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/icles/playback/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -985,6 +997,8 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/test2.c gst-plugins-base1.0-1.6.1/tests/icles/playback/test2.c --- gst-plugins-base1.0-1.4.3/tests/icles/playback/test2.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/test2.c 2015-10-22 08:01:34.000000000 +0000 @@ -18,11 +18,20 @@ */ #include +static GMainLoop *loop; + +static void +error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop) +{ + g_main_loop_quit (main_loop); +} + gint main (gint argc, gchar * argv[]) { GstElement *player; GstStateChangeReturn res; + GstBus *bus; gst_init (&argc, &argv); @@ -31,13 +40,20 @@ g_object_set (G_OBJECT (player), "uri", argv[1], NULL); + loop = g_main_loop_new (NULL, TRUE); + bus = gst_pipeline_get_bus (GST_PIPELINE (player)); + gst_bus_add_signal_watch (bus); + + g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop); + g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop); + res = gst_element_set_state (player, GST_STATE_PLAYING); - if (res != GST_STATE_CHANGE_SUCCESS) { + if (res == GST_STATE_CHANGE_FAILURE) { g_print ("could not play\n"); return -1; } - g_main_loop_run (g_main_loop_new (NULL, TRUE)); + g_main_loop_run (loop); return 0; } diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/test4.c gst-plugins-base1.0-1.6.1/tests/icles/playback/test4.c --- gst-plugins-base1.0-1.4.3/tests/icles/playback/test4.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/test4.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,11 +28,20 @@ #include +static GMainLoop *loop; + +static void +error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop) +{ + g_main_loop_quit (main_loop); +} + gint main (gint argc, gchar * argv[]) { GstElement *player; GstStateChangeReturn res; + GstBus *bus; gst_init (&argc, &argv); @@ -44,11 +53,18 @@ exit (-1); } + loop = g_main_loop_new (NULL, TRUE); + bus = gst_pipeline_get_bus (GST_PIPELINE (player)); + gst_bus_add_signal_watch (bus); + + g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop); + g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop); + g_object_set (G_OBJECT (player), "uri", argv[1], NULL); g_print ("play...\n"); res = gst_element_set_state (player, GST_STATE_PLAYING); - if (res != GST_STATE_CHANGE_SUCCESS) { + if (res == GST_STATE_CHANGE_FAILURE) { g_print ("could not play\n"); return -1; } @@ -58,8 +74,8 @@ g_print ("pause...\n"); res = gst_element_set_state (player, GST_STATE_PAUSED); - if (res != GST_STATE_CHANGE_SUCCESS) { - g_print ("could not play\n"); + if (res == GST_STATE_CHANGE_FAILURE) { + g_print ("could not pause\n"); return -1; } @@ -68,7 +84,7 @@ g_print ("play...\n"); res = gst_element_set_state (player, GST_STATE_PLAYING); - if (res != GST_STATE_CHANGE_SUCCESS) { + if (res == GST_STATE_CHANGE_FAILURE) { g_print ("could not play\n"); return -1; } @@ -88,12 +104,12 @@ g_print ("play...\n"); res = gst_element_set_state (player, GST_STATE_PLAYING); - if (res != GST_STATE_CHANGE_SUCCESS) { + if (res == GST_STATE_CHANGE_FAILURE) { g_print ("could not play\n"); return -1; } - g_main_loop_run (g_main_loop_new (NULL, TRUE)); + g_main_loop_run (loop); return 0; } diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/test5.c gst-plugins-base1.0-1.6.1/tests/icles/playback/test5.c --- gst-plugins-base1.0-1.4.3/tests/icles/playback/test5.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/test5.c 2015-10-22 08:01:34.000000000 +0000 @@ -30,7 +30,7 @@ static GMainLoop *loop; static void -new_pad (GstElement * element, GstPad * pad, gboolean last, GstElement * sink) +pad_added_cb (GstElement * element, GstPad * pad, GstElement * sink) { g_print ("New pad...\n"); } @@ -108,8 +108,8 @@ decodebin = gst_element_factory_make ("decodebin", "decodebin"); g_assert (decodebin); - g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad", - G_CALLBACK (new_pad), NULL); + g_signal_connect (G_OBJECT (decodebin), "pad-added", + G_CALLBACK (pad_added_cb), NULL); g_signal_connect (G_OBJECT (decodebin), "no-more-pads", G_CALLBACK (no_more_pads), NULL); @@ -120,7 +120,12 @@ g_print ("usage: %s \n", argv[0]); exit (-1); } - g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); + + if (!g_str_has_prefix (argv[1], "file://")) { + g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); + } else { + g_object_set (G_OBJECT (filesrc), "location", argv[1] + 7, NULL); + } /* event based programming approach */ loop = g_main_loop_new (NULL, TRUE); diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/playback/test.c gst-plugins-base1.0-1.6.1/tests/icles/playback/test.c --- gst-plugins-base1.0-1.4.3/tests/icles/playback/test.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/playback/test.c 2015-10-22 08:01:34.000000000 +0000 @@ -37,6 +37,7 @@ element = gst_bin_new ("vbin"); conv = gst_element_factory_make ("videoconvert", "conv"); sink = gst_element_factory_make (DEFAULT_VIDEOSINK, "sink"); + g_assert (sink); gst_bin_add (GST_BIN (element), conv); gst_bin_add (GST_BIN (element), sink); @@ -60,6 +61,7 @@ element = gst_bin_new ("abin"); conv = gst_element_factory_make ("audioconvert", "conv"); sink = gst_element_factory_make (DEFAULT_AUDIOSINK, "sink"); + g_assert (sink); gst_bin_add (GST_BIN (element), conv); gst_bin_add (GST_BIN (element), sink); @@ -73,7 +75,7 @@ } static void -cb_newpad (GstElement * decodebin, GstPad * pad, gboolean last, gpointer data) +pad_added_cb (GstElement * decodebin, GstPad * pad, gpointer data) { GstCaps *caps; GstStructure *str; @@ -137,11 +139,18 @@ } } +static void +error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop) +{ + g_main_loop_quit (main_loop); +} + gint main (gint argc, gchar * argv[]) { GstElement *pipeline, *filesrc, *decodebin; GstStateChangeReturn res; + GstBus *bus; gst_init (&argc, &argv); @@ -152,8 +161,15 @@ decodebin = gst_element_factory_make ("decodebin", "decodebin"); g_assert (decodebin); - g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad", - G_CALLBACK (cb_newpad), pipeline); + loop = g_main_loop_new (NULL, TRUE); + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + gst_bus_add_signal_watch (bus); + + g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop); + g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop); + + g_signal_connect (G_OBJECT (decodebin), "pad-added", + G_CALLBACK (pad_added_cb), pipeline); gst_bin_add_many (GST_BIN (pipeline), filesrc, decodebin, NULL); gst_element_link (filesrc, decodebin); @@ -162,7 +178,12 @@ g_print ("usage: %s \n", argv[0]); exit (-1); } - g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); + + if (!g_str_has_prefix (argv[1], "file://")) { + g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); + } else { + g_object_set (G_OBJECT (filesrc), "location", argv[1] + 7, NULL); + } /* set to paused, decodebin will autoplug and signal new_pad callbacks */ res = gst_element_set_state (pipeline, GST_STATE_PAUSED); @@ -186,7 +207,6 @@ } /* go in the mainloop now */ - loop = g_main_loop_new (NULL, TRUE); g_main_loop_run (loop); return 0; diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/stress-videooverlay.c gst-plugins-base1.0-1.6.1/tests/icles/stress-videooverlay.c --- gst-plugins-base1.0-1.4.3/tests/icles/stress-videooverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/stress-videooverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -242,5 +242,7 @@ g_main_loop_unref (loop); + gst_object_unref (bus); + return 0; } diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/test-colorkey.c gst-plugins-base1.0-1.6.1/tests/icles/test-colorkey.c --- gst-plugins-base1.0-1.4.3/tests/icles/test-colorkey.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/test-colorkey.c 2015-10-22 08:01:34.000000000 +0000 @@ -23,11 +23,6 @@ #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ -#define GLIB_DISABLE_DEPRECATION_WARNINGS -#define GDK_DISABLE_DEPRECATION_WARNINGS - #include #include @@ -41,7 +36,7 @@ static GtkWidget *video_window = NULL; static GstElement *sink = NULL; static gulong embed_xid = 0; -static GdkColor trans_color; +static GdkRGBA trans_color; static gboolean trans_color_set = FALSE; static void @@ -62,7 +57,7 @@ guint x, y; guint h = allocation.height * 0.75; - gdk_cairo_set_source_color (cr, &trans_color); + gdk_cairo_set_source_rgba (cr, &trans_color); cairo_rectangle (cr, 0, 0, allocation.width, h); cairo_fill (cr); @@ -242,7 +237,6 @@ g_signal_connect (G_OBJECT (video_window), "draw", G_CALLBACK (draw_cb), NULL); g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL); - gtk_widget_set_double_buffered (video_window, FALSE); gtk_container_add (GTK_CONTAINER (window), video_window); /* show the gui and play */ diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/test-overlay-blending.c gst-plugins-base1.0-1.6.1/tests/icles/test-overlay-blending.c --- gst-plugins-base1.0-1.4.3/tests/icles/test-overlay-blending.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/test-overlay-blending.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,288 @@ +/* GStreamer video overlay composition blending test app + * Copyright (C) 2014 Tim-Philipp Müller + + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include + +#define VIDEO_WIDTH 720 +#define VIDEO_HEIGHT 480 +#define VIDEO_FPS 50 + +/* GdkPixbuf RGBA C-Source image dump from gdk-pixbuf-csource --raw, + * gzipped and then base64 encoded */ +const gchar gzipped_pixdata_base64[] = + "H4sICPX/Z1QAA2xvZ28ucGl4AO2dsZHrNhCG+ewK2II64ClyrhmnTtSBh4kLUOLQAUuwEhSgFtiA" + "A7agwA2wBT5AXJ5w4P5LgKLEO97ezDf2SCAIAftjFwuQ7/c///ojy/77+8eP7Jcs+/WfLMv+t/zW" + "dV32pSmK3HK6sXZbFOXV9PZfWipLbWksHdHQZxVpZP+Ee7u62/d7rt0fivIqimJnOX+w/zhauq68" + "aWjevfdUR1h3vXq/KMqzufueFN1J1FE+stf8KfCzobZ3q/ePojyT3v8gDSyB09GFND7g/N014rpl" + "41xF+Wz0/i817nwFjepP+Rb0PnDwOUOehePyQq1eurlrSkXZOkVx7OblbGK43upf+zcqyldhOT22" + "5GvV9ynKXIriQDpKye242Ldcve2KskX6deaRWVeebnpdu32Koryc4t/iaKksmm9Vvg3W3neWk+Vs" + "qS2tpSOu9NmZtLG4f7R15paS7jXct1q7XxTl2ZDd157dp1A/6q9I+1Wg+QH1g8pmcb7M0szUHseV" + "/KTTtJg39XyudH/NASmbhfzOUtqTNHmhew1cglhT9ad8O16kv7m4eFT3/pVNQ77IX8shLgW/RnsW" + "Li7V5y4UJaDo9wnOT9Sjq1fzn4oSQXHft4tZ00Vpr5jI3yiKwmO1sy/63GZKzNpS+dVyLsaYneVk" + "Ud+rbIqi32M/kC7DtaXzn6vt9Vm95ZbS0lg64rx2nynKdyHQ3oC+A06ZxdtbkztWundpqS1fKo5j" + "9OfQ8+jKJNbW987eye47QGO5WE6u/BPakJP2rt4927X7JhanNaBBzQUpEMbmU2hJk66O2ftt7lrS" + "f8vc4yl+0P7llspyWapOl3th9Hdde4yVz4m17eMD2pP8ZBXjI0l3J7oG1Rf1DlH7dyBOpKuB2+dB" + "2ZzKXS3ugw9+lnKZB49oH2bL1owGH9K4vX5P7Yg+0+O1/Uj/XSRm8ep9Ws6LclrRfe+N1+xYIxjz" + "49Jrh6D+m68inSypPeQja7pXRZp3/z1P6M7XM+xX+7eznElHc3E63Hv2xWmoo89H4yLEnpDg+orq" + "DsnJFq7oWqYtLhd7sbTg3i3dL2VO2Xlt5Oo7DzY1Uc8VtOng9eMZtP0ctpnmJa787Tcm/jbUtmHc" + "xfmG+p0bwz0R9t1hYr33WTgj/ZEfe1R7HfnJ3NNCjIbKoP8f1SBn2w2Nq3htYI9o7uBopnRI9nmO" + "rM/ZveijhWulee+DFrx2xZSHe0Gmn99ix5sd96A+1E97w88pB8bX1ABubfYK4DxG+msYPbWWksqU" + "gu5a0u/O68PQ3t99hWF8kW9vC2gQaWTyWtD2sB5UVzOhGeRLJR2y/pB0k9RHgCqxXaP2kP5Qn9TU" + "n+He7rumwO/j5oSr0FanQZf/jIp33+650qXXjSj2FP2+y58AbYVrPs5PjuyOxsTvq5H+yYb8Mofg" + "u8rgmKb2vq/C+lPtMLj2KOjBbyPSqTS3N9T2Y/D5SbAtdt1r4uapoZ9ife+VroHzlQn2ZCf0dw7K" + "7rk2Cn2VMo6z15pP1KPzt5N72LT+4/Q36hv7d+R8INN/oR2zdunZEcyvANuEPj3SNlkNmvHcIY6x" + "4eeHWbkiSfugvBT3jeLYifKdCdaHggbC+Q7Vi+YOriznW5PG8BENAj3G5FYQTsslWvcxuqqABke6" + "oXzoqGyEfcC1kunnXRRvcfOm2N9mOo4szX1df/DnB4P9BbsOMmANNXf8F9TgaB1p5LlppBehfr+/" + "0PiwuhJ+Y+hbpXpbGsNbLtTcc66LPzP31u+rDznPesJPDnnS5Ny2oMGRnSdoEOVERjpE2qTvTmAc" + "pGuQ7Yg5EyP7QDY3gjQozREzNIhiNXTv1Ni1BeOCyvvxOJqzUJtzUD6MWaX1wKd4P9HbgmfdhFwL" + "p0FOr9x6EOngmtKHpt8TGNUxcQ2yTXGeNLL/lHz4Qxo09/0tNN8gH4zainIcyK7ZuF7Q4D6iDal1" + "1kE5ZD+bfD+DsB48BuXy7L7//mEvgulrKWd3iyUi7ZPzS+J6C1wz+XyFkfMWB0D02tHrl2FfMDYX" + "yfUvitXg2QvBrlHMyM4JEW3oqC+5/orymwbEUWtr5ck65PKidVCGy4leh71AZgwlv9JN6VDQsZSP" + "QddM+iUw7nM5BHWn7jWKbRf6VsrJcjEFtGug2dr7HvntOYQa5OanTT8jY//2tMcXauxCuVBOo+9n" + "YYRxnNIhvN7g2AnGI+iamD4w6bnwqN810QctaUM6V8LlDJFPk9a7qfllzmdVEW2Yg18vmkc/xTrw" + "yTqU9uDD/fgK+b9EHcK1nTDGcF0Hrok6Gyu00c33KBZlifztYY6fPbcG2poUqwl2LeWXuXv4OVEp" + "95XUX/6Yoj5bWx8v0F8OfN3g72rS3TFWewk6RHuHXOwkjoXhfVnsOcdFc5xUJ/Jto7gKlEX5xUlN" + "x/T/RNvFvhA0GDXnCfedPY9+ZUhjvu4Wfy5P0CHKoXGaEMci1TYj7sfqJbI+uBfwSNuFelPPXkp+" + "k823BGXQWuGh3AmYRzf9zpKMOfvyYB8uEiuC8ZXO00zuZ020G83rs8Y/xU8gmwcaRPVKa+uk/LLh" + "8y1NUEbKfc+aww3eP/xS73xIBez5XbKPzwuW3H4h6Ec3j6E9ba6PkR9MGgvBNmPbLeXa58TfKRqM" + "brtJPJuTom/vGm4dwJ2lQXmsWe/cM4l7mFtBOCcjPR+B9iMGW4LnGWLHa4bdzNqbj6wj2QYEXYX+" + "JPWMKlcOvpdEaIcUu0blUA1eX7Bnbx7os02/N4iLRSMY7QuacWwSc24YjhXQgxQ/sT4s0QbQs2kO" + "dl1o+hiYs09p/8x/7kPaqw/3GZGfkPbmka9C5wiQ30RzJdp3R2cTh3MKozk6ta1bgfYGUzU42sMX" + "xsP1q4ttuLxfci7Ps18/RwfPI6f2x4QOG087/m8arRlN2vN9yP+G5yiTcpETbUBxCpo7kGZzof3D" + "OwGG56ca7/NwDkdrwc1qUNiXT4Hrx9hn1WLOj0n7wDF7Vcka9Gw39lyL9Gz51P78ebAv1G9BfWiv" + "A2kQ+mKhzbP2aEz8s8DsmWGDfbxjc/+OENDfib4b3uNUejmZqGd8g/5EY3k1CWt2cz9nONR380XM" + "+HPvHlnivU/ce19aA96FA/TsP2984q6jcpeg/f75kTyoxwfFiSW6ZkJLHDHvt8np93Hv3xliCLT2" + "OIEx3OTeILMf2EztCYKYNcYG2fMQivKdYbQUpY1s/M6ZTcbpivJMMv5Zpdhn7mdpV1GUO1l/NjTU" + "Usx7Z8Iz3ZuM0xXlFWT8s4CsDkmzJZPD0ThUUWaSye8THZ6RqOj/uf2L1f79T0XZCpn8vJJ0Pkb9" + "n6IsCOVoBp/HvS+moe83+T4dRVEUZRmyn2F9swl9yAAA"; + +static GstBuffer *logo_buf; + +static GMainLoop *main_loop; +static gint count; + +static GstBuffer * +create_overlay_buffer (void) +{ + GZlibDecompressor *decompress; + GConverterResult decomp_res; + guchar *gzipped_pixdata, *pixdata; + gsize gzipped_size, bytes_read, pixdata_size; + GstBuffer *logo_pixels; + guint w, h, stride; + + gzipped_pixdata = g_base64_decode (gzipped_pixdata_base64, &gzipped_size); + g_assert (gzipped_pixdata != NULL); + + pixdata = g_malloc (64 * 1024); + + decompress = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); + decomp_res = g_converter_convert (G_CONVERTER (decompress), + gzipped_pixdata, gzipped_size, pixdata, 64 * 1024, + G_CONVERTER_INPUT_AT_END, &bytes_read, &pixdata_size, NULL); + g_assert (decomp_res == G_CONVERTER_FINISHED); + g_assert (bytes_read == gzipped_size); + g_free (gzipped_pixdata); + g_object_unref (decompress); + + /* 0: Pixbuf magic (0x47646b50) */ + g_assert (GST_READ_UINT32_BE (pixdata) == 0x47646b50); + + /* 4: length incl. header */ + /* 8: pixdata_type */ + /* 12: rowstride (900) */ + stride = GST_READ_UINT32_BE (pixdata + 12); + /* 16: width (225) */ + w = GST_READ_UINT32_BE (pixdata + 16); + /* 20: height (57) */ + h = GST_READ_UINT32_BE (pixdata + 20); + /* 24: pixel_data */ + GST_LOG ("%dx%d @ %d", w, h, stride); + /* we assume that the last line also has padding at the end */ + g_assert (pixdata_size - 24 >= h * stride); + + logo_pixels = gst_buffer_new_and_alloc (h * stride); + gst_buffer_fill (logo_pixels, 0, pixdata + 24, h * stride); + gst_buffer_add_video_meta (logo_pixels, GST_VIDEO_FRAME_FLAG_NONE, + GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, w, h); + + g_free (pixdata); + + return logo_pixels; +} + +static gboolean +bus_cb (GstBus * bus, GstMessage * msg, gpointer user_data) +{ + GMainLoop *loop = user_data; + + switch (GST_MESSAGE_TYPE (msg)) { + case GST_MESSAGE_ERROR:{ + GError *err = NULL; + gchar *dbg; + + gst_message_parse_error (msg, &err, &dbg); + gst_object_default_error (msg->src, err, dbg); + g_error_free (err); + g_free (dbg); + g_main_loop_quit (loop); + break; + } + default: + break; + } + return TRUE; +} + +#define SPEED_SCALE_FACTOR (VIDEO_FPS * 4) + +/* nicked from videotestsrc's ball pattern renderer */ +static void +calculate_position (gint * x, gint * y, guint logo_w, guint logo_h, guint n) +{ + guint r_x = logo_w / 2; + guint r_y = logo_h / 2; + guint w = VIDEO_WIDTH + logo_w; + guint h = VIDEO_HEIGHT + logo_h; + + *x = r_x + (0.5 + 0.5 * sin (2 * G_PI * n / SPEED_SCALE_FACTOR)) + * (w - 2 * r_x); + *y = r_y + (0.5 + 0.5 * sin (2 * G_PI * sqrt (2) * n / SPEED_SCALE_FACTOR)) + * (h - 2 * r_y); + + *x -= logo_w; + *y -= logo_h; +} + +static GstPadProbeReturn +buffer_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) +{ + GstVideoOverlayRectangle *rect; + GstVideoOverlayComposition *comp; + GstVideoFrame frame; + GstVideoMeta *vmeta; + GstVideoInfo vinfo; + GstCaps *caps; + gint x, y; + + caps = gst_pad_get_current_caps (pad); + gst_video_info_from_caps (&vinfo, caps); + gst_caps_unref (caps); + + info->data = gst_buffer_make_writable (info->data); + + vmeta = gst_buffer_get_video_meta (logo_buf); + + calculate_position (&x, &y, vmeta->width, vmeta->height, ++count); + + GST_LOG ("%3d, %3d", x, y); + + rect = gst_video_overlay_rectangle_new_raw (logo_buf, x, y, + vmeta->width, vmeta->height, GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE); + comp = gst_video_overlay_composition_new (rect); + gst_video_overlay_rectangle_unref (rect); + + gst_video_frame_map (&frame, &vinfo, info->data, GST_MAP_READWRITE); + + if (!gst_video_overlay_composition_blend (comp, &frame)) + g_warning ("Error blending overlay at position (%d,%d)", x, y); + + gst_video_frame_unmap (&frame); + + gst_video_overlay_composition_unref (comp); + + return GST_PAD_PROBE_OK; +} + +int +main (int argc, char **argv) +{ + GOptionEntry options[] = { + {NULL} + }; + GOptionContext *ctx; + GError *err = NULL; + GstElement *src, *q, *capsfilter, *sink; + GstElement *pipeline; + GstPad *src_pad; + GstCaps *filter_caps; + + ctx = g_option_context_new (""); + 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_print ("Error initializing: %s\n", err->message); + return 1; + } + g_option_context_free (ctx); + + logo_buf = create_overlay_buffer (); + + main_loop = g_main_loop_new (NULL, FALSE); + + pipeline = gst_pipeline_new ("pipeline"); + + src = gst_element_factory_make ("videotestsrc", NULL); + gst_util_set_object_arg (G_OBJECT (src), "pattern", "white"); + + src_pad = gst_element_get_static_pad (src, "src"); + gst_pad_add_probe (src_pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_cb, + main_loop, NULL); + gst_object_unref (src_pad); + + q = gst_element_factory_make ("queue", NULL); + + capsfilter = gst_element_factory_make ("capsfilter", NULL); + filter_caps = gst_caps_from_string ("video/x-raw, format = " + GST_VIDEO_OVERLAY_COMPOSITION_BLEND_FORMATS); + gst_caps_set_simple (filter_caps, + "width", G_TYPE_INT, VIDEO_WIDTH, + "height", G_TYPE_INT, VIDEO_HEIGHT, + "framerate", GST_TYPE_FRACTION, VIDEO_FPS, 1, NULL); + g_object_set (capsfilter, "caps", filter_caps, NULL); + gst_caps_unref (filter_caps); + + sink = gst_element_factory_make ("ximagesink", NULL); + + gst_bin_add_many (GST_BIN (pipeline), src, q, capsfilter, sink, NULL); + + gst_element_link_many (src, q, capsfilter, sink, NULL); + + count = 0; + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + gst_bus_add_watch (GST_ELEMENT_BUS (pipeline), bus_cb, main_loop); + + g_main_loop_run (main_loop); + + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); + gst_buffer_unref (logo_buf); + + return 0; +} diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/test-reverseplay.c gst-plugins-base1.0-1.6.1/tests/icles/test-reverseplay.c --- gst-plugins-base1.0-1.4.3/tests/icles/test-reverseplay.c 1970-01-01 00:00:00.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/test-reverseplay.c 2015-10-22 08:01:34.000000000 +0000 @@ -0,0 +1,373 @@ +/* Test example which plays a given file forward, then + * at EOS, plays the entire file in reverse + * and checks that reverse playback generates the same + * output as forward playback but reversed + */ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#include +#include + +typedef struct _PlayState PlayState; + +typedef struct _StreamTSRange +{ + GstClockTime start; + GstClockTime end; +} StreamTSRange; + +typedef struct _StreamInfo +{ + PlayState *state; + GstPad *pad; + + GstSegment seg; + + GArray *fwd_times; + GArray *bkwd_times; +} StreamInfo; + +struct _PlayState +{ + GstElement *pipe; + GMainLoop *loop; + gboolean fwd_play; + gint n_sinks; + + GMutex output_lock; +}; + +static void +warning_cb (GstBus * bus, GstMessage * msg, gpointer foo) +{ + GError *err = NULL; + gchar *dbg = NULL; + + gst_message_parse_warning (msg, &err, &dbg); + + g_printerr ("WARNING: %s (%s)\n", err->message, (dbg) ? dbg : "no details"); + + g_error_free (err); + g_free (dbg); +} + +static void +error_cb (GstBus * bus, GstMessage * msg, PlayState * state) +{ + GError *err = NULL; + gchar *dbg = NULL; + + gst_message_parse_error (msg, &err, &dbg); + + g_printerr ("ERROR: %s (%s)\n", err->message, (dbg) ? dbg : "no details"); + + g_main_loop_quit (state->loop); + + g_error_free (err); + g_free (dbg); +} + +static void +eos_cb (GstBus * bus, GstMessage * msg, PlayState * state) +{ + if (state->fwd_play) { + g_print ("EOS - finished forward play. Starting reverse\n"); + state->fwd_play = FALSE; + gst_element_seek (state->pipe, -1.0, GST_FORMAT_TIME, + GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH, + GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_END, 0); + + return; + } + g_print ("EOS - exiting\n"); + g_main_loop_quit (state->loop); +} + +static void +state_cb (GstBus * bus, GstMessage * msg, PlayState * state) +{ + if (msg->src == GST_OBJECT (state->pipe)) { + GstState old_state, new_state, pending_state; + + gst_message_parse_state_changed (msg, &old_state, &new_state, + &pending_state); + if (new_state == GST_STATE_PLAYING) + g_print ("Decoding ...\n"); + } +} + +static void +_destroy_stream_info (StreamInfo * si) +{ + g_array_free (si->fwd_times, TRUE); + g_array_free (si->bkwd_times, TRUE); + g_object_unref (si->pad); + g_free (si); +} + +static void +extend_times (StreamInfo * si, GstClockTime start, GstClockTime end) +{ + PlayState *state = si->state; + StreamTSRange *ts = NULL; + StreamTSRange tsn; + GArray *a; + guint i, n; + + /* Set up new entry, in case we need it */ + tsn.start = start; + tsn.end = end; + + if (state->fwd_play) { + a = si->fwd_times; + n = a->len; + /* if playing forward, see if this new time extends the last entry */ + i = n - 1; + } else { + a = si->bkwd_times; + n = a->len; + /* if playing backward, see if this new time extends the earliest entry */ + i = 0; + } + + if (n > 0) { + ts = &g_array_index (a, StreamTSRange, i); + if (start > ts->start) { + /* This entry is after the most recent entry */ + /* Tolerance of 1 millisecond allowed for imprecision */ + if (ts->end + GST_MSECOND >= start) { + GST_LOG ("%p extending entry %d to %" GST_TIME_FORMAT, + si, i, GST_TIME_ARGS (end)); + ts->end = end; + return; + } + + /* new start > ts->end, so this new entry goes after the first one */ + GST_LOG ("%p inserting new entry %d %" GST_TIME_FORMAT + " to %" GST_TIME_FORMAT, si, i + 1, GST_TIME_ARGS (start), + GST_TIME_ARGS (end)); + g_array_insert_val (a, i + 1, tsn); + return; + } else if (end + GST_MSECOND > ts->start) { + /* This entry precedes the current one, but overlaps it */ + GST_LOG ("%p pre-extending entry %d to %" GST_TIME_FORMAT, + si, i, GST_TIME_ARGS (start)); + ts->start = start; + return; + } + } else { + i = 0; + } + + /* otherwise insert a new entry before/at the start */ + GST_LOG ("%p New entry %d - %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT, + si, i, GST_TIME_ARGS (start), GST_TIME_ARGS (end)); + g_array_insert_val (a, i, tsn); +} + +static void +dump_times (StreamInfo * si) +{ + PlayState *state = si->state; + guint i; + GArray *a; + + g_mutex_lock (&state->output_lock); + if (state->fwd_play) + a = si->fwd_times; + else + a = si->bkwd_times; + + g_print ("Pad %s times:\n", GST_PAD_NAME (si->pad)); + for (i = 0; i < a->len; i++) { + StreamTSRange *ts = &g_array_index (a, StreamTSRange, i); + + g_print (" %u %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT "\n", + i, GST_TIME_ARGS (ts->start), GST_TIME_ARGS (ts->end)); + } + g_mutex_unlock (&state->output_lock); +} + +static GstPadProbeReturn +handle_output (GstPad * pad, GstPadProbeInfo * info, StreamInfo * si) +{ + GstClockTime start, end; + GstBuffer *buf; + + GST_LOG_OBJECT (pad, "Fired probe type 0x%x\n", info->type); + + if (info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST) { + g_warning ("Buffer list handling not implemented"); + return GST_PAD_PROBE_DROP; + } + + if (info->type & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) { + GstEvent *event = gst_pad_probe_info_get_event (info); + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEGMENT: + gst_event_copy_segment (event, &si->seg); + break; + case GST_EVENT_EOS: + dump_times (si); + break; + default: + break; + } + return GST_PAD_PROBE_PASS; + } + + buf = gst_pad_probe_info_get_buffer (info); + if (!GST_BUFFER_PTS_IS_VALID (buf)) + goto done; + end = start = GST_BUFFER_PTS (buf); + + if (GST_BUFFER_DURATION_IS_VALID (buf)) + end += GST_BUFFER_DURATION (buf); + + gst_segment_clip (&si->seg, GST_FORMAT_TIME, start, end, &start, &end); + start = gst_segment_to_stream_time (&si->seg, GST_FORMAT_TIME, start); + end = gst_segment_to_stream_time (&si->seg, GST_FORMAT_TIME, end); + + GST_DEBUG_OBJECT (pad, "new buffer %" GST_TIME_FORMAT + " to %" GST_TIME_FORMAT, GST_TIME_ARGS (start), GST_TIME_ARGS (end)); + + /* Now extend measured time range to include new times */ + extend_times (si, start, end); + +done: + return GST_PAD_PROBE_PASS; +} + +static void +pad_added_cb (GstElement * decodebin, GstPad * pad, PlayState * state) +{ + GstPadLinkReturn ret; + GstElement *fakesink; + GstPad *fakesink_pad; + StreamInfo *si; + + fakesink = gst_element_factory_make ("fakesink", NULL); +#if 0 + if (state->n_sinks == 1) + g_object_set (fakesink, "silent", FALSE, NULL); +#endif + + si = g_new0 (StreamInfo, 1); + si->pad = g_object_ref (pad); + si->state = state; + si->fwd_times = g_array_new (FALSE, TRUE, sizeof (StreamTSRange)); + si->bkwd_times = g_array_new (FALSE, TRUE, sizeof (StreamTSRange)); + + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM, + (GstPadProbeCallback) handle_output, si, (GDestroyNotify) + _destroy_stream_info); + + state->n_sinks++; + gst_bin_add (GST_BIN (state->pipe), fakesink); + + gst_element_sync_state_with_parent (fakesink); + + fakesink_pad = gst_element_get_static_pad (fakesink, "sink"); + + ret = gst_pad_link (pad, fakesink_pad); + if (!GST_PAD_LINK_SUCCESSFUL (ret)) { + g_printerr ("Failed to link %s:%s to %s:%s (ret = %d)\n", + GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (fakesink_pad), ret); + } else { + GstCaps *caps = gst_pad_get_current_caps (pad); + gchar *s = gst_caps_to_string (caps); + + g_print ("Linked %s:%s to %s:%s caps %s\n", GST_DEBUG_PAD_NAME (pad), + GST_DEBUG_PAD_NAME (fakesink_pad), s); + gst_caps_unref (caps); + g_free (s); + } + + gst_object_unref (fakesink_pad); +} + +gint +main (gint argc, gchar * argv[]) +{ + PlayState state; + GstElement *decoder; + GstStateChangeReturn res; + GstBus *bus; + + gst_init (&argc, &argv); + + if (argc != 2) { + g_printerr ("Decode file from start to end.\n"); + g_printerr ("Usage: %s URI\n\n", argv[0]); + return 1; + } + /* Start with zeroed-state */ + memset (&state, 0, sizeof (PlayState)); + + state.loop = g_main_loop_new (NULL, TRUE); + state.pipe = gst_pipeline_new ("pipeline"); + state.fwd_play = TRUE; + g_mutex_init (&state.output_lock); + + bus = gst_pipeline_get_bus (GST_PIPELINE (state.pipe)); + gst_bus_add_signal_watch (bus); + + g_signal_connect (bus, "message::eos", G_CALLBACK (eos_cb), &state); + g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), &state); + g_signal_connect (bus, "message::warning", G_CALLBACK (warning_cb), NULL); + g_signal_connect (bus, "message::state-changed", G_CALLBACK (state_cb), + &state); + +#if 0 + g_signal_connect (state.pipe, "deep-notify", + G_CALLBACK (gst_object_default_deep_notify), NULL); +#endif + + decoder = gst_element_factory_make ("uridecodebin", "decoder"); + g_assert (decoder); + gst_bin_add (GST_BIN (state.pipe), decoder); + + if (argv[1] && strstr (argv[1], "://") != NULL) { + g_object_set (G_OBJECT (decoder), "uri", argv[1], NULL); + } else if (argv[1]) { + gchar *uri = g_strdup_printf ("file://%s", argv[1]); + g_object_set (G_OBJECT (decoder), "uri", uri, NULL); + g_free (uri); + } else { + g_print ("Usage: %s \n", argv[0]); + return -1; + } + + g_signal_connect (decoder, "pad-added", G_CALLBACK (pad_added_cb), &state); + + res = gst_element_set_state (state.pipe, GST_STATE_PLAYING); + if (res == GST_STATE_CHANGE_FAILURE) { + g_print ("could not play\n"); + return -1; + } + + g_main_loop_run (state.loop); + + /* tidy up */ + gst_element_set_state (state.pipe, GST_STATE_NULL); + gst_object_unref (state.pipe); + gst_object_unref (bus); + + return 0; +} diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/test-textoverlay.c gst-plugins-base1.0-1.6.1/tests/icles/test-textoverlay.c --- gst-plugins-base1.0-1.4.3/tests/icles/test-textoverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/test-textoverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -106,6 +106,7 @@ } } + gst_object_unref (toverlay); g_free (pstr); } diff -Nru gst-plugins-base1.0-1.4.3/tests/icles/test-videooverlay.c gst-plugins-base1.0-1.6.1/tests/icles/test-videooverlay.c --- gst-plugins-base1.0-1.4.3/tests/icles/test-videooverlay.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/icles/test-videooverlay.c 2015-10-22 08:01:34.000000000 +0000 @@ -22,8 +22,8 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex - * with newer GTK versions (>= 3.3.0) */ +/* Disable deprecation warnings because we need to use + * gtk_widget_set_double_buffered () or display will flicker */ #define GDK_DISABLE_DEPRECATION_WARNINGS #include @@ -97,15 +97,17 @@ handle_draw_cb (GtkWidget * widget, cairo_t * cr, gpointer user_data) { GstVideoRectangle *r = &anim_state.rect; - GtkStyle *style; + GtkStyleContext *style; + GdkRGBA color; int width, height; width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); - style = gtk_widget_get_style (widget); + style = gtk_widget_get_style_context (widget); - gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]); + gtk_style_context_get_color (style, 0, &color); + gdk_cairo_set_source_rgba (cr, &color); /* we should only redraw outside of the video rect! */ cairo_rectangle (cr, 0, 0, r->x, height); diff -Nru gst-plugins-base1.0-1.4.3/tests/Makefile.in gst-plugins-base1.0-1.6.1/tests/Makefile.in --- gst-plugins-base1.0-1.4.3/tests/Makefile.in 2014-09-24 08:16:04.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tests/Makefile.in 2015-10-30 14:20:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,17 @@ @SET_MAKE@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -79,7 +89,6 @@ host_triplet = @host@ target_triplet = @target@ subdir = tests -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -100,7 +109,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -117,6 +125,7 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -175,6 +184,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -260,6 +270,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -289,6 +301,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -316,7 +330,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -331,6 +344,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -420,13 +434,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -479,6 +492,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -523,7 +537,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -818,6 +831,8 @@ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am +.PRECIOUS: Makefile + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/tools/gst-device-monitor.c gst-plugins-base1.0-1.6.1/tools/gst-device-monitor.c --- gst-plugins-base1.0-1.4.3/tools/gst-device-monitor.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/gst-device-monitor.c 2015-10-22 08:01:34.000000000 +0000 @@ -42,11 +42,23 @@ static gboolean bus_msg_handler (GstBus * bus, GstMessage * msg, gpointer data); +static gboolean +print_structure_field (GQuark field_id, const GValue * value, + gpointer user_data) +{ + if (G_VALUE_HOLDS_STRING (value)) + g_print ("\n\t\t%s = %s", g_quark_to_string (field_id), + g_value_get_string (value)); + + return TRUE; +} + static void device_added (GstDevice * device) { - gchar *device_class, *caps_str, *name; + gchar *device_class, *str, *name; GstCaps *caps; + GstStructure *props; guint i, size = 0; caps = gst_device_get_caps (device); @@ -55,17 +67,23 @@ name = gst_device_get_display_name (device); device_class = gst_device_get_device_class (device); + props = gst_device_get_properties (device); g_print ("\nDevice found:\n\n"); g_print ("\tname : %s\n", name); g_print ("\tclass : %s\n", device_class); for (i = 0; i < size; ++i) { GstStructure *s = gst_caps_get_structure (caps, i); - caps_str = gst_structure_to_string (s); - g_print ("\t%s %s\n", (i == 0) ? "caps :" : " ", caps_str); - g_free (caps_str); + str = gst_structure_to_string (s); + g_print ("\t%s %s\n", (i == 0) ? "caps :" : " ", str); + g_free (str); + } + if (props) { + g_print ("\tproperties:"); + gst_structure_foreach (props, print_structure_field, NULL); + gst_structure_free (props); + g_print ("\n"); } - g_print ("\n"); g_free (name); diff -Nru gst-plugins-base1.0-1.4.3/tools/gst-discoverer.c gst-plugins-base1.0-1.6.1/tools/gst-discoverer.c --- gst-plugins-base1.0-1.4.3/tools/gst-discoverer.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/gst-discoverer.c 2015-10-22 08:01:34.000000000 +0000 @@ -28,6 +28,8 @@ #include #include +#define MAX_INDENT 40 + /* *INDENT-OFF* */ static void my_g_string_append_printf (GString * str, int depth, const gchar * format, ...) G_GNUC_PRINTF (3, 4); /* *INDENT-ON* */ @@ -59,7 +61,7 @@ static void gst_stream_information_to_string (GstDiscovererStreamInfo * info, GString * s, - gint depth) + guint depth) { gchar *tmp; GstCaps *caps; @@ -85,13 +87,69 @@ gst_discoverer_stream_info_get_stream_id (info)); } +static void +print_tag_foreach (const GstTagList * tags, const gchar * tag, + gpointer user_data) +{ + GValue val = { 0, }; + gchar *str; + guint depth = GPOINTER_TO_UINT (user_data); + + if (!gst_tag_list_copy_value (&val, tags, tag)) + return; + + if (G_VALUE_HOLDS_STRING (&val)) { + str = g_value_dup_string (&val); + } else if (G_VALUE_TYPE (&val) == GST_TYPE_SAMPLE) { + GstSample *sample = gst_value_get_sample (&val); + GstBuffer *img = gst_sample_get_buffer (sample); + GstCaps *caps = gst_sample_get_caps (sample); + + if (img) { + if (caps) { + gchar *caps_str; + + caps_str = gst_caps_to_string (caps); + str = g_strdup_printf ("buffer of %" G_GSIZE_FORMAT " bytes, " + "type: %s", gst_buffer_get_size (img), caps_str); + g_free (caps_str); + } else { + str = g_strdup_printf ("buffer of %" G_GSIZE_FORMAT " bytes", + gst_buffer_get_size (img)); + } + } else { + str = g_strdup ("NULL buffer"); + } + } else { + str = gst_value_serialize (&val); + } + + g_print ("%*s%s: %s\n", 2 * depth, " ", gst_tag_get_nick (tag), str); + g_free (str); + + g_value_unset (&val); +} + +static void +print_tags_topology (guint depth, const GstTagList * tags) +{ + g_print ("%*sTags:\n", 2 * depth, " "); + if (tags) { + gst_tag_list_foreach (tags, print_tag_foreach, + GUINT_TO_POINTER (depth + 1)); + } else { + g_print ("%*sNone\n", 2 * (depth + 1), " "); + } + if (verbose) + g_print ("%*s\n", 2 * depth, " "); +} + static gchar * gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info, - gint depth) + guint depth) { GstDiscovererAudioInfo *audio_info; GString *s; - gchar *tmp; const gchar *ctmp; int len = 400; const GstTagList *tags; @@ -118,28 +176,18 @@ my_g_string_append_printf (s, depth, "Max bitrate: %u\n", gst_discoverer_audio_info_get_max_bitrate (audio_info)); - my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); - if (tags) { - tmp = gst_tag_list_to_string (tags); - my_g_string_append_printf (s, depth, " %s\n", tmp); - g_free (tmp); - } else { - my_g_string_append_printf (s, depth, " None\n"); - } - if (verbose) - my_g_string_append_printf (s, depth, "\n"); + print_tags_topology (depth, tags); return g_string_free (s, FALSE); } static gchar * gst_stream_video_information_to_string (GstDiscovererStreamInfo * info, - gint depth) + guint depth) { GstDiscovererVideoInfo *video_info; GString *s; - gchar *tmp; int len = 500; const GstTagList *tags; @@ -173,28 +221,18 @@ my_g_string_append_printf (s, depth, "Max bitrate: %u\n", gst_discoverer_video_info_get_max_bitrate (video_info)); - my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); - if (tags) { - tmp = gst_tag_list_to_string (tags); - my_g_string_append_printf (s, depth, " %s\n", tmp); - g_free (tmp); - } else { - my_g_string_append_printf (s, depth, " None\n"); - } - if (verbose) - my_g_string_append_printf (s, depth, "\n"); + print_tags_topology (depth, tags); return g_string_free (s, FALSE); } static gchar * gst_stream_subtitle_information_to_string (GstDiscovererStreamInfo * info, - gint depth) + guint depth) { GstDiscovererSubtitleInfo *subtitle_info; GString *s; - gchar *tmp; const gchar *ctmp; int len = 400; const GstTagList *tags; @@ -210,17 +248,8 @@ my_g_string_append_printf (s, depth, "Language: %s\n", ctmp ? ctmp : ""); - my_g_string_append_printf (s, depth, "Tags:\n"); tags = gst_discoverer_stream_info_get_tags (info); - if (tags) { - tmp = gst_tag_list_to_string (tags); - my_g_string_append_printf (s, depth, " %s\n", tmp); - g_free (tmp); - } else { - my_g_string_append_printf (s, depth, " None\n"); - } - if (verbose) - my_g_string_append_printf (s, depth, "\n"); + print_tags_topology (depth, tags); return g_string_free (s, FALSE); } @@ -270,7 +299,7 @@ } static void -print_topology (GstDiscovererStreamInfo * info, gint depth) +print_topology (GstDiscovererStreamInfo * info, guint depth) { GstDiscovererStreamInfo *next; @@ -298,33 +327,10 @@ } static void -print_tag_foreach (const GstTagList * tags, const gchar * tag, - gpointer user_data) -{ - GValue val = { 0, }; - gchar *str; - gint depth = GPOINTER_TO_INT (user_data); - - gst_tag_list_copy_value (&val, tags, tag); - - if (G_VALUE_HOLDS_STRING (&val)) - str = g_value_dup_string (&val); - else - str = gst_value_serialize (&val); - - g_print ("%*s%s: %s\n", 2 * depth, " ", gst_tag_get_nick (tag), str); - g_free (str); - - g_value_unset (&val); -} - -#define MAX_INDENT 40 - -static void print_toc_entry (gpointer data, gpointer user_data) { GstTocEntry *entry = (GstTocEntry *) data; - gint depth = GPOINTER_TO_INT (user_data); + guint depth = GPOINTER_TO_UINT (user_data); guint indent = MIN (GPOINTER_TO_UINT (user_data), MAX_INDENT); GstTagList *tags; GList *subentries; @@ -375,9 +381,16 @@ static void print_info (GstDiscovererInfo * info, GError * err) { - GstDiscovererResult result = gst_discoverer_info_get_result (info); + GstDiscovererResult result; GstDiscovererStreamInfo *sinfo; + if (!info) { + g_print ("Could not discover URI\n"); + g_print (" %s\n", err->message); + return; + } + + result = gst_discoverer_info_get_result (info); g_print ("Done discovering %s\n", gst_discoverer_info_get_uri (info)); switch (result) { case GST_DISCOVERER_OK: @@ -481,7 +494,7 @@ uri = g_strdup (filename); } - if (async == FALSE) { + if (!async) { g_print ("Analyzing %s\n", uri); info = gst_discoverer_discover_uri (dc, uri, &err); print_info (info, err); @@ -549,6 +562,8 @@ if (!g_option_context_parse (ctx, &argc, &argv, &err)) { g_print ("Error initializing: %s\n", err->message); + g_option_context_free (ctx); + g_clear_error (&err); exit (1); } @@ -562,10 +577,11 @@ dc = gst_discoverer_new (timeout * GST_SECOND, &err); if (G_UNLIKELY (dc == NULL)) { g_print ("Error initializing: %s\n", err->message); + g_clear_error (&err); exit (1); } - if (async == FALSE) { + if (!async) { gint i; for (i = 1; i < argc; i++) process_file (dc, argv[i]); diff -Nru gst-plugins-base1.0-1.4.3/tools/gst-play-1.0.1 gst-plugins-base1.0-1.6.1/tools/gst-play-1.0.1 --- gst-plugins-base1.0-1.4.3/tools/gst-play-1.0.1 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/gst-play-1.0.1 2015-10-22 08:01:34.000000000 +0000 @@ -32,8 +32,8 @@ .B \-\-shuffle Shuffle playlist (play files in random order) .TP 8 -.B \-\-interactive -Enable control through keyboard interaction in terminal (see below) +.B \-\-no-interactive +Disable control through keyboard interaction in terminal (see below) .TP 8 .B \-\-gapless Enable gapless playback @@ -50,6 +50,24 @@ .B ARROW LEFT/RIGHT Seek back/forward .TP 8 +.B +/- +Increase/decrease playback rate +.TP 8 +.B d +Reverse playback direction +.TP 8 +.B t +Cycle through trick modes +.TP 8 +.B a +Switch audio track +.TP 8 +.B s +Switch subtitle track +.TP 8 +.B v +Switch video track +.TP 8 .B > Skip to next item in playlist .TP 8 diff -Nru gst-plugins-base1.0-1.4.3/tools/gst-play.c gst-plugins-base1.0-1.6.1/tools/gst-play.c --- gst-plugins-base1.0-1.4.3/tools/gst-play.c 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/gst-play.c 2015-10-22 08:01:34.000000000 +0000 @@ -2,6 +2,7 @@ * * Copyright (C) 2013-2014 Tim-Philipp Müller * Copyright (C) 2013 Collabora Ltd. + * Copyright (C) 2015 Centricular Ltd * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -28,12 +29,16 @@ #include #include #include +#include #include +#include #include #include #include #include +#include + #include "gst-play-kb.h" #define VOLUME_STEPS 20 @@ -41,6 +46,24 @@ GST_DEBUG_CATEGORY (play_debug); #define GST_CAT_DEFAULT play_debug +typedef enum +{ + GST_PLAY_TRICK_MODE_NONE = 0, + GST_PLAY_TRICK_MODE_DEFAULT, + GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO, + GST_PLAY_TRICK_MODE_KEY_UNITS, + GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO, + GST_PLAY_TRICK_MODE_LAST +} GstPlayTrickMode; + +typedef enum +{ + GST_PLAY_TRACK_TYPE_INVALID = 0, + GST_PLAY_TRACK_TYPE_AUDIO, + GST_PLAY_TRACK_TYPE_VIDEO, + GST_PLAY_TRACK_TYPE_SUBTITLE +} GstPlayTrackType; + typedef struct { gchar **uris; @@ -63,8 +86,13 @@ /* configuration */ gboolean gapless; + + GstPlayTrickMode trick_mode; + gdouble rate; } GstPlay; +static gboolean quiet = FALSE; + static gboolean play_bus_msg (GstBus * bus, GstMessage * msg, gpointer data); static gboolean play_next (GstPlay * play); static gboolean play_prev (GstPlay * play); @@ -72,21 +100,58 @@ static void play_about_to_finish (GstElement * playbin, gpointer user_data); static void play_reset (GstPlay * play); static void play_set_relative_volume (GstPlay * play, gdouble volume_step); +static gboolean play_do_seek (GstPlay * play, gint64 pos, gdouble rate, + GstPlayTrickMode mode); + +/* *INDENT-OFF* */ +static void gst_play_printf (const gchar * format, ...) G_GNUC_PRINTF (1, 2); +/* *INDENT-ON* */ + +static void keyboard_cb (const gchar * key_input, gpointer user_data); +static void relative_seek (GstPlay * play, gdouble percent); + +static void +gst_play_printf (const gchar * format, ...) +{ + gchar *str = NULL; + va_list args; + int len; + + if (quiet) + return; + + va_start (args, format); + + len = g_vasprintf (&str, format, args); + + va_end (args); + + if (len > 0 && str != NULL) + g_print ("%s", str); + + g_free (str); +} + +#define g_print gst_play_printf static GstPlay * play_new (gchar ** uris, const gchar * audio_sink, const gchar * video_sink, gboolean gapless, gdouble initial_volume) { - GstElement *sink; + GstElement *sink, *playbin; GstPlay *play; + playbin = gst_element_factory_make ("playbin", "playbin"); + if (playbin == NULL) + return NULL; + play = g_new0 (GstPlay, 1); play->uris = uris; play->num_uris = g_strv_length (uris); play->cur_idx = -1; - play->playbin = gst_element_factory_make ("playbin", "playbin"); + play->playbin = playbin; if (audio_sink != NULL) { if (strchr (audio_sink, ' ') != NULL) @@ -131,7 +196,11 @@ G_CALLBACK (play_about_to_finish), play); } - play_set_relative_volume (play, initial_volume - 1.0); + if (initial_volume != -1) + play_set_relative_volume (play, initial_volume - 1.0); + + play->rate = 1.0; + play->trick_mode = GST_PLAY_TRICK_MODE_NONE; return play; } @@ -177,7 +246,8 @@ gst_stream_volume_set_volume (GST_STREAM_VOLUME (play->playbin), GST_STREAM_VOLUME_FORMAT_CUBIC, volume); - g_print ("Volume: %.0f%% \n", volume * 100); + g_print (_("Volume: %.0f%%"), volume * 100); + g_print (" \n"); } /* returns TRUE if something was installed and we should restart playback */ @@ -266,7 +336,7 @@ g_print ("\n"); /* and switch to next item in list */ if (!play_next (play)) { - g_print ("Reached end of play list.\n"); + g_print ("%s\n", _("Reached end of play list.")); g_main_loop_quit (play->loop); } break; @@ -312,11 +382,68 @@ } /* try next item in list then */ if (!play_next (play)) { - g_print ("Reached end of play list.\n"); + g_print ("%s\n", _("Reached end of play list.")); g_main_loop_quit (play->loop); } break; } + case GST_MESSAGE_ELEMENT: + { + GstNavigationMessageType mtype = gst_navigation_message_get_type (msg); + if (mtype == GST_NAVIGATION_MESSAGE_EVENT) { + GstEvent *ev = NULL; + + if (gst_navigation_message_parse_event (msg, &ev)) { + GstNavigationEventType e_type = gst_navigation_event_get_type (ev); + switch (e_type) { + case GST_NAVIGATION_EVENT_KEY_PRESS: + { + const gchar *key; + + if (gst_navigation_event_parse_key_event (ev, &key)) { + GST_INFO ("Key press: %s", key); + + if (strcmp (key, "Left") == 0) + key = GST_PLAY_KB_ARROW_LEFT; + else if (strcmp (key, "Right") == 0) + key = GST_PLAY_KB_ARROW_RIGHT; + else if (strcmp (key, "Up") == 0) + key = GST_PLAY_KB_ARROW_UP; + else if (strcmp (key, "Down") == 0) + key = GST_PLAY_KB_ARROW_DOWN; + else if (strcmp (key, "space") == 0) + key = " "; + else if (strlen (key) > 1) + break; + + keyboard_cb (key, user_data); + } + break; + } + case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: + { + gint button; + if (gst_navigation_event_parse_mouse_button_event (ev, &button, + NULL, NULL)) { + if (button == 4) { + /* wheel up */ + relative_seek (play, +0.08); + } else if (button == 5) { + /* wheel down */ + relative_seek (play, -0.01); + } + } + break; + } + default: + break; + } + } + if (ev) + gst_event_unref (ev); + } + break; + } default: if (gst_is_missing_plugin_message (msg)) { gchar *desc; @@ -337,7 +464,8 @@ { GstPlay *play = user_data; gint64 pos = -1, dur = -1; - gchar status[64] = { 0, }; + const gchar *paused = _("Paused"); + gchar *status; if (play->buffering) return TRUE; @@ -345,10 +473,14 @@ gst_element_query_position (play->playbin, GST_FORMAT_TIME, &pos); gst_element_query_duration (play->playbin, GST_FORMAT_TIME, &dur); - if (play->desired_state == GST_STATE_PAUSED) - g_snprintf (status, sizeof (status), "Paused"); - else - memset (status, ' ', sizeof (status) - 1); + if (play->desired_state == GST_STATE_PAUSED) { + status = (gchar *) paused; + } else { + gint len = g_utf8_strlen (paused, -1); + status = g_newa (gchar, len + 1); + memset (status, ' ', len); + status[len] = '\0'; + } if (pos >= 0 && dur > 0) { gchar dstr[32], pstr[32]; @@ -384,20 +516,18 @@ static void play_uri (GstPlay * play, const gchar * next_uri) { - GstStateChangeReturn sret; gchar *loc; gst_element_set_state (play->playbin, GST_STATE_READY); play_reset (play); loc = play_uri_get_display_name (play, next_uri); - g_print ("Now playing %s\n", loc); + g_print (_("Now playing %s\n"), loc); g_free (loc); g_object_set (play->playbin, "uri", next_uri, NULL); - sret = gst_element_set_state (play->playbin, GST_STATE_PAUSED); - switch (sret) { + switch (gst_element_set_state (play->playbin, GST_STATE_PAUSED)) { case GST_STATE_CHANGE_FAILURE: /* ignore, we should get an error message posted on the bus */ break; @@ -411,8 +541,9 @@ default: break; } + if (play->desired_state != GST_STATE_PAUSED) - sret = gst_element_set_state (play->playbin, play->desired_state); + gst_element_set_state (play->playbin, play->desired_state); } /* returns FALSE if we have reached the end of the playlist */ @@ -454,7 +585,8 @@ next_uri = play->uris[next_idx]; loc = play_uri_get_display_name (play, next_uri); - g_print ("About to finish, preparing next title: %s\n", loc); + g_print (_("About to finish, preparing next title: %s"), loc); + g_print ("\n"); g_free (loc); g_object_set (play->playbin, "uri", next_uri, NULL); @@ -476,6 +608,21 @@ g_main_loop_run (play->loop); } +static gint +compare (gconstpointer a, gconstpointer b) +{ + gchar *a1, *b1; + gint ret; + + a1 = g_utf8_collate_key_for_filename ((gchar *) a, -1); + b1 = g_utf8_collate_key_for_filename ((gchar *) b, -1); + ret = strcmp (a1, b1); + g_free (a1); + g_free (b1); + + return ret; +} + static void add_to_playlist (GPtrArray * playlist, const gchar * filename) { @@ -489,17 +636,24 @@ if ((dir = g_dir_open (filename, 0, NULL))) { const gchar *entry; + GList *l, *files = NULL; - /* FIXME: sort entries for each directory? */ while ((entry = g_dir_read_name (dir))) { gchar *path; - path = g_strconcat (filename, G_DIR_SEPARATOR_S, entry, NULL); - add_to_playlist (playlist, path); - g_free (path); + path = g_build_filename (filename, entry, NULL); + files = g_list_insert_sorted (files, path, compare); } g_dir_close (dir); + + for (l = files; l != NULL; l = l->next) { + gchar *path = (gchar *) l->data; + + add_to_playlist (playlist, path); + g_free (path); + } + g_list_free (files); return; } @@ -554,7 +708,7 @@ { GstQuery *query; gboolean seekable = FALSE; - gint64 dur = -1, pos = -1; + gint64 dur = -1, pos = -1, step; g_return_if_fail (percent >= -1.0 && percent <= 1.0); @@ -573,18 +727,21 @@ if (!seekable || dur <= 0) goto seek_failed; - pos = pos + dur * percent; + step = dur * percent; + if (ABS (step) < GST_SECOND) + step = (percent < 0) ? -GST_SECOND : GST_SECOND; + + pos = pos + step; if (pos > dur) { if (!play_next (play)) { - g_print ("\nReached end of play list.\n"); + g_print ("\n%s\n", _("Reached end of play list.")); g_main_loop_quit (play->loop); } } else { if (pos < 0) pos = 0; - if (!gst_element_seek_simple (play->playbin, GST_FORMAT_TIME, - GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, pos)) - goto seek_failed; + + play_do_seek (play, pos, play->rate, play->trick_mode); } return; @@ -595,12 +752,261 @@ } } +static gboolean +play_set_rate_and_trick_mode (GstPlay * play, gdouble rate, + GstPlayTrickMode mode) +{ + gint64 pos = -1; + + g_return_val_if_fail (rate != 0, FALSE); + + if (!gst_element_query_position (play->playbin, GST_FORMAT_TIME, &pos)) + return FALSE; + + return play_do_seek (play, pos, rate, mode); +} + +static gboolean +play_do_seek (GstPlay * play, gint64 pos, gdouble rate, GstPlayTrickMode mode) +{ + GstSeekFlags seek_flags; + GstQuery *query; + GstEvent *seek; + gboolean seekable = FALSE; + + query = gst_query_new_seeking (GST_FORMAT_TIME); + if (!gst_element_query (play->playbin, query)) { + gst_query_unref (query); + return FALSE; + } + + gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); + gst_query_unref (query); + + if (!seekable) + return FALSE; + + seek_flags = GST_SEEK_FLAG_FLUSH; + + switch (mode) { + case GST_PLAY_TRICK_MODE_DEFAULT: + seek_flags |= GST_SEEK_FLAG_TRICKMODE; + break; + case GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO: + seek_flags |= GST_SEEK_FLAG_TRICKMODE | GST_SEEK_FLAG_TRICKMODE_NO_AUDIO; + break; + case GST_PLAY_TRICK_MODE_KEY_UNITS: + seek_flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS; + break; + case GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO: + seek_flags |= + GST_SEEK_FLAG_TRICKMODE_KEY_UNITS | GST_SEEK_FLAG_TRICKMODE_NO_AUDIO; + break; + case GST_PLAY_TRICK_MODE_NONE: + default: + break; + } + + if (rate >= 0) + seek = gst_event_new_seek (rate, GST_FORMAT_TIME, + seek_flags | GST_SEEK_FLAG_ACCURATE, + /* start */ GST_SEEK_TYPE_SET, pos, + /* stop */ GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE); + else + seek = gst_event_new_seek (rate, GST_FORMAT_TIME, + seek_flags | GST_SEEK_FLAG_ACCURATE, + /* start */ GST_SEEK_TYPE_SET, 0, + /* stop */ GST_SEEK_TYPE_SET, pos); + + if (!gst_element_send_event (play->playbin, seek)) + return FALSE; + + play->rate = rate; + play->trick_mode = mode; + return TRUE; +} + +static void +play_set_playback_rate (GstPlay * play, gdouble rate) +{ + if (play_set_rate_and_trick_mode (play, rate, play->trick_mode)) { + g_print (_("Playback rate: %.2f"), rate); + g_print (" \n"); + } else { + g_print ("\n"); + g_print (_("Could not change playback rate to %.2f"), rate); + g_print (".\n"); + } +} + +static void +play_set_relative_playback_rate (GstPlay * play, gdouble rate_step, + gboolean reverse_direction) +{ + gdouble new_rate = play->rate + rate_step; + + if (reverse_direction) + new_rate *= -1.0; + + play_set_playback_rate (play, new_rate); +} + +static const gchar * +trick_mode_get_description (GstPlayTrickMode mode) +{ + switch (mode) { + case GST_PLAY_TRICK_MODE_NONE: + return "normal playback, trick modes disabled"; + case GST_PLAY_TRICK_MODE_DEFAULT: + return "trick mode: default"; + case GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO: + return "trick mode: default, no audio"; + case GST_PLAY_TRICK_MODE_KEY_UNITS: + return "trick mode: key frames only"; + case GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO: + return "trick mode: key frames only, no audio"; + default: + break; + } + return "unknown trick mode"; +} + +static void +play_switch_trick_mode (GstPlay * play) +{ + GstPlayTrickMode new_mode = ++play->trick_mode; + const gchar *mode_desc; + + if (new_mode == GST_PLAY_TRICK_MODE_LAST) + new_mode = GST_PLAY_TRICK_MODE_NONE; + + mode_desc = trick_mode_get_description (new_mode); + + if (play_set_rate_and_trick_mode (play, play->rate, new_mode)) { + g_print ("Rate: %.2f (%s) \n", play->rate, mode_desc); + } else { + g_print ("\nCould not change trick mode to %s.\n", mode_desc); + } +} + +static void +play_cycle_track_selection (GstPlay * play, GstPlayTrackType track_type) +{ + const gchar *prop_cur, *prop_n, *prop_get, *name; + gint cur = -1, n = -1; + + switch (track_type) { + case GST_PLAY_TRACK_TYPE_AUDIO: + prop_get = "get-audio-tags"; + prop_cur = "current-audio"; + prop_n = "n-audio"; + name = "audio"; + break; + case GST_PLAY_TRACK_TYPE_VIDEO: + prop_get = "get-video-tags"; + prop_cur = "current-video"; + prop_n = "n-video"; + name = "video"; + break; + case GST_PLAY_TRACK_TYPE_SUBTITLE: + prop_get = "get-text-tags"; + prop_cur = "current-text"; + prop_n = "n-text"; + name = "subtitle"; + break; + default: + return; + } + + g_object_get (play->playbin, prop_cur, &cur, prop_n, &n, NULL); + + if (n < 1) { + g_print ("No %s tracks.\n", name); + } else if (n == 1) { + g_print ("No other %s tracks to switch to.\n", name); + } else { + gchar *lcode = NULL, *lname = NULL; + const gchar *lang = NULL; + GstTagList *tags = NULL; + + cur = (cur + 1) % n; + g_signal_emit_by_name (play->playbin, prop_get, cur, &tags); + if (tags != NULL) { + if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lcode)) + lang = gst_tag_get_language_name (lcode); + else if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_NAME, &lname)) + lang = lname; + gst_tag_list_unref (tags); + } + if (lang != NULL) + g_print ("Switching to %s track %d of %d (%s).\n", name, cur + 1, n, + lang); + else + g_print ("Switching to %s track %d of %d.\n", name, cur + 1, n); + g_object_set (play->playbin, prop_cur, cur, NULL); + g_free (lcode); + g_free (lname); + } +} + +static void +print_keyboard_help (void) +{ + static struct + { + const gchar *key_desc; + const gchar *key_help; + } key_controls[] = { + { + N_("space"), N_("pause/unpause")}, { + N_("q or ESC"), N_("quit")}, { + ">", N_("play next")}, { + "<", N_("play previous")}, { + "\342\206\222", N_("seek forward")}, { + "\342\206\220", N_("seek backward")}, { + "\342\206\221", N_("volume up")}, { + "\342\206\223", N_("volume down")}, { + "+", N_("increase playback rate")}, { + "-", N_("decrease playback rate")}, { + "d", N_("change playback direction")}, { + "t", N_("enable/disable trick modes")}, { + "a", N_("change audio track")}, { + "v", N_("change video track")}, { + "s", N_("change subtitle track")}, { + "k", N_("show keyboard shortcuts")},}; + guint i, chars_to_pad, desc_len, max_desc_len = 0; + + g_print ("\n\n%s\n\n", _("Interactive mode - keyboard controls:")); + + for (i = 0; i < G_N_ELEMENTS (key_controls); ++i) { + desc_len = g_utf8_strlen (key_controls[i].key_desc, -1); + max_desc_len = MAX (max_desc_len, desc_len); + } + ++max_desc_len; + + for (i = 0; i < G_N_ELEMENTS (key_controls); ++i) { + chars_to_pad = max_desc_len - g_utf8_strlen (key_controls[i].key_desc, -1); + g_print ("\t%s", key_controls[i].key_desc); + g_print ("%-*s: ", chars_to_pad, ""); + g_print ("%s\n", key_controls[i].key_help); + } + g_print ("\n"); +} + static void keyboard_cb (const gchar * key_input, gpointer user_data) { GstPlay *play = (GstPlay *) user_data; + gchar key = '\0'; - switch (g_ascii_tolower (key_input[0])) { + /* only want to switch/case on single char, not first char of string */ + if (key_input[0] != '\0' && key_input[1] == '\0') + key = g_ascii_tolower (key_input[0]); + + switch (key) { + case 'k': + print_keyboard_help (); + break; case ' ': toggle_paused (play); break; @@ -610,18 +1016,53 @@ break; case '>': if (!play_next (play)) { - g_print ("\nReached end of play list.\n"); + g_print ("\n%s\n", _("Reached end of play list.")); g_main_loop_quit (play->loop); } break; case '<': play_prev (play); break; + case '+': + if (play->rate > -0.2 && play->rate < 0.0) + play_set_relative_playback_rate (play, 0.0, TRUE); + else if (ABS (play->rate) < 2.0) + play_set_relative_playback_rate (play, 0.1, FALSE); + else if (ABS (play->rate) < 4.0) + play_set_relative_playback_rate (play, 0.5, FALSE); + else + play_set_relative_playback_rate (play, 1.0, FALSE); + break; + case '-': + if (play->rate > 0.0 && play->rate < 0.20) + play_set_relative_playback_rate (play, 0.0, TRUE); + else if (ABS (play->rate) <= 2.0) + play_set_relative_playback_rate (play, -0.1, FALSE); + else if (ABS (play->rate) <= 4.0) + play_set_relative_playback_rate (play, -0.5, FALSE); + else + play_set_relative_playback_rate (play, -1.0, FALSE); + break; + case 'd': + play_set_relative_playback_rate (play, 0.0, TRUE); + break; + case 't': + play_switch_trick_mode (play); + break; case 27: /* ESC */ if (key_input[1] == '\0') { g_main_loop_quit (play->loop); break; } + case 'a': + play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_AUDIO); + break; + case 'v': + play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_VIDEO); + break; + case 's': + play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_SUBTITLE); + break; /* fall through */ default: if (strcmp (key_input, GST_PLAY_KB_ARROW_RIGHT) == 0) { @@ -647,10 +1088,10 @@ GstPlay *play; GPtrArray *playlist; gboolean print_version = FALSE; - gboolean interactive = FALSE; /* FIXME: maybe enable by default? */ + gboolean interactive = TRUE; gboolean gapless = FALSE; gboolean shuffle = FALSE; - gdouble volume = 1.0; + gdouble volume = -1; gchar **filenames = NULL; gchar *audio_sink = NULL; gchar *video_sink = NULL; @@ -670,12 +1111,15 @@ N_("Enable gapless playback"), NULL}, {"shuffle", 0, 0, G_OPTION_ARG_NONE, &shuffle, N_("Shuffle playlist"), NULL}, - {"interactive", 0, 0, G_OPTION_ARG_NONE, &interactive, - N_("Interactive control via keyboard"), NULL}, + {"no-interactive", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, + &interactive, + N_("Disable interactive control via the keyboard"), NULL}, {"volume", 0, 0, G_OPTION_ARG_DOUBLE, &volume, N_("Volume"), NULL}, {"playlist", 0, 0, G_OPTION_ARG_FILENAME, &playlist_file, N_("Playlist file containing input media files"), NULL}, + {"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, + N_("Do not print any output (apart from errors)"), NULL}, {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, NULL}, {NULL} }; @@ -779,8 +1223,15 @@ /* prepare */ play = play_new (uris, audio_sink, video_sink, gapless, volume); + if (play == NULL) { + g_printerr + ("Failed to create 'playbin' element. Check your GStreamer installation.\n"); + return EXIT_FAILURE; + } + if (interactive) { if (gst_play_kb_set_key_handler (keyboard_cb, play)) { + g_print (_("Press 'k' to see a list of keyboard shortcuts.\n")); atexit (restore_terminal); } else { g_print ("Interactive keyboard handling in terminal not available.\n"); diff -Nru gst-plugins-base1.0-1.4.3/tools/Makefile.am gst-plugins-base1.0-1.6.1/tools/Makefile.am --- gst-plugins-base1.0-1.4.3/tools/Makefile.am 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/Makefile.am 2015-10-22 08:01:34.000000000 +0000 @@ -28,14 +28,3 @@ $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) - -Android.mk: Makefile.am - androgenizer -:PROJECT gst-discoverer-@GST_API_VERSION@ \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:EXECUTABLE gst-discoverer-@GST_API_VERSION@ -:TAGS eng debug \ - -:SOURCES $(gst_discoverer_@GST_API_VERSION@_SOURCES) \ - -:CFLAGS $(DEFS) $(AM_CFLAGS) \ - -:LDFLAGS -lgstpbutils-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \ - $(GST_BASE_LIBS) $(GST_LIBS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff -Nru gst-plugins-base1.0-1.4.3/tools/Makefile.in gst-plugins-base1.0-1.6.1/tools/Makefile.in --- gst-plugins-base1.0-1.4.3/tools/Makefile.in 2014-09-24 08:16:06.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/tools/Makefile.in 2015-10-30 14:20:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -16,7 +16,17 @@ VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ @@ -84,8 +94,6 @@ gst-discoverer-@GST_API_VERSION@$(EXEEXT) \ gst-play-@GST_API_VERSION@$(EXEEXT) subdir = tools -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ $(top_srcdir)/common/m4/as-auto-alt.m4 \ @@ -106,7 +114,6 @@ $(top_srcdir)/common/m4/gst-platform.m4 \ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst-x11.m4 \ $(top_srcdir)/common/m4/gst.m4 \ $(top_srcdir)/common/m4/gtk-doc.m4 \ $(top_srcdir)/common/m4/introspection.m4 \ @@ -123,6 +130,8 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = @@ -262,6 +271,7 @@ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ @@ -322,6 +332,8 @@ GIO_CFLAGS = @GIO_CFLAGS@ GIO_LDFLAGS = @GIO_LDFLAGS@ GIO_LIBS = @GIO_LIBS@ +GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@ +GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ @@ -351,6 +363,8 @@ GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ GST_LICENSE = @GST_LICENSE@ GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_NET_CFLAGS = @GST_NET_CFLAGS@ +GST_NET_LIBS = @GST_NET_LIBS@ GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ @@ -378,7 +392,6 @@ GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ GTK_X11_LIBS = @GTK_X11_LIBS@ HAVE_CDPARANOIA = @HAVE_CDPARANOIA@ -HAVE_X = @HAVE_X@ HAVE_XSHM = @HAVE_XSHM@ HAVE_ZLIB = @HAVE_ZLIB@ HTML_DIR = @HTML_DIR@ @@ -393,6 +406,7 @@ INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_INIT = @INTROSPECTION_INIT@ INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ @@ -482,13 +496,12 @@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -XMKMF = @XMKMF@ +XSHM_CFLAGS = @XSHM_CFLAGS@ XSHM_LIBS = @XSHM_LIBS@ +XVIDEO_CFLAGS = @XVIDEO_CFLAGS@ XVIDEO_LIBS = @XVIDEO_LIBS@ X_CFLAGS = @X_CFLAGS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ ZLIB_CFLAGS = @ZLIB_CFLAGS@ ZLIB_LIBS = @ZLIB_LIBS@ abs_builddir = @abs_builddir@ @@ -541,6 +554,7 @@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -587,7 +601,6 @@ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile -.PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -960,17 +973,8 @@ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 +.PRECIOUS: Makefile -Android.mk: Makefile.am - androgenizer -:PROJECT gst-discoverer-@GST_API_VERSION@ \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:EXECUTABLE gst-discoverer-@GST_API_VERSION@ -:TAGS eng debug \ - -:SOURCES $(gst_discoverer_@GST_API_VERSION@_SOURCES) \ - -:CFLAGS $(DEFS) $(AM_CFLAGS) \ - -:LDFLAGS -lgstpbutils-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \ - $(GST_BASE_LIBS) $(GST_LIBS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru gst-plugins-base1.0-1.4.3/win32/common/config.h gst-plugins-base1.0-1.6.1/win32/common/config.h --- gst-plugins-base1.0-1.4.3/win32/common/config.h 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/config.h 2015-10-30 14:20:43.000000000 +0000 @@ -50,6 +50,9 @@ /* The GIO modules directory. */ #undef GIO_MODULE_DIR +/* The GIO install prefix. */ +#undef GIO_PREFIX + /* major/minor version */ #define GST_API_VERSION "1.0" @@ -84,7 +87,7 @@ #define GST_PACKAGE_ORIGIN "Unknown package origin" /* GStreamer package release date/time for plugins as YYYY-MM-DD */ -#define GST_PACKAGE_RELEASE_DATETIME "2014-09-24" +#define GST_PACKAGE_RELEASE_DATETIME "2015-10-30" /* Define if static plugins should be built */ #undef GST_PLUGIN_BUILD_STATIC @@ -106,9 +109,15 @@ the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE +/* Define if the target CPU is AARCH64 */ +#undef HAVE_CPU_AARCH64 + /* Define if the target CPU is an Alpha */ #undef HAVE_CPU_ALPHA +/* Define if the target CPU is an ARC */ +#undef HAVE_CPU_ARC + /* Define if the target CPU is an ARM */ #undef HAVE_CPU_ARM @@ -176,6 +185,9 @@ /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT +/* Define to enable glib GIO unix (used by gio-unix-2.0). */ +#undef HAVE_GIO_UNIX_2_0 + /* Define to 1 if you have the `gmtime_r' function. */ #undef HAVE_GMTIME_R @@ -325,7 +337,7 @@ #define PACKAGE_NAME "GStreamer Base Plug-ins" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GStreamer Base Plug-ins 1.4.3" +#define PACKAGE_STRING "GStreamer Base Plug-ins 1.6.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gst-plugins-base" @@ -334,7 +346,7 @@ #undef PACKAGE_URL /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.4.3" +#define PACKAGE_VERSION "1.6.1" /* directory where plugins are located */ #ifdef _DEBUG @@ -368,7 +380,7 @@ #undef USE_TREMOLO /* Version number of package */ -#define VERSION "1.4.3" +#define VERSION "1.6.1" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ @@ -382,9 +394,6 @@ # endif #endif -/* Define to 1 if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 diff -Nru gst-plugins-base1.0-1.4.3/win32/common/gstrtsp-enumtypes.c gst-plugins-base1.0-1.6.1/win32/common/gstrtsp-enumtypes.c --- gst-plugins-base1.0-1.4.3/win32/common/gstrtsp-enumtypes.c 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/gstrtsp-enumtypes.c 2015-10-30 14:20:43.000000000 +0000 @@ -3,7 +3,98 @@ #include "gstrtsp-enumtypes.h" +#include "rtsp.h" +#include "gstrtsp.h" +#include "gstrtsptransport.h" +#include "gstrtspurl.h" +#include "gstrtspmessage.h" +#include "gstrtspconnection.h" #include "gstrtspdefs.h" +#include "gstrtspextension.h" +#include "gstrtsprange.h" + +/* enumerations from "gstrtsptransport.h" */ +GType +gst_rtsp_trans_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_RTSP_TRANS_UNKNOWN, "GST_RTSP_TRANS_UNKNOWN", "unknown"}, + {GST_RTSP_TRANS_RTP, "GST_RTSP_TRANS_RTP", "rtp"}, + {GST_RTSP_TRANS_RDT, "GST_RTSP_TRANS_RDT", "rdt"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstRTSPTransMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_rtsp_profile_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_RTSP_PROFILE_UNKNOWN, "GST_RTSP_PROFILE_UNKNOWN", "unknown"}, + {GST_RTSP_PROFILE_AVP, "GST_RTSP_PROFILE_AVP", "avp"}, + {GST_RTSP_PROFILE_SAVP, "GST_RTSP_PROFILE_SAVP", "savp"}, + {GST_RTSP_PROFILE_AVPF, "GST_RTSP_PROFILE_AVPF", "avpf"}, + {GST_RTSP_PROFILE_SAVPF, "GST_RTSP_PROFILE_SAVPF", "savpf"}, + {0, NULL, NULL} + }; + GType g_define_type_id = g_flags_register_static ("GstRTSPProfile", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_rtsp_lower_trans_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_RTSP_LOWER_TRANS_UNKNOWN, "GST_RTSP_LOWER_TRANS_UNKNOWN", "unknown"}, + {GST_RTSP_LOWER_TRANS_UDP, "GST_RTSP_LOWER_TRANS_UDP", "udp"}, + {GST_RTSP_LOWER_TRANS_UDP_MCAST, "GST_RTSP_LOWER_TRANS_UDP_MCAST", + "udp-mcast"}, + {GST_RTSP_LOWER_TRANS_TCP, "GST_RTSP_LOWER_TRANS_TCP", "tcp"}, + {GST_RTSP_LOWER_TRANS_HTTP, "GST_RTSP_LOWER_TRANS_HTTP", "http"}, + {GST_RTSP_LOWER_TRANS_TLS, "GST_RTSP_LOWER_TRANS_TLS", "tls"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstRTSPLowerTrans", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +/* enumerations from "gstrtspmessage.h" */ +GType +gst_rtsp_msg_type_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_RTSP_MESSAGE_INVALID, "GST_RTSP_MESSAGE_INVALID", "invalid"}, + {GST_RTSP_MESSAGE_REQUEST, "GST_RTSP_MESSAGE_REQUEST", "request"}, + {GST_RTSP_MESSAGE_RESPONSE, "GST_RTSP_MESSAGE_RESPONSE", "response"}, + {GST_RTSP_MESSAGE_HTTP_REQUEST, "GST_RTSP_MESSAGE_HTTP_REQUEST", + "http-request"}, + {GST_RTSP_MESSAGE_HTTP_RESPONSE, "GST_RTSP_MESSAGE_HTTP_RESPONSE", + "http-response"}, + {GST_RTSP_MESSAGE_DATA, "GST_RTSP_MESSAGE_DATA", "data"}, + {0, NULL, NULL} + }; + GType g_define_type_id = g_enum_register_static ("GstRTSPMsgType", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} /* enumerations from "gstrtspdefs.h" */ GType @@ -391,4 +482,45 @@ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); } return g_define_type_id__volatile; +} + +/* enumerations from "gstrtsprange.h" */ +GType +gst_rtsp_range_unit_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_RTSP_RANGE_SMPTE, "GST_RTSP_RANGE_SMPTE", "smpte"}, + {GST_RTSP_RANGE_SMPTE_30_DROP, "GST_RTSP_RANGE_SMPTE_30_DROP", + "smpte-30-drop"}, + {GST_RTSP_RANGE_SMPTE_25, "GST_RTSP_RANGE_SMPTE_25", "smpte-25"}, + {GST_RTSP_RANGE_NPT, "GST_RTSP_RANGE_NPT", "npt"}, + {GST_RTSP_RANGE_CLOCK, "GST_RTSP_RANGE_CLOCK", "clock"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstRTSPRangeUnit", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_rtsp_time_type_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_RTSP_TIME_SECONDS, "GST_RTSP_TIME_SECONDS", "seconds"}, + {GST_RTSP_TIME_NOW, "GST_RTSP_TIME_NOW", "now"}, + {GST_RTSP_TIME_END, "GST_RTSP_TIME_END", "end"}, + {GST_RTSP_TIME_FRAMES, "GST_RTSP_TIME_FRAMES", "frames"}, + {GST_RTSP_TIME_UTC, "GST_RTSP_TIME_UTC", "utc"}, + {0, NULL, NULL} + }; + GType g_define_type_id = g_enum_register_static ("GstRTSPTimeType", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; } diff -Nru gst-plugins-base1.0-1.4.3/win32/common/gstrtsp-enumtypes.h gst-plugins-base1.0-1.6.1/win32/common/gstrtsp-enumtypes.h --- gst-plugins-base1.0-1.4.3/win32/common/gstrtsp-enumtypes.h 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/gstrtsp-enumtypes.h 2015-10-30 14:20:43.000000000 +0000 @@ -8,6 +8,18 @@ G_BEGIN_DECLS +/* enumerations from "gstrtsptransport.h" */ +GType gst_rtsp_trans_mode_get_type (void); +#define GST_TYPE_RTSP_TRANS_MODE (gst_rtsp_trans_mode_get_type()) +GType gst_rtsp_profile_get_type (void); +#define GST_TYPE_RTSP_PROFILE (gst_rtsp_profile_get_type()) +GType gst_rtsp_lower_trans_get_type (void); +#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type()) + +/* enumerations from "gstrtspmessage.h" */ +GType gst_rtsp_msg_type_get_type (void); +#define GST_TYPE_RTSP_MSG_TYPE (gst_rtsp_msg_type_get_type()) + /* enumerations from "gstrtspdefs.h" */ GType gst_rtsp_result_get_type (void); #define GST_TYPE_RTSP_RESULT (gst_rtsp_result_get_type()) @@ -27,6 +39,12 @@ #define GST_TYPE_RTSP_HEADER_FIELD (gst_rtsp_header_field_get_type()) GType gst_rtsp_status_code_get_type (void); #define GST_TYPE_RTSP_STATUS_CODE (gst_rtsp_status_code_get_type()) + +/* enumerations from "gstrtsprange.h" */ +GType gst_rtsp_range_unit_get_type (void); +#define GST_TYPE_RTSP_RANGE_UNIT (gst_rtsp_range_unit_get_type()) +GType gst_rtsp_time_type_get_type (void); +#define GST_TYPE_RTSP_TIME_TYPE (gst_rtsp_time_type_get_type()) G_END_DECLS #endif /* __gst_rtsp_ENUM_TYPES_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstapp.def gst-plugins-base1.0-1.6.1/win32/common/libgstapp.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstapp.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstapp.def 2015-10-22 08:01:34.000000000 +0000 @@ -22,6 +22,7 @@ gst_app_src_get_stream_type gst_app_src_get_type gst_app_src_push_buffer + gst_app_src_push_sample gst_app_src_set_callbacks gst_app_src_set_caps gst_app_src_set_emit_signals diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstaudio.def gst-plugins-base1.0-1.6.1/win32/common/libgstaudio.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstaudio.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstaudio.def 2015-10-22 08:01:34.000000000 +0000 @@ -7,7 +7,9 @@ gst_audio_base_sink_get_provide_clock gst_audio_base_sink_get_slave_method gst_audio_base_sink_get_type + gst_audio_base_sink_report_device_failure gst_audio_base_sink_set_alignment_threshold + gst_audio_base_sink_set_custom_slaving_callback gst_audio_base_sink_set_discont_wait gst_audio_base_sink_set_drift_tolerance gst_audio_base_sink_set_provide_clock @@ -54,6 +56,7 @@ gst_audio_decoder_get_type gst_audio_decoder_merge_tags gst_audio_decoder_negotiate + gst_audio_decoder_proxy_getcaps gst_audio_decoder_set_drainable gst_audio_decoder_set_estimate_rate gst_audio_decoder_set_latency @@ -64,6 +67,7 @@ gst_audio_decoder_set_plc gst_audio_decoder_set_plc_aware gst_audio_decoder_set_tolerance + gst_audio_decoder_set_use_default_pad_acceptcaps gst_audio_downmix_meta_api_get_type gst_audio_downmix_meta_get_info gst_audio_encoder_allocate_output_buffer diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstpbutils.def gst-plugins-base1.0-1.6.1/win32/common/libgstpbutils.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstpbutils.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstpbutils.def 2015-10-22 08:01:34.000000000 +0000 @@ -29,6 +29,7 @@ gst_discoverer_discover_uri_async gst_discoverer_get_type gst_discoverer_info_copy + gst_discoverer_info_from_variant gst_discoverer_info_get_audio_streams gst_discoverer_info_get_container_streams gst_discoverer_info_get_duration @@ -45,8 +46,10 @@ gst_discoverer_info_get_type gst_discoverer_info_get_uri gst_discoverer_info_get_video_streams + gst_discoverer_info_to_variant gst_discoverer_new gst_discoverer_result_get_type + gst_discoverer_serialize_flags_get_type gst_discoverer_start gst_discoverer_stop gst_discoverer_stream_info_get_caps @@ -84,6 +87,7 @@ gst_encoding_list_available_categories gst_encoding_profile_find gst_encoding_profile_from_discoverer + gst_encoding_profile_get_allow_dynamic_output gst_encoding_profile_get_description gst_encoding_profile_get_file_extension gst_encoding_profile_get_format @@ -95,8 +99,11 @@ gst_encoding_profile_get_restriction gst_encoding_profile_get_type gst_encoding_profile_get_type_nick + gst_encoding_profile_is_enabled gst_encoding_profile_is_equal + gst_encoding_profile_set_allow_dynamic_output gst_encoding_profile_set_description + gst_encoding_profile_set_enabled gst_encoding_profile_set_format gst_encoding_profile_set_name gst_encoding_profile_set_presence @@ -125,6 +132,9 @@ gst_install_plugins_context_free gst_install_plugins_context_get_type gst_install_plugins_context_new + gst_install_plugins_context_set_confirm_search + gst_install_plugins_context_set_desktop_id + gst_install_plugins_context_set_startup_notification_id gst_install_plugins_context_set_xid gst_install_plugins_installation_in_progress gst_install_plugins_return_get_name diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstrtp.def gst-plugins-base1.0-1.6.1/win32/common/libgstrtp.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstrtp.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstrtp.def 2015-10-22 08:01:34.000000000 +0000 @@ -9,6 +9,8 @@ gst_rtcp_buffer_unmap gst_rtcp_buffer_validate gst_rtcp_buffer_validate_data + gst_rtcp_buffer_validate_data_reduced + gst_rtcp_buffer_validate_reduced gst_rtcp_ntp_to_unix gst_rtcp_packet_add_rb gst_rtcp_packet_bye_add_ssrc @@ -52,7 +54,10 @@ gst_rtcp_packet_sr_set_sender_info gst_rtcp_sdes_name_to_type gst_rtcp_sdes_type_to_name + gst_rtcp_type_get_type gst_rtcp_unix_to_ntp + gst_rtcpfb_type_get_type + gst_rtcpsdes_type_get_type gst_rtp_base_audio_payload_flush gst_rtp_base_audio_payload_get_adapter gst_rtp_base_audio_payload_get_type @@ -102,6 +107,7 @@ gst_rtp_buffer_get_timestamp gst_rtp_buffer_get_version gst_rtp_buffer_map + gst_rtp_buffer_map_flags_get_type gst_rtp_buffer_new_allocate gst_rtp_buffer_new_allocate_len gst_rtp_buffer_new_copy_data @@ -123,5 +129,7 @@ gst_rtp_hdrext_get_ntp_64 gst_rtp_hdrext_set_ntp_56 gst_rtp_hdrext_set_ntp_64 + gst_rtp_payload_get_type gst_rtp_payload_info_for_name gst_rtp_payload_info_for_pt + gst_rtp_profile_get_type diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstrtsp.def gst-plugins-base1.0-1.6.1/win32/common/libgstrtsp.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstrtsp.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstrtsp.def 2015-10-22 08:01:34.000000000 +0000 @@ -14,6 +14,7 @@ gst_rtsp_connection_get_remember_session_id gst_rtsp_connection_get_tls gst_rtsp_connection_get_tls_database + gst_rtsp_connection_get_tls_interaction gst_rtsp_connection_get_tls_validation_flags gst_rtsp_connection_get_tunnelid gst_rtsp_connection_get_url @@ -33,6 +34,7 @@ gst_rtsp_connection_set_qos_dscp gst_rtsp_connection_set_remember_session_id gst_rtsp_connection_set_tls_database + gst_rtsp_connection_set_tls_interaction gst_rtsp_connection_set_tls_validation_flags gst_rtsp_connection_set_tunneled gst_rtsp_connection_write @@ -56,11 +58,13 @@ gst_rtsp_header_field_get_type gst_rtsp_lower_trans_get_type gst_rtsp_message_add_header + gst_rtsp_message_add_header_by_name gst_rtsp_message_append_headers gst_rtsp_message_dump gst_rtsp_message_free gst_rtsp_message_get_body gst_rtsp_message_get_header + gst_rtsp_message_get_header_by_name gst_rtsp_message_get_type gst_rtsp_message_init gst_rtsp_message_init_data @@ -74,13 +78,16 @@ gst_rtsp_message_parse_request gst_rtsp_message_parse_response gst_rtsp_message_remove_header + gst_rtsp_message_remove_header_by_name gst_rtsp_message_set_body gst_rtsp_message_steal_body gst_rtsp_message_take_body gst_rtsp_message_take_header + gst_rtsp_message_take_header_by_name gst_rtsp_message_unset gst_rtsp_method_as_text gst_rtsp_method_get_type + gst_rtsp_msg_type_get_type gst_rtsp_options_as_text gst_rtsp_options_from_text gst_rtsp_profile_get_type @@ -89,11 +96,14 @@ gst_rtsp_range_get_times gst_rtsp_range_parse gst_rtsp_range_to_string + gst_rtsp_range_unit_get_type gst_rtsp_result_get_type gst_rtsp_state_get_type gst_rtsp_status_as_text gst_rtsp_status_code_get_type gst_rtsp_strresult + gst_rtsp_time_type_get_type + gst_rtsp_trans_mode_get_type gst_rtsp_transport_as_text gst_rtsp_transport_free gst_rtsp_transport_get_manager diff -Nru gst-plugins-base1.0-1.4.3/win32/common/libgstvideo.def gst-plugins-base1.0-1.6.1/win32/common/libgstvideo.def --- gst-plugins-base1.0-1.4.3/win32/common/libgstvideo.def 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/libgstvideo.def 2015-10-22 08:01:34.000000000 +0000 @@ -6,6 +6,7 @@ gst_buffer_add_video_overlay_composition_meta gst_buffer_add_video_region_of_interest_meta gst_buffer_add_video_region_of_interest_meta_id + gst_buffer_get_video_meta gst_buffer_get_video_meta_id gst_buffer_get_video_region_of_interest_meta_id gst_buffer_pool_config_get_video_alignment @@ -30,8 +31,10 @@ gst_navigation_message_get_type gst_navigation_message_new_angles_changed gst_navigation_message_new_commands_changed + gst_navigation_message_new_event gst_navigation_message_new_mouse_over gst_navigation_message_parse_angles_changed + gst_navigation_message_parse_event gst_navigation_message_parse_mouse_over gst_navigation_message_type_get_type gst_navigation_query_get_type @@ -49,14 +52,17 @@ gst_navigation_send_key_event gst_navigation_send_mouse_event gst_video_alignment_reset + gst_video_alpha_mode_get_type gst_video_blend gst_video_blend_scale_linear_RGBA + gst_video_buffer_flags_get_type gst_video_buffer_pool_get_type gst_video_buffer_pool_new gst_video_calculate_display_ratio gst_video_chroma_flags_get_type gst_video_chroma_from_string gst_video_chroma_method_get_type + gst_video_chroma_mode_get_type gst_video_chroma_resample gst_video_chroma_resample_free gst_video_chroma_resample_get_info @@ -71,15 +77,25 @@ gst_video_codec_state_get_type gst_video_codec_state_ref gst_video_codec_state_unref + gst_video_color_matrix_get_Kr_Kb gst_video_color_matrix_get_type + gst_video_color_primaries_get_info gst_video_color_primaries_get_type gst_video_color_range_get_type gst_video_color_range_offsets + gst_video_color_transfer_decode + gst_video_color_transfer_encode gst_video_colorimetry_from_string + gst_video_colorimetry_is_equal gst_video_colorimetry_matches gst_video_colorimetry_to_string gst_video_convert_sample gst_video_convert_sample_async + gst_video_converter_frame + gst_video_converter_free + gst_video_converter_get_config + gst_video_converter_new + gst_video_converter_set_config gst_video_crop_meta_api_get_type gst_video_crop_meta_get_info gst_video_decoder_add_to_frame @@ -105,6 +121,7 @@ gst_video_decoder_have_frame gst_video_decoder_merge_tags gst_video_decoder_negotiate + gst_video_decoder_proxy_getcaps gst_video_decoder_release_frame gst_video_decoder_set_estimate_rate gst_video_decoder_set_latency @@ -112,6 +129,12 @@ gst_video_decoder_set_needs_format gst_video_decoder_set_output_state gst_video_decoder_set_packetized + gst_video_decoder_set_use_default_pad_acceptcaps + gst_video_dither_flags_get_type + gst_video_dither_free + gst_video_dither_line + gst_video_dither_method_get_type + gst_video_dither_new gst_video_encoder_allocate_output_buffer gst_video_encoder_allocate_output_frame gst_video_encoder_finish_frame @@ -127,6 +150,7 @@ gst_video_encoder_proxy_getcaps gst_video_encoder_set_headers gst_video_encoder_set_latency + gst_video_encoder_set_min_pts gst_video_encoder_set_output_state gst_video_event_is_force_key_unit gst_video_event_new_downstream_force_key_unit @@ -148,25 +172,49 @@ gst_video_format_to_string gst_video_frame_copy gst_video_frame_copy_plane + gst_video_frame_flags_get_type gst_video_frame_map + gst_video_frame_map_flags_get_type gst_video_frame_map_id gst_video_frame_unmap + gst_video_gamma_mode_get_type gst_video_gl_texture_upload_meta_api_get_type gst_video_gl_texture_upload_meta_get_info gst_video_gl_texture_upload_meta_upload + gst_video_guess_framerate gst_video_info_align gst_video_info_convert + gst_video_info_copy + gst_video_info_free gst_video_info_from_caps + gst_video_info_get_type gst_video_info_init gst_video_info_is_equal + gst_video_info_new gst_video_info_set_format gst_video_info_to_caps + gst_video_interlace_mode_from_string gst_video_interlace_mode_get_type + gst_video_interlace_mode_to_string + gst_video_matrix_mode_get_type gst_video_meta_api_get_type gst_video_meta_get_info gst_video_meta_map gst_video_meta_transform_scale_get_quark gst_video_meta_unmap + gst_video_multiview_flags_get_type + gst_video_multiview_flagset_get_type + gst_video_multiview_frame_packing_get_type + gst_video_multiview_get_doubled_height_modes + gst_video_multiview_get_doubled_size_modes + gst_video_multiview_get_doubled_width_modes + gst_video_multiview_get_mono_modes + gst_video_multiview_get_unpacked_modes + gst_video_multiview_guess_half_aspect + gst_video_multiview_mode_from_caps_string + gst_video_multiview_mode_get_type + gst_video_multiview_mode_to_caps_string + gst_video_multiview_video_info_change_mode gst_video_orientation_get_hcenter gst_video_orientation_get_hflip gst_video_orientation_get_type @@ -210,8 +258,22 @@ gst_video_overlay_set_render_rectangle gst_video_overlay_set_window_handle gst_video_pack_flags_get_type + gst_video_primaries_mode_get_type gst_video_region_of_interest_meta_api_get_type gst_video_region_of_interest_meta_get_info + gst_video_resampler_clear + gst_video_resampler_flags_get_type + gst_video_resampler_init + gst_video_resampler_method_get_type + gst_video_scaler_2d + gst_video_scaler_combine_packed_YUV + gst_video_scaler_flags_get_type + gst_video_scaler_free + gst_video_scaler_get_coeff + gst_video_scaler_get_max_taps + gst_video_scaler_horizontal + gst_video_scaler_new + gst_video_scaler_vertical gst_video_sink_center_rect gst_video_sink_get_type gst_video_tile_get_index diff -Nru gst-plugins-base1.0-1.4.3/win32/common/pbutils-enumtypes.c gst-plugins-base1.0-1.6.1/win32/common/pbutils-enumtypes.c --- gst-plugins-base1.0-1.4.3/win32/common/pbutils-enumtypes.c 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/pbutils-enumtypes.c 2015-10-30 14:20:43.000000000 +0000 @@ -68,3 +68,24 @@ } return g_define_type_id__volatile; } + +GType +gst_discoverer_serialize_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_DISCOVERER_SERIALIZE_BASIC, "GST_DISCOVERER_SERIALIZE_BASIC", + "basic"}, + {GST_DISCOVERER_SERIALIZE_CAPS, "GST_DISCOVERER_SERIALIZE_CAPS", "caps"}, + {GST_DISCOVERER_SERIALIZE_TAGS, "GST_DISCOVERER_SERIALIZE_TAGS", "tags"}, + {GST_DISCOVERER_SERIALIZE_MISC, "GST_DISCOVERER_SERIALIZE_MISC", "misc"}, + {GST_DISCOVERER_SERIALIZE_ALL, "GST_DISCOVERER_SERIALIZE_ALL", "all"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstDiscovererSerializeFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} diff -Nru gst-plugins-base1.0-1.4.3/win32/common/pbutils-enumtypes.h gst-plugins-base1.0-1.6.1/win32/common/pbutils-enumtypes.h --- gst-plugins-base1.0-1.4.3/win32/common/pbutils-enumtypes.h 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/pbutils-enumtypes.h 2015-10-30 14:20:43.000000000 +0000 @@ -15,6 +15,8 @@ /* enumerations from "gstdiscoverer.h" */ GType gst_discoverer_result_get_type (void); #define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type()) +GType gst_discoverer_serialize_flags_get_type (void); +#define GST_TYPE_DISCOVERER_SERIALIZE_FLAGS (gst_discoverer_serialize_flags_get_type()) G_END_DECLS #endif /* __PB_UTILS_ENUM_TYPES_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/win32/common/_stdint.h gst-plugins-base1.0-1.6.1/win32/common/_stdint.h --- gst-plugins-base1.0-1.4.3/win32/common/_stdint.h 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/_stdint.h 2015-10-30 14:20:43.000000000 +0000 @@ -1,8 +1,8 @@ #ifndef _GST_PLUGINS_BASE__STDINT_H #define _GST_PLUGINS_BASE__STDINT_H 1 #ifndef _GENERATED_STDINT_H -#define _GENERATED_STDINT_H "gst-plugins-base 1.4.3" -/* generated using gnu compiler gcc (Debian 4.9.1-15) 4.9.1 */ +#define _GENERATED_STDINT_H "gst-plugins-base 1.6.1" +/* generated using gnu compiler gcc-5 (Debian 5.2.1-23) 5.2.1 20151028 */ #define _STDINT_HAVE_STDINT_H 1 #include #endif diff -Nru gst-plugins-base1.0-1.4.3/win32/common/video-enumtypes.c gst-plugins-base1.0-1.6.1/win32/common/video-enumtypes.c --- gst-plugins-base1.0-1.4.3/win32/common/video-enumtypes.c 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/video-enumtypes.c 2015-10-30 14:20:43.000000000 +0000 @@ -7,10 +7,15 @@ #include "video-format.h" #include "video-color.h" #include "video-info.h" +#include "video-dither.h" #include "colorbalance.h" #include "navigation.h" #include "video-chroma.h" #include "video-tile.h" +#include "video-converter.h" +#include "video-resampler.h" +#include "video-frame.h" +#include "video-scaler.h" /* enumerations from "video-format.h" */ GType @@ -74,6 +79,13 @@ {GST_VIDEO_FORMAT_NV24, "GST_VIDEO_FORMAT_NV24", "nv24"}, {GST_VIDEO_FORMAT_NV12_64Z32, "GST_VIDEO_FORMAT_NV12_64Z32", "nv12-64z32"}, + {GST_VIDEO_FORMAT_A420_10BE, "GST_VIDEO_FORMAT_A420_10BE", "a420-10be"}, + {GST_VIDEO_FORMAT_A420_10LE, "GST_VIDEO_FORMAT_A420_10LE", "a420-10le"}, + {GST_VIDEO_FORMAT_A422_10BE, "GST_VIDEO_FORMAT_A422_10BE", "a422-10be"}, + {GST_VIDEO_FORMAT_A422_10LE, "GST_VIDEO_FORMAT_A422_10LE", "a422-10le"}, + {GST_VIDEO_FORMAT_A444_10BE, "GST_VIDEO_FORMAT_A444_10BE", "a444-10be"}, + {GST_VIDEO_FORMAT_A444_10LE, "GST_VIDEO_FORMAT_A444_10LE", "a444-10le"}, + {GST_VIDEO_FORMAT_NV61, "GST_VIDEO_FORMAT_NV61", "nv61"}, {0, NULL, NULL} }; GType g_define_type_id = g_enum_register_static ("GstVideoFormat", values); @@ -162,6 +174,8 @@ {GST_VIDEO_COLOR_MATRIX_BT601, "GST_VIDEO_COLOR_MATRIX_BT601", "bt601"}, {GST_VIDEO_COLOR_MATRIX_SMPTE240M, "GST_VIDEO_COLOR_MATRIX_SMPTE240M", "smpte240m"}, + {GST_VIDEO_COLOR_MATRIX_BT2020, "GST_VIDEO_COLOR_MATRIX_BT2020", + "bt2020"}, {0, NULL, NULL} }; GType g_define_type_id = @@ -189,6 +203,8 @@ {GST_VIDEO_TRANSFER_GAMMA28, "GST_VIDEO_TRANSFER_GAMMA28", "gamma28"}, {GST_VIDEO_TRANSFER_LOG100, "GST_VIDEO_TRANSFER_LOG100", "log100"}, {GST_VIDEO_TRANSFER_LOG316, "GST_VIDEO_TRANSFER_LOG316", "log316"}, + {GST_VIDEO_TRANSFER_BT2020_12, "GST_VIDEO_TRANSFER_BT2020_12", + "bt2020-12"}, {0, NULL, NULL} }; GType g_define_type_id = @@ -218,6 +234,8 @@ "GST_VIDEO_COLOR_PRIMARIES_SMPTE240M", "smpte240m"}, {GST_VIDEO_COLOR_PRIMARIES_FILM, "GST_VIDEO_COLOR_PRIMARIES_FILM", "film"}, + {GST_VIDEO_COLOR_PRIMARIES_BT2020, "GST_VIDEO_COLOR_PRIMARIES_BT2020", + "bt2020"}, {0, NULL, NULL} }; GType g_define_type_id = @@ -252,6 +270,116 @@ } GType +gst_video_multiview_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_MULTIVIEW_MODE_NONE, "GST_VIDEO_MULTIVIEW_MODE_NONE", "none"}, + {GST_VIDEO_MULTIVIEW_MODE_MONO, "GST_VIDEO_MULTIVIEW_MODE_MONO", "mono"}, + {GST_VIDEO_MULTIVIEW_MODE_LEFT, "GST_VIDEO_MULTIVIEW_MODE_LEFT", "left"}, + {GST_VIDEO_MULTIVIEW_MODE_RIGHT, "GST_VIDEO_MULTIVIEW_MODE_RIGHT", + "right"}, + {GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE, + "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE", "side-by-side"}, + {GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX, + "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX", + "side-by-side-quincunx"}, + {GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED, + "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED", + "column-interleaved"}, + {GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED, + "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED", "row-interleaved"}, + {GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM, + "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM", "top-bottom"}, + {GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD, + "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD", "checkerboard"}, + {GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME, + "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME", "frame-by-frame"}, + {GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME, + "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME", + "multiview-frame-by-frame"}, + {GST_VIDEO_MULTIVIEW_MODE_SEPARATED, "GST_VIDEO_MULTIVIEW_MODE_SEPARATED", + "separated"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoMultiviewMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_multiview_frame_packing_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE", "none"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO", "mono"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT", "left"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT", "right"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE", "side-by-side"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX", + "side-by-side-quincunx"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED", + "column-interleaved"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED", + "row-interleaved"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM", "top-bottom"}, + {GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD, + "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD", "checkerboard"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoMultiviewFramePacking", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_multiview_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_MULTIVIEW_FLAGS_NONE, "GST_VIDEO_MULTIVIEW_FLAGS_NONE", + "none"}, + {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST, + "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST", "right-view-first"}, + {GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED, + "GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED", "left-flipped"}, + {GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED, + "GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED", "left-flopped"}, + {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED, + "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED", "right-flipped"}, + {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED, + "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED", "right-flopped"}, + {GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT, + "GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT", "half-aspect"}, + {GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO, + "GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO", "mixed-mono"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoMultiviewFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType gst_video_flags_get_type (void) { static volatile gsize g_define_type_id__volatile = 0; @@ -270,6 +398,49 @@ return g_define_type_id__volatile; } +/* enumerations from "video-dither.h" */ +GType +gst_video_dither_method_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_DITHER_NONE, "GST_VIDEO_DITHER_NONE", "none"}, + {GST_VIDEO_DITHER_VERTERR, "GST_VIDEO_DITHER_VERTERR", "verterr"}, + {GST_VIDEO_DITHER_FLOYD_STEINBERG, "GST_VIDEO_DITHER_FLOYD_STEINBERG", + "floyd-steinberg"}, + {GST_VIDEO_DITHER_SIERRA_LITE, "GST_VIDEO_DITHER_SIERRA_LITE", + "sierra-lite"}, + {GST_VIDEO_DITHER_BAYER, "GST_VIDEO_DITHER_BAYER", "bayer"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoDitherMethod", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_dither_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_DITHER_FLAG_NONE, "GST_VIDEO_DITHER_FLAG_NONE", "none"}, + {GST_VIDEO_DITHER_FLAG_INTERLACED, "GST_VIDEO_DITHER_FLAG_INTERLACED", + "interlaced"}, + {GST_VIDEO_DITHER_FLAG_QUANTIZE, "GST_VIDEO_DITHER_FLAG_QUANTIZE", + "quantize"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoDitherFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + /* enumerations from "colorbalance.h" */ GType gst_color_balance_type_get_type (void) @@ -356,6 +527,7 @@ "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED", "commands-changed"}, {GST_NAVIGATION_MESSAGE_ANGLES_CHANGED, "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED", "angles-changed"}, + {GST_NAVIGATION_MESSAGE_EVENT, "GST_NAVIGATION_MESSAGE_EVENT", "event"}, {0, NULL, NULL} }; GType g_define_type_id = @@ -493,4 +665,233 @@ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); } return g_define_type_id__volatile; +} + +/* enumerations from "video-converter.h" */ +GType +gst_video_alpha_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_ALPHA_MODE_COPY, "GST_VIDEO_ALPHA_MODE_COPY", "copy"}, + {GST_VIDEO_ALPHA_MODE_SET, "GST_VIDEO_ALPHA_MODE_SET", "set"}, + {GST_VIDEO_ALPHA_MODE_MULT, "GST_VIDEO_ALPHA_MODE_MULT", "mult"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoAlphaMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_chroma_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_CHROMA_MODE_FULL, "GST_VIDEO_CHROMA_MODE_FULL", "full"}, + {GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY, + "GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY", "upsample-only"}, + {GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY, + "GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY", "downsample-only"}, + {GST_VIDEO_CHROMA_MODE_NONE, "GST_VIDEO_CHROMA_MODE_NONE", "none"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoChromaMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_matrix_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_MATRIX_MODE_FULL, "GST_VIDEO_MATRIX_MODE_FULL", "full"}, + {GST_VIDEO_MATRIX_MODE_INPUT_ONLY, "GST_VIDEO_MATRIX_MODE_INPUT_ONLY", + "input-only"}, + {GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY, "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY", + "output-only"}, + {GST_VIDEO_MATRIX_MODE_NONE, "GST_VIDEO_MATRIX_MODE_NONE", "none"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoMatrixMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_gamma_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_GAMMA_MODE_NONE, "GST_VIDEO_GAMMA_MODE_NONE", "none"}, + {GST_VIDEO_GAMMA_MODE_REMAP, "GST_VIDEO_GAMMA_MODE_REMAP", "remap"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoGammaMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_primaries_mode_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_PRIMARIES_MODE_NONE, "GST_VIDEO_PRIMARIES_MODE_NONE", "none"}, + {GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY, + "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY", "merge-only"}, + {GST_VIDEO_PRIMARIES_MODE_FAST, "GST_VIDEO_PRIMARIES_MODE_FAST", "fast"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoPrimariesMode", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +/* enumerations from "video-resampler.h" */ +GType +gst_video_resampler_method_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_RESAMPLER_METHOD_NEAREST, "GST_VIDEO_RESAMPLER_METHOD_NEAREST", + "nearest"}, + {GST_VIDEO_RESAMPLER_METHOD_LINEAR, "GST_VIDEO_RESAMPLER_METHOD_LINEAR", + "linear"}, + {GST_VIDEO_RESAMPLER_METHOD_CUBIC, "GST_VIDEO_RESAMPLER_METHOD_CUBIC", + "cubic"}, + {GST_VIDEO_RESAMPLER_METHOD_SINC, "GST_VIDEO_RESAMPLER_METHOD_SINC", + "sinc"}, + {GST_VIDEO_RESAMPLER_METHOD_LANCZOS, "GST_VIDEO_RESAMPLER_METHOD_LANCZOS", + "lanczos"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoResamplerMethod", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_resampler_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GEnumValue values[] = { + {GST_VIDEO_RESAMPLER_FLAG_NONE, "GST_VIDEO_RESAMPLER_FLAG_NONE", "none"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_enum_register_static ("GstVideoResamplerFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +/* enumerations from "video-frame.h" */ +GType +gst_video_frame_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_FRAME_FLAG_NONE, "GST_VIDEO_FRAME_FLAG_NONE", "none"}, + {GST_VIDEO_FRAME_FLAG_INTERLACED, "GST_VIDEO_FRAME_FLAG_INTERLACED", + "interlaced"}, + {GST_VIDEO_FRAME_FLAG_TFF, "GST_VIDEO_FRAME_FLAG_TFF", "tff"}, + {GST_VIDEO_FRAME_FLAG_RFF, "GST_VIDEO_FRAME_FLAG_RFF", "rff"}, + {GST_VIDEO_FRAME_FLAG_ONEFIELD, "GST_VIDEO_FRAME_FLAG_ONEFIELD", + "onefield"}, + {GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW, "GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW", + "multiple-view"}, + {GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE, + "GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE", "first-in-bundle"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoFrameFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_buffer_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_BUFFER_FLAG_INTERLACED, "GST_VIDEO_BUFFER_FLAG_INTERLACED", + "interlaced"}, + {GST_VIDEO_BUFFER_FLAG_TFF, "GST_VIDEO_BUFFER_FLAG_TFF", "tff"}, + {GST_VIDEO_BUFFER_FLAG_RFF, "GST_VIDEO_BUFFER_FLAG_RFF", "rff"}, + {GST_VIDEO_BUFFER_FLAG_ONEFIELD, "GST_VIDEO_BUFFER_FLAG_ONEFIELD", + "onefield"}, + {GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW, + "GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW", "multiple-view"}, + {GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE, + "GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE", "first-in-bundle"}, + {GST_VIDEO_BUFFER_FLAG_LAST, "GST_VIDEO_BUFFER_FLAG_LAST", "last"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoBufferFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +GType +gst_video_frame_map_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_FRAME_MAP_FLAG_NO_REF, "GST_VIDEO_FRAME_MAP_FLAG_NO_REF", + "no-ref"}, + {GST_VIDEO_FRAME_MAP_FLAG_LAST, "GST_VIDEO_FRAME_MAP_FLAG_LAST", "last"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoFrameMapFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; +} + +/* enumerations from "video-scaler.h" */ +GType +gst_video_scaler_flags_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + if (g_once_init_enter (&g_define_type_id__volatile)) { + static const GFlagsValue values[] = { + {GST_VIDEO_SCALER_FLAG_NONE, "GST_VIDEO_SCALER_FLAG_NONE", "none"}, + {GST_VIDEO_SCALER_FLAG_INTERLACED, "GST_VIDEO_SCALER_FLAG_INTERLACED", + "interlaced"}, + {0, NULL, NULL} + }; + GType g_define_type_id = + g_flags_register_static ("GstVideoScalerFlags", values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + return g_define_type_id__volatile; } diff -Nru gst-plugins-base1.0-1.4.3/win32/common/video-enumtypes.h gst-plugins-base1.0-1.6.1/win32/common/video-enumtypes.h --- gst-plugins-base1.0-1.4.3/win32/common/video-enumtypes.h 2014-09-24 08:17:24.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/common/video-enumtypes.h 2015-10-30 14:20:43.000000000 +0000 @@ -29,9 +29,21 @@ /* enumerations from "video-info.h" */ GType gst_video_interlace_mode_get_type (void); #define GST_TYPE_VIDEO_INTERLACE_MODE (gst_video_interlace_mode_get_type()) +GType gst_video_multiview_mode_get_type (void); +#define GST_TYPE_VIDEO_MULTIVIEW_MODE (gst_video_multiview_mode_get_type()) +GType gst_video_multiview_frame_packing_get_type (void); +#define GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING (gst_video_multiview_frame_packing_get_type()) +GType gst_video_multiview_flags_get_type (void); +#define GST_TYPE_VIDEO_MULTIVIEW_FLAGS (gst_video_multiview_flags_get_type()) GType gst_video_flags_get_type (void); #define GST_TYPE_VIDEO_FLAGS (gst_video_flags_get_type()) +/* enumerations from "video-dither.h" */ +GType gst_video_dither_method_get_type (void); +#define GST_TYPE_VIDEO_DITHER_METHOD (gst_video_dither_method_get_type()) +GType gst_video_dither_flags_get_type (void); +#define GST_TYPE_VIDEO_DITHER_FLAGS (gst_video_dither_flags_get_type()) + /* enumerations from "colorbalance.h" */ GType gst_color_balance_type_get_type (void); #define GST_TYPE_COLOR_BALANCE_TYPE (gst_color_balance_type_get_type()) @@ -59,6 +71,36 @@ #define GST_TYPE_VIDEO_TILE_TYPE (gst_video_tile_type_get_type()) GType gst_video_tile_mode_get_type (void); #define GST_TYPE_VIDEO_TILE_MODE (gst_video_tile_mode_get_type()) + +/* enumerations from "video-converter.h" */ +GType gst_video_alpha_mode_get_type (void); +#define GST_TYPE_VIDEO_ALPHA_MODE (gst_video_alpha_mode_get_type()) +GType gst_video_chroma_mode_get_type (void); +#define GST_TYPE_VIDEO_CHROMA_MODE (gst_video_chroma_mode_get_type()) +GType gst_video_matrix_mode_get_type (void); +#define GST_TYPE_VIDEO_MATRIX_MODE (gst_video_matrix_mode_get_type()) +GType gst_video_gamma_mode_get_type (void); +#define GST_TYPE_VIDEO_GAMMA_MODE (gst_video_gamma_mode_get_type()) +GType gst_video_primaries_mode_get_type (void); +#define GST_TYPE_VIDEO_PRIMARIES_MODE (gst_video_primaries_mode_get_type()) + +/* enumerations from "video-resampler.h" */ +GType gst_video_resampler_method_get_type (void); +#define GST_TYPE_VIDEO_RESAMPLER_METHOD (gst_video_resampler_method_get_type()) +GType gst_video_resampler_flags_get_type (void); +#define GST_TYPE_VIDEO_RESAMPLER_FLAGS (gst_video_resampler_flags_get_type()) + +/* enumerations from "video-frame.h" */ +GType gst_video_frame_flags_get_type (void); +#define GST_TYPE_VIDEO_FRAME_FLAGS (gst_video_frame_flags_get_type()) +GType gst_video_buffer_flags_get_type (void); +#define GST_TYPE_VIDEO_BUFFER_FLAGS (gst_video_buffer_flags_get_type()) +GType gst_video_frame_map_flags_get_type (void); +#define GST_TYPE_VIDEO_FRAME_MAP_FLAGS (gst_video_frame_map_flags_get_type()) + +/* enumerations from "video-scaler.h" */ +GType gst_video_scaler_flags_get_type (void); +#define GST_TYPE_VIDEO_SCALER_FLAGS (gst_video_scaler_flags_get_type()) G_END_DECLS #endif /* __GST_VIDEO_ENUM_TYPES_H__ */ diff -Nru gst-plugins-base1.0-1.4.3/win32/vs8/libgsttcp.vcproj gst-plugins-base1.0-1.6.1/win32/vs8/libgsttcp.vcproj --- gst-plugins-base1.0-1.4.3/win32/vs8/libgsttcp.vcproj 2014-07-21 08:22:56.000000000 +0000 +++ gst-plugins-base1.0-1.6.1/win32/vs8/libgsttcp.vcproj 2015-10-22 08:01:34.000000000 +0000 @@ -190,6 +190,10 @@ > + +