aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-05-21 12:59:42 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-05-21 12:59:42 +0200
commit26f5ba92fdc5af292f474e01f63b91671f2902dd (patch)
treed613d9b33ff381dc0eb2e47c2c0b18d7500a8d59
parent89ba6a7ae13b77b41653267a521633a1a4f309b4 (diff)
Imported Upstream version 1.3.2upstream/1.3.2
-rw-r--r--ChangeLog68
-rw-r--r--NEWS18
-rwxr-xr-xconfig.guess192
-rwxr-xr-xconfig.sub23
-rwxr-xr-xconfigure38
-rw-r--r--configure.ac8
-rw-r--r--docs/plugins/gst-libav-plugins.args80
-rw-r--r--docs/plugins/html/gst-libav-plugins-plugin-libav.html2
-rw-r--r--docs/plugins/html/index.html2
-rw-r--r--docs/plugins/inspect/plugin-libav.xml2
-rw-r--r--ext/libav/gstavviddec.c85
-rw-r--r--ext/libav/gstavvidenc.c29
-rw-r--r--ext/libav/gstavvidenc.h1
-rw-r--r--gst-libav.doap10
-rw-r--r--gst-libav.spec2
-rw-r--r--gst-libs/ext/libav/Changelog25
-rw-r--r--gst-libs/ext/libav/RELEASE2
-rw-r--r--gst-libs/ext/libav/libavcodec/dcadec.c20
-rw-r--r--gst-libs/ext/libav/libavcodec/golomb.h4
-rw-r--r--gst-libs/ext/libav/libavcodec/pcm-dvd.c8
-rw-r--r--gst-libs/ext/libav/libavcodec/vp9.c4
-rw-r--r--gst-libs/ext/libav/libavfilter/af_volume.c2
-rw-r--r--gst-libs/ext/libav/libavfilter/vf_gradfun.c1
-rw-r--r--gst-libs/ext/libav/libavfilter/vf_hqdn3d.c1
-rw-r--r--gst-libs/ext/libav/libavformat/avidec.c70
-rw-r--r--gst-libs/ext/libav/libavformat/matroska.c1
-rw-r--r--gst-libs/ext/libav/libavformat/matroska.h1
-rw-r--r--gst-libs/ext/libav/libavformat/matroskadec.c10
-rw-r--r--gst-libs/ext/libav/libavformat/mp3enc.c46
-rw-r--r--gst-libs/ext/libav/libavformat/rtmpproto.c6
-rw-r--r--gst-libs/ext/libav/libavresample/utils.c2
-rw-r--r--gst-libs/ext/libav/libswscale/utils.c2
32 files changed, 478 insertions, 287 deletions
diff --git a/ChangeLog b/ChangeLog
index 3632606..8d4cb05 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,73 @@
+=== release 1.3.2 ===
+
+2014-05-21 Sebastian Dröge <slomo@coaxion.net>
+
+ * configure.ac:
+ releasing 1.3.2
+
+2014-05-21 10:53:31 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 211fa5f to 1f5d3c3
+
+2014-03-17 22:26:52 -0700 Gavin Hurlbut <gjhurlbu@gmail.com>
+
+ * ext/libav/gstavvidenc.c:
+ * ext/libav/gstavvidenc.h:
+ avvidenc: Add thread-count parameter for libav encoders
+ As some libav encoders (such as MPEG2) use a thread_count parameter to control
+ how many threads to use, and since it was always being set to 0 (which uses
+ the default), suboptimal threading can sometimes be chosen. This extends the
+ libav encoders to allow for a max-threads parameter which is passed into
+ the internal structure to control this knob if applicable to the encoder.
+ https://bugzilla.gnome.org/show_bug.cgi?id=726612
+
+2014-05-13 20:17:17 +0200 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+ * ext/libav/gstavviddec.c:
+ gstavviddec: Sanitize and fix qos handling.
+ gst_video_decoder_get_max_decding_time doesn't return a GstClockTime
+ but a GstClockTimeDiff, and thus one needs to compare it against
+ G_MAXINT_64.
+ The returning of a boolean and the extra subsequent code in _video_frame
+ was uselessly complicated.
+ The previous behaviour led to artefacts when the decoder tried to
+ hurry up.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730075
+
+2014-05-14 10:19:44 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/ext/libav:
+ Update to libav 10.1
+
+2014-03-27 18:53:53 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * ext/libav/gstavviddec.c:
+ videodec: Don't use non-growable pool
+ As we don't know how many output buffers we need to operate, we need to
+ avoid pool that can't grow. Otherwise the pipeline may stall, waiting
+ for buffers. For now, we require it to be able to grow to at least
+ 32 buffers, which I think is a fair amount of buffers for decoders.
+ https://bugzilla.gnome.org/show_bug.cgi?id=726299
+
+2014-05-03 20:48:40 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
=== release 1.3.1 ===
-2014-05-03 Sebastian Dröge <slomo@coaxion.net>
+2014-05-03 18:34:52 +0200 Sebastian Dröge <sebastian@centricular.com>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
* configure.ac:
- releasing 1.3.1
+ * docs/plugins/gst-libav-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-libav.xml:
+ * gst-libav.doap:
+ Release 1.3.1
2014-05-03 10:17:23 +0200 Sebastian Dröge <sebastian@centricular.com>
diff --git a/NEWS b/NEWS
index b0f9a64..dc015a8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer Libav Plugins 1.3.1
+This is GStreamer Libav Plugins 1.3.2
Changes since 1.2:
@@ -45,6 +45,8 @@ New API:
events and merge custom tags into them consistently.
• playbin/playsink has support for application provided audio and video
filters.
+ • GstDiscoverer has new and simplified API to get details about missing
+ plugins and information to pass to the plugin installer.
• The GL library was merged from gst-plugins-gl to gst-plugins-bad,
providing a generic infrastructure for handling GL inside GStreamer
pipelines and a plugin with some elements using these, especially
@@ -62,6 +64,14 @@ Major changes:
of the existing V4L2 elements and the corresponding
infrastructure.
The v4l2videodec element replaces the mfcdec element.
+ ∘ New downloadbuffer element that replaces the download
+ buffering feature of queue2. Compared to queue2's code
+ it is much simpler and only for this single use case.
+ A noteworthy new feature is that it's downloading gaps
+ in the already downloaded stream parts when nothing else
+ is to be downloaded.
+ This is now used by playbin when download buffering is
+ enabled.
∘ rtpstreampay and rtpstreamdepay elements for transmitting
RTP packets over a stream API (e.g. TCP) according to
RFC 4571.
@@ -78,7 +88,7 @@ Major changes:
are available on OS X and iOS now.
• Other changes:
- ∘ gst-libav now uses libav 10, and gained support for H265/HEVC.
+ ∘ gst-libav now uses libav 10.1, and gained support for H265/HEVC.
∘ Support for hardware codecs and special memory types has been
improved with bugfixes and feature additions in various plugins
and base classes.
@@ -95,6 +105,9 @@ Major changes:
reliable now and supports more HLS features like trick modes.
Also fragments are pushed downstream while they're downloaded
now instead of waiting for each fragment to finish.
+ ∘ dashdemux and mssdemux are now also pushing fragments downstream
+ while they're downloaded instead of waiting for each fragment to
+ finish.
∘ videoflip can automatically flip based on the orientation tag.
∘ openjpeg supports the OpenJPEG2 API.
∘ gst-rtsp-server supports SRTP and MIKEY now.
@@ -107,4 +120,3 @@ Things to look out for:
element.
• The mfcdec element was removed and replaced by v4l2videodec.
• osxvideosink is only available in OS X 10.6 or newer.
-
diff --git a/config.guess b/config.guess
index b79252d..1f5c50c 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2013 Free Software Foundation, Inc.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2013-06-10'
+timestamp='2014-03-23'
# 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
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2013 Free Software Foundation, Inc.
+Copyright 1992-2014 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'`
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
;;
esac
@@ -826,7 +826,7 @@ EOF
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
- i*:MSYS*:*)
+ *:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
@@ -969,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; }
;;
- or1k:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
exit ;;
- or32:Linux:*:*)
+ or32:Linux:*:* | or1k*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
@@ -1260,16 +1260,26 @@ EOF
if test "$UNAME_PROCESSOR" = unknown ; then
UNAME_PROCESSOR=powerpc
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
+ 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 ;;
@@ -1361,154 +1371,6 @@ EOF
exit ;;
esac
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#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 <sys/param.h>
- 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 <sys/param.h>
-# 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 <<EOF
$0: unable to guess system type
diff --git a/config.sub b/config.sub
index 9633db7..d654d03 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2013 Free Software Foundation, Inc.
+# Copyright 1992-2014 Free Software Foundation, Inc.
-timestamp='2013-08-10'
+timestamp='2014-05-01'
# 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
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2013 Free Software Foundation, Inc.
+Copyright 1992-2014 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."
@@ -265,6 +265,7 @@ case $basic_machine in
| hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
@@ -282,8 +283,10 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
@@ -295,8 +298,7 @@ case $basic_machine in
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | open8 \
- | or1k | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -324,7 +326,7 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -381,6 +383,7 @@ case $basic_machine in
| hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
@@ -400,8 +403,10 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
@@ -413,6 +418,7 @@ case $basic_machine in
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -1374,7 +1380,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1592,9 +1598,6 @@ case $basic_machine in
mips*-*)
os=-elf
;;
- or1k-*)
- os=-elf
- ;;
or32-*)
os=-coff
;;
diff --git a/configure b/configure
index e9d7ce2..d337b55 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer libav 1.3.1.
+# Generated by GNU Autoconf 2.69 for GStreamer libav 1.3.2.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='GStreamer libav'
PACKAGE_TARNAME='gst-libav'
-PACKAGE_VERSION='1.3.1'
-PACKAGE_STRING='GStreamer libav 1.3.1'
+PACKAGE_VERSION='1.3.2'
+PACKAGE_STRING='GStreamer libav 1.3.2'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -1495,7 +1495,7 @@ if test "$ac_init_help" = "long"; then
# 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 libav 1.3.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer libav 1.3.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1566,7 +1566,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer libav 1.3.1:";;
+ short | recursive ) echo "Configuration of GStreamer libav 1.3.2:";;
esac
cat <<\_ACEOF
@@ -1734,7 +1734,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer libav configure 1.3.1
+GStreamer libav configure 1.3.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2149,7 +2149,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer libav $as_me 1.3.1, which was
+It was created by GStreamer libav $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3127,7 +3127,7 @@ fi
# Define the identity of the package.
PACKAGE='gst-libav'
- VERSION='1.3.1'
+ VERSION='1.3.2'
cat >>confdefs.h <<_ACEOF
@@ -3338,9 +3338,9 @@ fi
- PACKAGE_VERSION_MAJOR=$(echo 1.3.1 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.3.1 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.3.1 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.3.2 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.3.2 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.3.2 | cut -d'.' -f3)
@@ -3351,7 +3351,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.3.1 | cut -d'.' -f4)
+ NANO=$(echo 1.3.2 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -8003,10 +8003,10 @@ fi
done
- GST_CURRENT=301
+ GST_CURRENT=302
GST_REVISION=0
- GST_AGE=301
- GST_LIBVERSION=301:0:301
+ GST_AGE=302
+ GST_LIBVERSION=302:0:302
@@ -12331,8 +12331,8 @@ CC="$lt_save_CC"
-GST_REQ=1.3.1
-GST_PBREQ=1.3.1
+GST_REQ=1.3.2
+GST_PBREQ=1.3.2
ORC_REQ=0.4.16
@@ -17461,7 +17461,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer libav $as_me 1.3.1, which was
+This file was extended by GStreamer libav $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -17527,7 +17527,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer libav config.status 1.3.1
+GStreamer libav config.status 1.3.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index c7bacdc..7355af5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.62)
dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
-AC_INIT(GStreamer libav, 1.3.1,
+AC_INIT(GStreamer libav, 1.3.2,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-libav)
@@ -42,11 +42,11 @@ GST_API_VERSION=1.0
AC_SUBST(GST_API_VERSION)
AG_GST_LIBTOOL_PREPARE
-AS_LIBTOOL(GST, 301, 0, 301)
+AS_LIBTOOL(GST, 302, 0, 302)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.3.1
-GST_PBREQ=1.3.1
+GST_REQ=1.3.2
+GST_PBREQ=1.3.2
ORC_REQ=0.4.16
ORC_CHECK([$ORC_REQ])
diff --git a/docs/plugins/gst-libav-plugins.args b/docs/plugins/gst-libav-plugins.args
index faf6c86..f5fcb47 100644
--- a/docs/plugins/gst-libav-plugins.args
+++ b/docs/plugins/gst-libav-plugins.args
@@ -14409,6 +14409,16 @@
</ARG>
<ARG>
+<NAME>avenc_prores::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_ppm::bitrate</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
@@ -16619,6 +16629,16 @@
</ARG>
<ARG>
+<NAME>avenc_mpeg4::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_mpeg2video::b-quant-factor</NAME>
<TYPE>gfloat</TYPE>
<RANGE>[-31,31]</RANGE>
@@ -17209,6 +17229,16 @@
</ARG>
<ARG>
+<NAME>avenc_mpeg2video::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_mpeg1video::b-quant-factor</NAME>
<TYPE>gfloat</TYPE>
<RANGE>[-31,31]</RANGE>
@@ -17799,6 +17829,16 @@
</ARG>
<ARG>
+<NAME>avenc_mpeg1video::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_mp2::bitrate</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
@@ -18659,6 +18699,16 @@
</ARG>
<ARG>
+<NAME>avenc_h263p::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_h263::b-quant-factor</NAME>
<TYPE>gfloat</TYPE>
<RANGE>[-31,31]</RANGE>
@@ -20129,6 +20179,16 @@
</ARG>
<ARG>
+<NAME>avenc_ffv1::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_eac3::bitrate</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
@@ -20209,6 +20269,16 @@
</ARG>
<ARG>
+<NAME>avenc_dvvideo::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_dpx::bitrate</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
@@ -20329,6 +20399,16 @@
</ARG>
<ARG>
+<NAME>avenc_dnxhd::max-threads</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum encode threads</NICK>
+<BLURB>Maximum number of worker threads to spawn. (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>avenc_comfortnoise::bitrate</NAME>
<TYPE>gint</TYPE>
<RANGE>>= 0</RANGE>
diff --git a/docs/plugins/html/gst-libav-plugins-plugin-libav.html b/docs/plugins/html/gst-libav-plugins-plugin-libav.html
index 20eb261..a6939b9 100644
--- a/docs/plugins/html/gst-libav-plugins-plugin-libav.html
+++ b/docs/plugins/html/gst-libav-plugins-plugin-libav.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 85d5f48..57c2239 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer libav 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer libav Plugins 1.0 (1.3.1)
+ for GStreamer libav Plugins 1.0 (1.3.2)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-ffmpeg-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-ffmpeg-plugins/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-libav.xml b/docs/plugins/inspect/plugin-libav.xml
index cb01229..3e9dfae 100644
--- a/docs/plugins/inspect/plugin-libav.xml
+++ b/docs/plugins/inspect/plugin-libav.xml
@@ -3,7 +3,7 @@
<description>All libav codecs and formats (local snapshot)</description>
<filename>../../ext/libav/.libs/libgstlibav.so</filename>
<basename>libgstlibav.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-libav</source>
<package>libav</package>
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index b3ba5c0..94dfa58 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -47,6 +47,7 @@ GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
#define DEFAULT_DEBUG_MV FALSE
#define DEFAULT_MAX_THREADS 0
#define DEFAULT_OUTPUT_CORRUPT TRUE
+#define REQUIRED_POOL_MAX_BUFFERS 32
enum
{
@@ -1065,10 +1066,8 @@ negotiate_failed:
* Sets the skip_frame flag and if things are really bad, skips to the next
* keyframe.
*
- * Returns TRUE if the frame should be decoded, FALSE if the frame can be dropped
- * entirely.
*/
-static gboolean
+static void
gst_ffmpegviddec_do_qos (GstFFMpegVidDec * ffmpegdec,
GstVideoCodecFrame * frame, gboolean * mode_switch)
{
@@ -1077,47 +1076,29 @@ gst_ffmpegviddec_do_qos (GstFFMpegVidDec * ffmpegdec,
*mode_switch = FALSE;
if (frame == NULL)
- goto no_qos;
+ return;
diff =
gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (ffmpegdec),
frame);
/* if we don't have timing info, then we don't do QoS */
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (diff)))
- goto no_qos;
-
- GST_DEBUG_OBJECT (ffmpegdec, "decoding time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (diff));
+ if (G_UNLIKELY(diff == G_MAXINT64))
+ return;
- if (diff > 0)
- goto normal_mode;
+ GST_DEBUG_OBJECT (ffmpegdec, "decoding time %" G_GINT64_FORMAT, diff);
- if (diff <= 0) {
- goto skip_frame;
+ if (diff > 0 && ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
+ ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
+ *mode_switch = TRUE;
+ GST_DEBUG_OBJECT (ffmpegdec, "QOS: normal mode");
}
-no_qos:
- return TRUE;
-
-normal_mode:
- {
- if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
- ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
- *mode_switch = TRUE;
- GST_DEBUG_OBJECT (ffmpegdec, "QOS: normal mode");
- }
- return TRUE;
- }
-skip_frame:
- {
- if (ffmpegdec->context->skip_frame != AVDISCARD_NONREF) {
- ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
- *mode_switch = TRUE;
- GST_DEBUG_OBJECT (ffmpegdec,
- "QOS: hurry up, diff %" G_GINT64_FORMAT " >= 0", diff);
- }
- return FALSE;
+ else if (diff <= 0 && ffmpegdec->context->skip_frame != AVDISCARD_NONREF) {
+ ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
+ *mode_switch = TRUE;
+ GST_DEBUG_OBJECT (ffmpegdec,
+ "QOS: hurry up, diff %" G_GINT64_FORMAT " >= 0", diff);
}
}
@@ -1205,8 +1186,6 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
gint len = -1;
gint have_data;
gboolean mode_switch;
- gboolean decode;
- gint skip_frame = AVDISCARD_DEFAULT;
GstVideoCodecFrame *out_frame;
GstFFMpegVidDecVideoFrame *out_dframe;
AVPacket packet;
@@ -1218,7 +1197,7 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
/* run QoS code, we don't stop decoding the frame when we are late because
* else we might skip a reference frame */
- decode = gst_ffmpegviddec_do_qos (ffmpegdec, frame, &mode_switch);
+ gst_ffmpegviddec_do_qos (ffmpegdec, frame, &mode_switch);
if (ffmpegdec->is_realvideo && data != NULL) {
gint slice_count;
@@ -1238,13 +1217,6 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
}
}
- if (!decode) {
- /* no decoding needed, save previous skip_frame value and brutely skip
- * decoding everything */
- skip_frame = ffmpegdec->context->skip_frame;
- ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
- }
-
if (frame) {
/* save reference to the timing info */
ffmpegdec->context->reordered_opaque = (gint64) frame->system_frame_number;
@@ -1269,10 +1241,6 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
len = avcodec_decode_video2 (ffmpegdec->context,
ffmpegdec->picture, &have_data, &packet);
- /* restore previous state */
- if (!decode)
- ffmpegdec->context->skip_frame = skip_frame;
-
GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d",
len, have_data);
@@ -1693,7 +1661,7 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
GstBufferPool *pool;
guint size, min, max;
GstStructure *config;
- gboolean have_videometa, have_alignment;
+ gboolean have_videometa, have_alignment, update_pool;
GstAllocator *allocator = NULL;
GstAllocationParams params = { 0, 15, 0, 0, };
@@ -1712,6 +1680,22 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+ /* Don't use pool that can't grow, as we don't know how many buffer we'll
+ * need, otherwise we may stall */
+ if (max != 0 && max < REQUIRED_POOL_MAX_BUFFERS) {
+ gst_object_unref (pool);
+ pool = gst_video_buffer_pool_new ();
+ max = 0;
+ update_pool = TRUE;
+
+ /* if there is an allocator, also drop it, as it might be the reason we
+ * have this limit. Default will be used */
+ if (allocator) {
+ gst_object_unref (allocator);
+ allocator = NULL;
+ }
+ }
+
config = gst_buffer_pool_get_config (pool);
gst_buffer_pool_config_set_params (config, state->caps, size, min, max);
/* we are happy with the default allocator but we would like to have 16 bytes
@@ -1799,6 +1783,9 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
/* and store */
gst_buffer_pool_set_config (pool, config);
+ if (update_pool)
+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+
gst_object_unref (pool);
if (allocator)
gst_object_unref (allocator);
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c
index c01efaf..97680db 100644
--- a/ext/libav/gstavvidenc.c
+++ b/ext/libav/gstavvidenc.c
@@ -62,6 +62,7 @@ enum
PROP_ME_METHOD,
PROP_BUFSIZE,
PROP_RTP_PAYLOAD_SIZE,
+ PROP_MAX_THREADS,
PROP_COMPLIANCE,
PROP_CFG_BASE,
};
@@ -174,6 +175,7 @@ gst_ffmpegvidenc_class_init (GstFFMpegVidEncClass * klass)
{
GObjectClass *gobject_class;
GstVideoEncoderClass *venc_class;
+ int caps;
gobject_class = (GObjectClass *) klass;
venc_class = (GstVideoEncoderClass *) klass;
@@ -207,6 +209,14 @@ gst_ffmpegvidenc_class_init (GstFFMpegVidEncClass * klass)
"RTP Payload Size", "Target GOB length", 0, G_MAXINT, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ caps = klass->in_plugin->capabilities;
+ if (caps & (CODEC_CAP_FRAME_THREADS | CODEC_CAP_SLICE_THREADS)) {
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MAX_THREADS,
+ g_param_spec_int ("max-threads", "Maximum encode threads",
+ "Maximum number of worker threads to spawn. (0 = auto)",
+ 0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ }
+
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_COMPLIANCE,
g_param_spec_enum ("compliance", "Compliance",
"Adherence of the encoder to the specifications",
@@ -247,6 +257,7 @@ gst_ffmpegvidenc_init (GstFFMpegVidEnc * ffmpegenc)
ffmpegenc->gop_size = DEFAULT_VIDEO_GOP_SIZE;
ffmpegenc->rtp_payload_size = 0;
ffmpegenc->compliance = FFMPEG_DEFAULT_COMPLIANCE;
+ ffmpegenc->max_threads = 0;
ffmpegenc->lmin = 2;
ffmpegenc->lmax = 31;
@@ -320,6 +331,14 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
GST_DEBUG_OBJECT (ffmpegenc, "Setting avcontext to bitrate %d, gop_size %d",
ffmpegenc->bitrate, ffmpegenc->gop_size);
+ if (ffmpegenc->max_threads == 0) {
+ if (!(oclass->in_plugin->capabilities & CODEC_CAP_AUTO_THREADS))
+ ffmpegenc->context->thread_count = gst_ffmpeg_auto_max_threads ();
+ else
+ ffmpegenc->context->thread_count = 0;
+ } else
+ ffmpegenc->context->thread_count = ffmpegenc->max_threads;
+
/* RTP payload used for GOB production (for Asterisk) */
if (ffmpegenc->rtp_payload_size) {
ffmpegenc->context->rtp_payload_size = ffmpegenc->rtp_payload_size;
@@ -557,7 +576,7 @@ gst_ffmpegvidenc_propose_allocation (GstVideoEncoder * encoder,
static void
gst_ffmpegvidenc_free_avpacket (gpointer pkt)
{
- av_packet_unref ((AVPacket *)pkt);
+ av_packet_unref ((AVPacket *) pkt);
g_slice_free (AVPacket, pkt);
}
@@ -570,7 +589,7 @@ gst_ffmpegvidenc_handle_frame (GstVideoEncoder * encoder,
gint ret = 0, c;
GstVideoInfo *info = &ffmpegenc->input_state->info;
GstVideoFrame vframe;
- AVPacket * pkt;
+ AVPacket *pkt;
int have_data = 0;
if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame))
@@ -757,6 +776,9 @@ gst_ffmpegvidenc_set_property (GObject * object,
case PROP_COMPLIANCE:
ffmpegenc->compliance = g_value_get_enum (value);
break;
+ case PROP_MAX_THREADS:
+ ffmpegenc->max_threads = g_value_get_int (value);
+ break;
default:
if (!gst_ffmpeg_cfg_set_property (object, value, pspec))
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -793,6 +815,9 @@ gst_ffmpegvidenc_get_property (GObject * object,
case PROP_COMPLIANCE:
g_value_set_enum (value, ffmpegenc->compliance);
break;
+ case PROP_MAX_THREADS:
+ g_value_set_int (value, ffmpegenc->max_threads);
+ break;
default:
if (!gst_ffmpeg_cfg_get_property (object, value, pspec))
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/ext/libav/gstavvidenc.h b/ext/libav/gstavvidenc.h
index e841d6c..be7b832 100644
--- a/ext/libav/gstavvidenc.h
+++ b/ext/libav/gstavvidenc.h
@@ -50,6 +50,7 @@ struct _GstFFMpegVidEnc
gint buffer_size;
gint rtp_payload_size;
gint compliance;
+ gint max_threads;
guint8 *working_buf;
gsize working_buf_size;
diff --git a/gst-libav.doap b/gst-libav.doap
index cc74136..073f402 100644
--- a/gst-libav.doap
+++ b/gst-libav.doap
@@ -34,6 +34,16 @@ colorspace conversion elements.
<release>
<Version>
+ <revision>1.3.2</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-05-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.3.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.3.1</revision>
<branch>1.3</branch>
<name></name>
diff --git a/gst-libav.spec b/gst-libav.spec
index b982edc..05c4a00 100644
--- a/gst-libav.spec
+++ b/gst-libav.spec
@@ -4,7 +4,7 @@
%define gst_majorminor 1.0
Name: %{gstreamer}-libav
-Version: 1.3.1
+Version: 1.3.2
Release: 1
Summary: GStreamer Streaming-media framework plug-in using libav (FFmpeg).
Group: Libraries/Multimedia
diff --git a/gst-libs/ext/libav/Changelog b/gst-libs/ext/libav/Changelog
index 29902f4..30e63c9 100644
--- a/gst-libs/ext/libav/Changelog
+++ b/gst-libs/ext/libav/Changelog
@@ -1,6 +1,31 @@
Entries are sorted chronologically from oldest to youngest within each release,
releases are sorted from youngest to oldest.
+version 10.1:
+- pcm-dvd: Fix 20bit decoding (bug/592)
+- avi: Improve non-interleaved detection (bug/666)
+- arm: hpeldsp: fix put_pixels8_y2_{,no_rnd_}armv6
+- arm: hpeldsp: prevent overreads in armv6 asm (bug/646)
+- avfilter: Add missing emms_c when needed
+- rtmpproto: Check the buffer sizes when copying app/playpath strings
+- swscale: Fix an undefined behaviour
+- vp9: Read the frame size as unsigned
+- dcadec: Use correct channel count in stereo downmix check
+- dcadec: Do not decode the XCh extension when downmixing to stereo
+- matroska: add the Opus mapping
+- matroskadec: read the CodecDelay element
+- rtmpproto: Make sure to pass on the error code if read_connect failed
+- lavr: allocate the resampling buffer with a positive size
+- mp3enc: Properly write bitrate value in XING header (debian/736088)
+- golomb: Fix the implementation of get_se_golomb_long
+
+version 10:
+- af_channelmap: fix ONE_STR mapping mode
+- matroskaenc: HEVC fixeswrite private data in hvcC format for HEVC.
+- doc: Point to the correct, actually maintained gas-preprocessor repo
+- http: Add support reading ICY metadata
+- configure: Support older version of openjpeg1
+
version 10~beta2:
- compand audio filter
- and many various smaller fixes, for a full changelog, please refer to:
diff --git a/gst-libs/ext/libav/RELEASE b/gst-libs/ext/libav/RELEASE
index f599e28..ae425d6 100644
--- a/gst-libs/ext/libav/RELEASE
+++ b/gst-libs/ext/libav/RELEASE
@@ -1 +1 @@
-10
+10.1
diff --git a/gst-libs/ext/libav/libavcodec/dcadec.c b/gst-libs/ext/libav/libavcodec/dcadec.c
index 6c240ee..ce8660d 100644
--- a/gst-libs/ext/libav/libavcodec/dcadec.c
+++ b/gst-libs/ext/libav/libavcodec/dcadec.c
@@ -1856,6 +1856,16 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
if (s->amode < 16) {
avctx->channel_layout = dca_core_channel_layout[s->amode];
+ if (s->prim_channels + !!s->lfe > 2 &&
+ avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
+ /*
+ * Neither the core's auxiliary data nor our default tables contain
+ * downmix coefficients for the additional channel coded in the XCh
+ * extension, so when we're doing a Stereo downmix, don't decode it.
+ */
+ s->xch_disable = 1;
+ }
+
#if FF_API_REQUEST_CHANNELS
FF_DISABLE_DEPRECATION_WARNINGS
if (s->xch_present && !s->xch_disable &&
@@ -1886,7 +1896,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
return AVERROR_INVALIDDATA;
- if (s->prim_channels + !!s->lfe > 2 &&
+ if (num_core_channels + !!s->lfe > 2 &&
avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
channels = 2;
s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
@@ -1900,7 +1910,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
s->core_downmix_amode == DCA_STEREO_TOTAL)) {
int sign, code;
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1;
code = s->core_downmix_codes[i][0] & 0x0FF;
s->downmix_coef[i][0] = (!code ? 0.0f :
@@ -1918,19 +1928,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
"Invalid channel mode %d\n", am);
return AVERROR_INVALIDDATA;
}
- if (s->prim_channels + !!s->lfe >
+ if (num_core_channels + !!s->lfe >
FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
avpriv_request_sample(s->avctx, "Downmixing %d channels",
s->prim_channels + !!s->lfe);
return AVERROR_PATCHWELCOME;
}
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
}
}
av_dlog(s->avctx, "Stereo downmix coeffs:\n");
- for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
+ for (i = 0; i < num_core_channels + !!s->lfe; i++) {
av_dlog(s->avctx, "L, input channel %d = %f\n", i,
s->downmix_coef[i][0]);
av_dlog(s->avctx, "R, input channel %d = %f\n", i,
diff --git a/gst-libs/ext/libav/libavcodec/golomb.h b/gst-libs/ext/libav/libavcodec/golomb.h
index ce3500f..1754706 100644
--- a/gst-libs/ext/libav/libavcodec/golomb.h
+++ b/gst-libs/ext/libav/libavcodec/golomb.h
@@ -211,9 +211,9 @@ static inline int get_se_golomb_long(GetBitContext *gb)
unsigned int buf = get_ue_golomb_long(gb);
if (buf & 1)
- buf = -(buf >> 1);
+ buf = (buf + 1) >> 1;
else
- buf = (buf >> 1);
+ buf = -(buf >> 1);
return buf;
}
diff --git a/gst-libs/ext/libav/libavcodec/pcm-dvd.c b/gst-libs/ext/libav/libavcodec/pcm-dvd.c
index 172e93a..0872d29 100644
--- a/gst-libs/ext/libav/libavcodec/pcm-dvd.c
+++ b/gst-libs/ext/libav/libavcodec/pcm-dvd.c
@@ -177,11 +177,11 @@ static void *pcm_dvd_decode_samples(AVCodecContext *avctx, const uint8_t *src,
dst32[2] = bytestream2_get_be16u(&gb) << 16;
dst32[3] = bytestream2_get_be16u(&gb) << 16;
t = bytestream2_get_byteu(&gb);
- *dst32 += (t & 0xf0) << 8;
- *dst32 += (t & 0x0f) << 12;
+ *dst32++ += (t & 0xf0) << 8;
+ *dst32++ += (t & 0x0f) << 12;
t = bytestream2_get_byteu(&gb);
- *dst32 += (t & 0xf0) << 8;
- *dst32 += (t & 0x0f) << 12;
+ *dst32++ += (t & 0xf0) << 8;
+ *dst32++ += (t & 0x0f) << 12;
}
} while (--blocks);
return dst32;
diff --git a/gst-libs/ext/libav/libavcodec/vp9.c b/gst-libs/ext/libav/libavcodec/vp9.c
index c04a3b8..2a6a138 100644
--- a/gst-libs/ext/libav/libavcodec/vp9.c
+++ b/gst-libs/ext/libav/libavcodec/vp9.c
@@ -1198,7 +1198,7 @@ static int vp9_decode_packet(AVCodecContext *avctx, void *frame,
const uint8_t *idx = data + size + 1 - idx_sz;
while (n_frames--) {
- int sz = AV_RL32(idx);
+ unsigned sz = AV_RL32(idx);
if (nbytes < 4)
sz &= (1 << (8 * nbytes)) - 1;
@@ -1206,7 +1206,7 @@ static int vp9_decode_packet(AVCodecContext *avctx, void *frame,
if (sz > size) {
av_log(avctx, AV_LOG_ERROR,
- "Superframe packet size too big: %d > %d\n",
+ "Superframe packet size too big: %u > %d\n",
sz, size);
return AVERROR_INVALIDDATA;
}
diff --git a/gst-libs/ext/libav/libavfilter/af_volume.c b/gst-libs/ext/libav/libavfilter/af_volume.c
index 12d496e..59223e5 100644
--- a/gst-libs/ext/libav/libavfilter/af_volume.c
+++ b/gst-libs/ext/libav/libavfilter/af_volume.c
@@ -278,6 +278,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
}
}
+ emms_c();
+
if (buf != out_buf)
av_frame_free(&buf);
diff --git a/gst-libs/ext/libav/libavfilter/vf_gradfun.c b/gst-libs/ext/libav/libavfilter/vf_gradfun.c
index 79f6790..f7c4372 100644
--- a/gst-libs/ext/libav/libavfilter/vf_gradfun.c
+++ b/gst-libs/ext/libav/libavfilter/vf_gradfun.c
@@ -118,6 +118,7 @@ static void filter(GradFunContext *ctx, uint8_t *dst, uint8_t *src, int width, i
ctx->filter_line(dst + y * dst_linesize, src + y * src_linesize, dc - r / 2, width, thresh, dither[y & 7]);
if (++y >= height) break;
}
+ emms_c();
}
static av_cold int init(AVFilterContext *ctx)
diff --git a/gst-libs/ext/libav/libavfilter/vf_hqdn3d.c b/gst-libs/ext/libav/libavfilter/vf_hqdn3d.c
index cd9f0d2..be6b761 100644
--- a/gst-libs/ext/libav/libavfilter/vf_hqdn3d.c
+++ b/gst-libs/ext/libav/libavfilter/vf_hqdn3d.c
@@ -147,6 +147,7 @@ static void denoise_depth(HQDN3DContext *s,
else
denoise_temporal(src, dst, frame_ant,
w, h, sstride, dstride, temporal, depth);
+ emms_c();
}
#define denoise(...) \
diff --git a/gst-libs/ext/libav/libavformat/avidec.c b/gst-libs/ext/libav/libavformat/avidec.c
index 6f80d21..e851f0b 100644
--- a/gst-libs/ext/libav/libavformat/avidec.c
+++ b/gst-libs/ext/libav/libavformat/avidec.c
@@ -795,7 +795,11 @@ fail:
if (!avi->index_loaded && pb->seekable)
avi_load_index(s);
avi->index_loaded = 1;
- avi->non_interleaved |= guess_ni_flag(s);
+
+ if ((ret = guess_ni_flag(s)) < 0)
+ return ret;
+
+ avi->non_interleaved |= ret;
for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i];
if (st->nb_index_entries)
@@ -1307,6 +1311,64 @@ static int avi_read_idx1(AVFormatContext *s, int size)
return 0;
}
+/* Scan the index and consider any file with streams more than
+ * 2 seconds or 64MB apart non-interleaved. */
+static int check_stream_max_drift(AVFormatContext *s)
+{
+ int64_t min_pos, pos;
+ int i;
+ int *idx = av_mallocz_array(s->nb_streams, sizeof(*idx));
+ if (!idx)
+ return AVERROR(ENOMEM);
+
+ for (min_pos = pos = 0; min_pos != INT64_MAX; pos = min_pos + 1LU) {
+ int64_t max_dts = INT64_MIN / 2;
+ int64_t min_dts = INT64_MAX / 2;
+ int64_t max_buffer = 0;
+
+ min_pos = INT64_MAX;
+
+ for (i = 0; i < s->nb_streams; i++) {
+ AVStream *st = s->streams[i];
+ AVIStream *ast = st->priv_data;
+ int n = st->nb_index_entries;
+ while (idx[i] < n && st->index_entries[idx[i]].pos < pos)
+ idx[i]++;
+ if (idx[i] < n) {
+ int64_t dts;
+ dts = av_rescale_q(st->index_entries[idx[i]].timestamp /
+ FFMAX(ast->sample_size, 1),
+ st->time_base, AV_TIME_BASE_Q);
+ min_dts = FFMIN(min_dts, dts);
+ min_pos = FFMIN(min_pos, st->index_entries[idx[i]].pos);
+ }
+ }
+ for (i = 0; i < s->nb_streams; i++) {
+ AVStream *st = s->streams[i];
+ AVIStream *ast = st->priv_data;
+
+ if (idx[i] && min_dts != INT64_MAX / 2) {
+ int64_t dts;
+ dts = av_rescale_q(st->index_entries[idx[i] - 1].timestamp /
+ FFMAX(ast->sample_size, 1),
+ st->time_base, AV_TIME_BASE_Q);
+ max_dts = FFMAX(max_dts, dts);
+ max_buffer = FFMAX(max_buffer,
+ av_rescale(dts - min_dts,
+ st->codec->bit_rate,
+ AV_TIME_BASE));
+ }
+ }
+ if (max_dts - min_dts > 2 * AV_TIME_BASE ||
+ max_buffer > 1024 * 1024 * 8 * 8) {
+ av_free(idx);
+ return 1;
+ }
+ }
+ av_free(idx);
+ return 0;
+}
+
static int guess_ni_flag(AVFormatContext *s)
{
int i;
@@ -1336,7 +1398,11 @@ static int guess_ni_flag(AVFormatContext *s)
first_end = st->index_entries[n - 1].pos;
}
avio_seek(s->pb, oldpos, SEEK_SET);
- return last_start > first_end;
+
+ if (last_start > first_end)
+ return 1;
+
+ return check_stream_max_drift(s);
}
static int avi_load_index(AVFormatContext *s)
diff --git a/gst-libs/ext/libav/libavformat/matroska.c b/gst-libs/ext/libav/libavformat/matroska.c
index 410e2f4..9628abc 100644
--- a/gst-libs/ext/libav/libavformat/matroska.c
+++ b/gst-libs/ext/libav/libavformat/matroska.c
@@ -32,6 +32,7 @@ const CodecTags ff_mkv_codec_tags[]={
{"A_MPEG/L2" , AV_CODEC_ID_MP2},
{"A_MPEG/L1" , AV_CODEC_ID_MP2},
{"A_MPEG/L3" , AV_CODEC_ID_MP3},
+ {"A_OPUS" , AV_CODEC_ID_OPUS},
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F32LE},
{"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F64LE},
{"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S16BE},
diff --git a/gst-libs/ext/libav/libavformat/matroska.h b/gst-libs/ext/libav/libavformat/matroska.h
index 0dbc724..667f92a 100644
--- a/gst-libs/ext/libav/libavformat/matroska.h
+++ b/gst-libs/ext/libav/libavformat/matroska.h
@@ -86,6 +86,7 @@
#define MATROSKA_ID_CODECINFOURL 0x3B4040
#define MATROSKA_ID_CODECDOWNLOADURL 0x26B240
#define MATROSKA_ID_CODECDECODEALL 0xAA
+#define MATROSKA_ID_CODECDELAY 0x56AA
#define MATROSKA_ID_TRACKNAME 0x536E
#define MATROSKA_ID_TRACKLANGUAGE 0x22B59C
#define MATROSKA_ID_TRACKFLAGENABLED 0xB9
diff --git a/gst-libs/ext/libav/libavformat/matroskadec.c b/gst-libs/ext/libav/libavformat/matroskadec.c
index bcd7d1a..8aae26c 100644
--- a/gst-libs/ext/libav/libavformat/matroskadec.c
+++ b/gst-libs/ext/libav/libavformat/matroskadec.c
@@ -44,6 +44,7 @@
#include "libavutil/avstring.h"
#include "libavutil/lzo.h"
#include "libavutil/dict.h"
+#include "libavutil/mathematics.h"
#if CONFIG_ZLIB
#include <zlib.h>
#endif
@@ -148,6 +149,7 @@ typedef struct {
MatroskaTrackVideo video;
MatroskaTrackAudio audio;
EbmlList encodings;
+ uint64_t codec_delay;
AVStream *stream;
int64_t end_timecode;
@@ -348,6 +350,7 @@ static EbmlSyntax matroska_track[] = {
{ MATROSKA_ID_TRACKTYPE, EBML_UINT, 0, offsetof(MatroskaTrack,type) },
{ MATROSKA_ID_CODECID, EBML_STR, 0, offsetof(MatroskaTrack,codec_id) },
{ MATROSKA_ID_CODECPRIVATE, EBML_BIN, 0, offsetof(MatroskaTrack,codec_priv) },
+ { MATROSKA_ID_CODECDELAY, EBML_UINT, 0, offsetof(MatroskaTrack, codec_delay) },
{ MATROSKA_ID_TRACKLANGUAGE, EBML_UTF8, 0, offsetof(MatroskaTrack,language), {.s="eng"} },
{ MATROSKA_ID_TRACKDEFAULTDURATION, EBML_UINT, 0, offsetof(MatroskaTrack,default_duration) },
{ MATROSKA_ID_TRACKTIMECODESCALE, EBML_FLOAT,0, offsetof(MatroskaTrack,time_scale), {.f=1.0} },
@@ -1658,6 +1661,11 @@ static int matroska_read_header(AVFormatContext *s)
track->time_scale = 1.0;
avpriv_set_pts_info(st, 64, matroska->time_scale*track->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
+ /* convert the delay from ns to the track timebase */
+ track->codec_delay = av_rescale_q(track->codec_delay,
+ (AVRational){ 1, 1000000000 },
+ st->time_base);
+
st->codec->codec_id = codec_id;
st->start_time = 0;
if (strcmp(track->language, "und"))
@@ -2190,7 +2198,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
if (cluster_time != (uint64_t)-1
&& (block_time >= 0 || cluster_time >= -block_time)) {
- timecode = cluster_time + block_time;
+ timecode = cluster_time + block_time - track->codec_delay;
if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE
&& timecode < track->end_timecode)
is_keyframe = 0; /* overlapping subtitles are not key frame */
diff --git a/gst-libs/ext/libav/libavformat/mp3enc.c b/gst-libs/ext/libav/libavformat/mp3enc.c
index 46889fc..9326258 100644
--- a/gst-libs/ext/libav/libavformat/mp3enc.c
+++ b/gst-libs/ext/libav/libavformat/mp3enc.c
@@ -119,8 +119,11 @@ static void mp3_write_xing(AVFormatContext *s)
MPADecodeHeader mpah;
int srate_idx, i, channels;
int bitrate_idx;
+ int best_bitrate_idx;
+ int best_bitrate_error = INT_MAX;
int xing_offset;
int ver = 0;
+ int lsf, bytes_needed;
if (!s->pb->seekable || !mp3->write_xing)
return;
@@ -150,21 +153,51 @@ static void mp3_write_xing(AVFormatContext *s)
return;
}
- /* 64 kbps frame, should be large enough */
- bitrate_idx = (ver == 3) ? 5 : 8;
-
/* dummy MPEG audio header */
header = 0xff << 24; // sync
header |= (0x7 << 5 | ver << 3 | 0x1 << 1 | 0x1) << 16; // sync/audio-version/layer 3/no crc*/
- header |= (bitrate_idx << 4 | srate_idx << 2) << 8;
+ header |= (srate_idx << 2) << 8;
header |= channels << 6;
+
+ lsf = !((header & (1 << 20) && header & (1 << 19)));
+
+ xing_offset = xing_offtbl[ver != 3][channels == 1];
+ bytes_needed = 4 // header
+ + xing_offset
+ + 4 // xing tag
+ + 4 // frames/size/toc flags
+ + 4 // frames
+ + 4 // size
+ + XING_TOC_SIZE; // toc
+
+ for (bitrate_idx = 1; bitrate_idx < 15; bitrate_idx++) {
+ int bit_rate = 1000 * avpriv_mpa_bitrate_tab[lsf][3 - 1][bitrate_idx];
+ int error = FFABS(bit_rate - codec->bit_rate);
+
+ if (error < best_bitrate_error){
+ best_bitrate_error = error;
+ best_bitrate_idx = bitrate_idx;
+ }
+ }
+
+ for (bitrate_idx = best_bitrate_idx; bitrate_idx < 15; bitrate_idx++) {
+ int32_t mask = bitrate_idx << (4 + 8);
+ header |= mask;
+
+ avpriv_mpegaudio_decode_header(&mpah, header);
+
+ if (bytes_needed <= mpah.frame_size)
+ break;
+
+ header &= ~mask;
+ }
+
avio_wb32(s->pb, header);
avpriv_mpegaudio_decode_header(&mpah, header);
av_assert0(mpah.frame_size >= XING_MAX_SIZE);
- xing_offset = xing_offtbl[ver != 3][codec->channels == 1];
ffio_fill(s->pb, 0, xing_offset);
mp3->xing_offset = avio_tell(s->pb);
ffio_wfourcc(s->pb, "Xing");
@@ -180,8 +213,7 @@ static void mp3_write_xing(AVFormatContext *s)
for (i = 0; i < XING_TOC_SIZE; i++)
avio_w8(s->pb, 255 * i / XING_TOC_SIZE);
- mpah.frame_size -= 4 + xing_offset + 4 + 4 + 4 + 4 + XING_TOC_SIZE;
- ffio_fill(s->pb, 0, mpah.frame_size);
+ ffio_fill(s->pb, 0, mpah.frame_size - bytes_needed);
}
/*
diff --git a/gst-libs/ext/libav/libavformat/rtmpproto.c b/gst-libs/ext/libav/libavformat/rtmpproto.c
index 51381a4..ead5ccd 100644
--- a/gst-libs/ext/libav/libavformat/rtmpproto.c
+++ b/gst-libs/ext/libav/libavformat/rtmpproto.c
@@ -2483,10 +2483,10 @@ reconnect:
fname = strchr(p + 1, '/');
if (!fname || (c && c < fname)) {
fname = p + 1;
- av_strlcpy(rt->app, path + 1, p - path);
+ av_strlcpy(rt->app, path + 1, FFMIN(p - path, APP_MAX_LENGTH));
} else {
fname++;
- av_strlcpy(rt->app, path + 1, fname - path - 1);
+ av_strlcpy(rt->app, path + 1, FFMIN(fname - path - 1, APP_MAX_LENGTH));
}
}
}
@@ -2555,7 +2555,7 @@ reconnect:
if ((ret = gen_connect(s, rt)) < 0)
goto fail;
} else {
- if (read_connect(s, s->priv_data) < 0)
+ if ((ret = read_connect(s, s->priv_data)) < 0)
goto fail;
}
diff --git a/gst-libs/ext/libav/libavresample/utils.c b/gst-libs/ext/libav/libavresample/utils.c
index 2dd3d06..bc295d6 100644
--- a/gst-libs/ext/libav/libavresample/utils.c
+++ b/gst-libs/ext/libav/libavresample/utils.c
@@ -184,7 +184,7 @@ int avresample_open(AVAudioResampleContext *avr)
}
if (avr->resample_needed) {
avr->resample_out_buffer = ff_audio_data_alloc(avr->out_channels,
- 0, avr->internal_sample_fmt,
+ 1024, avr->internal_sample_fmt,
"resample_out_buffer");
if (!avr->resample_out_buffer) {
ret = AVERROR(EINVAL);
diff --git a/gst-libs/ext/libav/libswscale/utils.c b/gst-libs/ext/libav/libswscale/utils.c
index 2111fc2..ea5f368 100644
--- a/gst-libs/ext/libav/libswscale/utils.c
+++ b/gst-libs/ext/libav/libswscale/utils.c
@@ -326,7 +326,7 @@ static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos,
xDstInSrc = xInc - 0x10000;
for (i = 0; i < dstW; i++) {
- int xx = (xDstInSrc - ((filterSize - 2) << 16)) / (1 << 17);
+ int xx = (xDstInSrc - ((int64_t)(filterSize - 2) << 16)) / (1 << 17);
int j;
(*filterPos)[i] = xx;
for (j = 0; j < filterSize; j++) {