aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-06-22 19:23:12 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-06-22 19:23:12 +0200
commitdb79c75633528e54ef5c853c23c52a684eb06dcf (patch)
tree7e32941b29ed994e15841ce4cdf1bb0c850bed61
parent26f5ba92fdc5af292f474e01f63b91671f2902dd (diff)
Imported Upstream version 1.3.3upstream/1.3.3
-rw-r--r--ChangeLog127
-rw-r--r--NEWS25
-rwxr-xr-xconfigure38
-rw-r--r--configure.ac8
-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.xml22
-rw-r--r--ext/libav/gstavaudenc.c5
-rw-r--r--ext/libav/gstavcodecmap.c46
-rw-r--r--ext/libav/gstavdemux.c65
-rw-r--r--ext/libav/gstavvidenc.c82
-rw-r--r--gst-libav.doap10
-rw-r--r--gst-libav.spec2
13 files changed, 284 insertions, 150 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d4cb05..af11b3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,132 @@
+=== release 1.3.3 ===
+
+2014-06-22 Sebastian Dröge <slomo@coaxion.net>
+
+ * configure.ac:
+ releasing 1.3.3
+
+2014-06-21 18:29:32 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/libav/gstavvidenc.c:
+ avvidenc: Make sure to fixate caps before setting them on the pad
+ After the recent addition of negotiation support for MPEG4 part 2
+ profiles via caps it can happen that the generated caps at this
+ point still contain multiple profiles. For example if downstream
+ does not care. Just fixate anything here and use those caps.
+
+2014-06-06 16:52:28 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ avcodecmap: place supported profiles in mpeg4 caps
+ Place the supported profiles in the srcpad caps of the mpeg4 encoder.
+
+2014-06-06 16:25:43 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ avcodecmap: remove deprecated media types
+ Remove x-xvid and x-3ivx. The last place where they were used are
+ in the srcpad caps of the decoder but since the decoder will never
+ actually output those caps we can safely remove them.
+
+2014-06-06 16:19:07 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ codecmap: don't expose more deprecated media types
+ x-xvid is deprecated, we don't want to expose it on the encoder, just
+ leave it only exposed on the decoder.
+
+2014-06-06 16:16:27 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ Revert "avcodecmap: do more reverse mapping of MPEG4"
+ This reverts commit e066785ad05f9119e3c1eded46260bcabd556b4d.
+ x-xvid and x-3ivx are removed, we don't want to expose them again.
+
+2014-06-06 12:40:57 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/libav/gstavaudenc.c:
+ avaudenc: add a comment about using -1 in _finish_frame
+ See https://bugzilla.gnome.org/show_bug.cgi?id=729268
+
+2014-04-30 15:30:45 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/libav/gstavaudenc.c:
+ avaudenc: avoid using wrong number of samples
+ If audio_in is NULL, we'll send a NULL frame to libav, to flush
+ the codec. In that case, we won't know how many samples the codec
+ will have used, so we use -1 (for don't know) when letting the
+ base class know about the buffer.
+ Coverity 1195177
+
+2014-06-02 09:27:17 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/libav/gstavvidenc.c:
+ avvidenc: Fix indention and "bracketing" of goto labels
+ Should fix CID 1219865, which looks like the code analysis
+ algorithm was just confused.
+
+2014-05-29 18:24:20 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ avcodecmap: handle simple and advanced-simple profile in MPEG4
+ Always enable 4MV flag for MPEG4
+ Pare the profile property and enable more features for advanced-simple
+ profile.
+ video/x-xvid is advanced-simple profile so enable more features.
+ We now also support encoding of video/x-xvid so add this to the caps.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=651320
+
+2014-05-29 18:16:42 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavvidenc.c:
+ avvidenc: do all negotiation before opening the decoder
+ We first want to complete negotiation before opening the encoder.
+ Negotiation might configure flags and other things that might be needed
+ when opening the encoder.
+
+2014-05-29 17:00:23 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * ext/libav/gstavcodecmap.c:
+ avcodecmap: do more reverse mapping of MPEG4
+ We previously mapped some caps to MPEG4 and codec_tag so we can use the
+ codec_tag again to map to the original caps.
+
+2014-05-26 16:04:50 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/libav/gstavdemux.c:
+ avdemux: use GstFlowCombiner
+ To remove replicated code from all demuxers to a single standard way
+ of aggregating flow returns
+
+2014-05-26 16:02:11 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/libav/gstavdemux.c:
+ avdemux: remove legacy check from pad-alloc times
+ The 'no_buffer' error case is from the 0.10 era when a pad_alloc was
+ made before decoding the data and avdemuxer could check again the
+ flow returns for a not-linked. This isn't a valid use case anymore in
+ 1.0
+
+2014-05-21 13:23:36 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
=== release 1.3.2 ===
-2014-05-21 Sebastian Dröge <slomo@coaxion.net>
+2014-05-21 13:06:36 +0200 Sebastian Dröge <sebastian@centricular.com>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
* configure.ac:
- releasing 1.3.2
+ * docs/plugins/gst-libav-plugins.args:
+ * docs/plugins/inspect-build.stamp:
+ * docs/plugins/inspect.stamp:
+ * docs/plugins/inspect/plugin-libav.xml:
+ * gst-libav.doap:
+ Release 1.3.2
2014-05-21 10:53:31 +0200 Sebastian Dröge <sebastian@centricular.com>
diff --git a/NEWS b/NEWS
index dc015a8..5d90b41 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer Libav Plugins 1.3.2
+This is GStreamer Libav Plugins 1.3.3
Changes since 1.2:
@@ -30,6 +30,10 @@ New API:
caps.
• GstCollectPads has support for flushing and a default handler for
SEEK events now.
+ • New GstFlowAggregator helper object that simplifies handling of
+ flow returns in elements with multiple source pads. Additionally
+ GstPad now always stores the last flow return and provides an
+ API to retrieve it.
• GstSegment has new API to offset the running time by a specific
value and this is used in GstPad to allow positive and negative
offsets in gst_pad_set_offset() in all situations.
@@ -43,6 +47,7 @@ New API:
• Support for tiled, raw video formats has been added.
• GstVideoDecoder and GstAudioDecoder have API to help aggregating tag
events and merge custom tags into them consistently.
+ • GstBufferPool has support for flushing now.
• playbin/playsink has support for application provided audio and video
filters.
• GstDiscoverer has new and simplified API to get details about missing
@@ -54,6 +59,10 @@ New API:
DispManX (Raspberry Pi), EAGL (iOS), WGL (Windows) and generic X11,
Wayland and EGL platforms.
This replaces eglglessink and also is supposed to replace osxvideosink.
+ • New GstAggregator base class in gst-plugins-bad. This is supposed to
+ replace GstCollectPads in the future and fix long-known shortcomings
+ in its API. Together with the base class some elements are provided
+ already, like a videomixer (compositor).
Major changes:
@@ -97,7 +106,8 @@ Major changes:
∘ dvbsrc supports more delivery mechanisms and other features
now, including DVB S2 and T2 support.
∘ The MPEGTS library has support for many more descriptors.
- ∘ Major improvements to tsdemux, especially time related.
+ ∘ Major improvements to tsdemux and tsparse, especially time and
+ seeking related.
∘ souphttpsrc now has support for keep-alive connections,
compression, configurable number of retries and configuration
for SSL certificate validation.
@@ -110,9 +120,16 @@ Major changes:
finish.
∘ videoflip can automatically flip based on the orientation tag.
∘ openjpeg supports the OpenJPEG2 API.
+ ∘ waylandsink was refactored and should be more useful now. It also
+ includes a small library which most likely is going to be removed
+ in the future and will result in extensions to the GstVideoOverlay
+ interface.
∘ gst-rtsp-server supports SRTP and MIKEY now.
+ ∘ gst-libav encoders are now negotiating any profile/level settings
+ with downstream via caps.
∘ Lots of fixes for coverity warnings all over the place.
- ∘ 400+ fixed bug reports, and many other bug fixes and other
+ ∘ Negotiation related performance improvements.
+ ∘ 500+ fixed bug reports, and many other bug fixes and other
improvements everywhere that had no bug report.
Things to look out for:
@@ -120,3 +137,5 @@ 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.
+ • The GstDeviceMonitor API will likely change slightly before the
+ 1.4.0 release.
diff --git a/configure b/configure
index d337b55..fb5eb42 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.2.
+# Generated by GNU Autoconf 2.69 for GStreamer libav 1.3.3.
#
# 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.2'
-PACKAGE_STRING='GStreamer libav 1.3.2'
+PACKAGE_VERSION='1.3.3'
+PACKAGE_STRING='GStreamer libav 1.3.3'
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.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer libav 1.3.3 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.2:";;
+ short | recursive ) echo "Configuration of GStreamer libav 1.3.3:";;
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.2
+GStreamer libav configure 1.3.3
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.2, which was
+It was created by GStreamer libav $as_me 1.3.3, 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.2'
+ VERSION='1.3.3'
cat >>confdefs.h <<_ACEOF
@@ -3338,9 +3338,9 @@ fi
- 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)
+ PACKAGE_VERSION_MAJOR=$(echo 1.3.3 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.3.3 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.3.3 | 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.2 | cut -d'.' -f4)
+ NANO=$(echo 1.3.3 | 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=302
+ GST_CURRENT=303
GST_REVISION=0
- GST_AGE=302
- GST_LIBVERSION=302:0:302
+ GST_AGE=303
+ GST_LIBVERSION=303:0:303
@@ -12331,8 +12331,8 @@ CC="$lt_save_CC"
-GST_REQ=1.3.2
-GST_PBREQ=1.3.2
+GST_REQ=1.3.3
+GST_PBREQ=1.3.3
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.2, which was
+This file was extended by GStreamer libav $as_me 1.3.3, 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.2
+GStreamer libav config.status 1.3.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 7355af5..4e37db2 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.2,
+AC_INIT(GStreamer libav, 1.3.3,
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, 302, 0, 302)
+AS_LIBTOOL(GST, 303, 0, 303)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.3.2
-GST_PBREQ=1.3.2
+GST_REQ=1.3.3
+GST_PBREQ=1.3.3
ORC_REQ=0.4.16
ORC_CHECK([$ORC_REQ])
diff --git a/docs/plugins/html/gst-libav-plugins-plugin-libav.html b/docs/plugins/html/gst-libav-plugins-plugin-libav.html
index a6939b9..17c09ea 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.2</td>
+<td>1.3.3</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 57c2239..c17f315 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.2)
+ for GStreamer libav Plugins 1.0 (1.3.3)
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 3e9dfae..e844f47 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.2</version>
+ <version>1.3.3</version>
<license>GPL</license>
<source>gst-libav</source>
<package>libav</package>
@@ -3191,7 +3191,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)[ 4, 5 ]; video/x-xvid; video/x-3ivx</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)[ 4, 5 ]</details>
</caps>
<caps>
<name>src</name>
@@ -7109,7 +7109,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5</details>
</caps>
</pads>
</element>
@@ -7781,7 +7781,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au</details>
</caps>
<caps>
<name>src</name>
@@ -7808,7 +7808,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au</details>
</caps>
<caps>
<name>src</name>
@@ -8009,7 +8009,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5</details>
</caps>
<caps>
<name>src</name>
@@ -8426,7 +8426,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5</details>
</caps>
<caps>
<name>src</name>
@@ -8501,7 +8501,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/x-svq, svqversion=(int)1; video/x-svq, svqversion=(int)3; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)8/9, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)32/27, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)8/9, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)32/27, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)1280, height=(int)1080, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)1280, height=(int)1080, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)3/2, systemstream=(boolean)false; video/x-dv, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)60000/1001, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)60000/1001, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)50/1, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)50/1, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; image/jpeg, parsed=(boolean)true</details>
+ <details>video/x-svq, svqversion=(int)1; video/x-svq, svqversion=(int)3; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5; video/x-h263, width=(int)352, height=(int)288, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)704, height=(int)576, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)1408, height=(int)1152, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, width=(int)128, height=(int)96, framerate=(fraction)[ 0/1, 2147483647/1 ], variant=(string)itu, h263version=(string)h263; video/x-h263, variant=(string)itu, h263version=(string)h263p; video/x-h264, alignment=(string)au; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)8/9, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)32/27, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)8/9, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)480, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)32/27, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)16/15, systemstream=(boolean)false; video/x-dv, width=(int)720, height=(int)576, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)64/45, systemstream=(boolean)false; video/x-dv, width=(int)1280, height=(int)1080, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)1280, height=(int)1080, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)3/2, systemstream=(boolean)false; video/x-dv, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)1440, height=(int)1080, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)60000/1001, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)60000/1001, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)50/1, pixel-aspect-ratio=(fraction)1/1, systemstream=(boolean)false; video/x-dv, width=(int)960, height=(int)720, framerate=(fraction)50/1, pixel-aspect-ratio=(fraction)4/3, systemstream=(boolean)false; image/jpeg, parsed=(boolean)true</details>
</caps>
<caps>
<name>src</name>
@@ -8576,7 +8576,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5; video/x-h264, alignment=(string)au; image/jpeg, parsed=(boolean)true</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5; video/x-h264, alignment=(string)au; image/jpeg, parsed=(boolean)true</details>
</caps>
<caps>
<name>src</name>
@@ -8732,7 +8732,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5</details>
</caps>
<caps>
<name>src</name>
@@ -8801,7 +8801,7 @@
<name>video_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false; video/x-divx, divxversion=(int)5</details>
+ <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string){ simple, advanced-simple }; video/x-divx, divxversion=(int)5</details>
</caps>
<caps>
<name>src</name>
diff --git a/ext/libav/gstavaudenc.c b/ext/libav/gstavaudenc.c
index fcb176d..0408104 100644
--- a/ext/libav/gstavaudenc.c
+++ b/ext/libav/gstavaudenc.c
@@ -553,7 +553,10 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
pkt, gst_ffmpegaudenc_free_avpacket);
codec = ffmpegaudenc->context->codec;
- if ((codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) {
+ if ((codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE) || !audio_in) {
+ /* FIXME: Not really correct, as -1 means "all the samples we got
+ given so far", which may not be true depending on the codec,
+ but we have no way to know AFAICT */
ret = gst_audio_encoder_finish_frame (enc, outbuf, -1);
} else {
ret = gst_audio_encoder_finish_frame (enc, outbuf, frame.nb_samples);
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
index 11fb40a..0c53d10 100644
--- a/ext/libav/gstavcodecmap.c
+++ b/ext/libav/gstavcodecmap.c
@@ -978,7 +978,7 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
break;
case GST_MAKE_FOURCC ('m', 'p', '4', 'v'):
default:
- /* FIXME: bitrate */
+ /* FIXME: bitrate. libav doesn't expose the used profile and level */
caps =
gst_ff_vid_caps_new (context, NULL, codec_id, encode,
"video/mpeg", "systemstream", G_TYPE_BOOLEAN, FALSE,
@@ -991,17 +991,28 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
gst_ff_vid_caps_new (context, NULL, codec_id, encode, "video/mpeg",
"mpegversion", G_TYPE_INT, 4, "systemstream", G_TYPE_BOOLEAN, FALSE,
NULL);
+
if (encode) {
+ GValue arr = { 0, };
+ GValue item = { 0, };
+
+ g_value_init (&arr, GST_TYPE_LIST);
+ g_value_init (&item, G_TYPE_STRING);
+ g_value_set_string (&item, "simple");
+ gst_value_list_append_value (&arr, &item);
+ g_value_set_string (&item, "advanced-simple");
+ gst_value_list_append_value (&arr, &item);
+ g_value_unset (&item);
+
+ gst_caps_set_value (caps, "profile", &arr);
+ g_value_unset (&arr);
+
gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
encode, "video/x-divx", "divxversion", G_TYPE_INT, 5, NULL));
} else {
gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
encode, "video/x-divx", "divxversion", GST_TYPE_INT_RANGE, 4,
5, NULL));
- gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
- encode, "video/x-xvid", NULL));
- gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
- encode, "video/x-3ivx", NULL));
}
}
break;
@@ -2934,16 +2945,23 @@ gst_ffmpeg_caps_with_codecid (enum AVCodecID codec_id,
{
const gchar *mime = gst_structure_get_name (str);
+ context->flags |= CODEC_FLAG_4MV;
+
if (!strcmp (mime, "video/x-divx"))
context->codec_tag = GST_MAKE_FOURCC ('D', 'I', 'V', 'X');
- else if (!strcmp (mime, "video/x-xvid"))
- context->codec_tag = GST_MAKE_FOURCC ('X', 'V', 'I', 'D');
- else if (!strcmp (mime, "video/x-3ivx"))
- context->codec_tag = GST_MAKE_FOURCC ('3', 'I', 'V', '1');
- else if (!strcmp (mime, "video/mpeg"))
+ else if (!strcmp (mime, "video/mpeg")) {
+ const gchar *profile;
+
context->codec_tag = GST_MAKE_FOURCC ('m', 'p', '4', 'v');
- }
+
+ profile = gst_structure_get_string (str, "profile");
+ if (profile) {
+ if (g_strcmp0 (profile, "advanced-simple") == 0)
+ context->flags |= CODEC_FLAG_GMC | CODEC_FLAG_QPEL;
+ }
+ }
break;
+ }
case AV_CODEC_ID_SVQ3:
/* FIXME: this is a workaround for older gst-plugins releases
@@ -3734,12 +3752,6 @@ gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context)
}
if (id != AV_CODEC_ID_NONE)
video = TRUE;
- } else if (!strcmp (mimetype, "video/x-3ivx")) {
- id = AV_CODEC_ID_MPEG4;
- video = TRUE;
- } else if (!strcmp (mimetype, "video/x-xvid")) {
- id = AV_CODEC_ID_MPEG4;
- video = TRUE;
} else if (!strcmp (mimetype, "video/x-ffv")) {
gint ffvversion = 0;
diff --git a/ext/libav/gstavdemux.c b/ext/libav/gstavdemux.c
index c645069..917838c 100644
--- a/ext/libav/gstavdemux.c
+++ b/ext/libav/gstavdemux.c
@@ -28,6 +28,7 @@
#include <libavformat/avformat.h>
/* #include <ffmpeg/avi.h> */
#include <gst/gst.h>
+#include <gst/base/gstflowcombiner.h>
#include "gstav.h"
#include "gstavcodecmap.h"
@@ -49,7 +50,6 @@ struct _GstFFStream
GstClockTime last_ts;
gboolean discont;
gboolean eos;
- GstFlowReturn last_flow;
GstTagList *tags; /* stream tags */
};
@@ -69,6 +69,8 @@ struct _GstFFMpegDemux
GstFFStream *streams[MAX_STREAMS];
+ GstFlowCombiner *flowcombiner;
+
gint videopads, audiopads;
GstClockTime start_time;
@@ -282,6 +284,8 @@ gst_ffmpegdemux_init (GstFFMpegDemux * demux)
demux->seek_event = NULL;
gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+ demux->flowcombiner = gst_flow_combiner_new ();
+
/* push based data */
g_mutex_init (&demux->ffpipe.tlock);
g_cond_init (&demux->ffpipe.cond);
@@ -301,6 +305,8 @@ gst_ffmpegdemux_finalize (GObject * object)
demux = (GstFFMpegDemux *) object;
+ gst_flow_combiner_free (demux->flowcombiner);
+
g_mutex_clear (&demux->ffpipe.tlock);
g_cond_clear (&demux->ffpipe.cond);
gst_object_unref (demux->ffpipe.adapter);
@@ -326,8 +332,10 @@ gst_ffmpegdemux_close (GstFFMpegDemux * demux)
stream = demux->streams[n];
if (stream) {
- if (stream->pad)
+ if (stream->pad) {
+ gst_flow_combiner_remove_pad (demux->flowcombiner, stream->pad);
gst_element_remove_pad (GST_ELEMENT (demux), stream->pad);
+ }
if (stream->tags)
gst_tag_list_unref (stream->tags);
g_free (stream);
@@ -602,15 +610,9 @@ gst_ffmpegdemux_perform_seek (GstFFMpegDemux * demux, GstEvent * event)
/* and prepare to continue streaming */
if (flush) {
- gint n;
-
/* send flush stop, peer will accept data and events again. We
* are not yet providing data as we still have the STREAM_LOCK. */
gst_ffmpegdemux_push_event (demux, gst_event_new_flush_stop (TRUE));
- for (n = 0; n < MAX_STREAMS; ++n) {
- if (demux->streams[n])
- demux->streams[n]->last_flow = GST_FLOW_OK;
- }
}
/* if successfull seek, we update our real segment and push
* out the new segment. */
@@ -890,34 +892,6 @@ gst_ffmpegdemux_src_convert (GstPad * pad,
}
#endif
-static GstFlowReturn
-gst_ffmpegdemux_aggregated_flow (GstFFMpegDemux * demux)
-{
- gint n;
- GstFlowReturn res = GST_FLOW_OK;
- gboolean have_ok = FALSE;
-
- for (n = 0; n < MAX_STREAMS; n++) {
- GstFFStream *s = demux->streams[n];
-
- if (s) {
- res = MIN (res, s->last_flow);
-
- if (s->last_flow == GST_FLOW_OK)
- have_ok = TRUE;
- }
- }
-
- /* NOT_LINKED is OK, if at least one pad is linked */
- if (res == GST_FLOW_NOT_LINKED && have_ok)
- res = GST_FLOW_OK;
-
- GST_DEBUG_OBJECT (demux, "Returning aggregated value of %s",
- gst_flow_get_name (res));
-
- return res;
-}
-
static gchar *
gst_ffmpegdemux_create_padname (const gchar * templ, gint n)
{
@@ -964,7 +938,6 @@ gst_ffmpegdemux_get_stream (GstFFMpegDemux * demux, AVStream * avstream)
stream->discont = TRUE;
stream->avstream = avstream;
stream->last_ts = GST_CLOCK_TIME_NONE;
- stream->last_flow = GST_FLOW_OK;
stream->tags = NULL;
switch (ctx->codec_type) {
@@ -1050,6 +1023,7 @@ gst_ffmpegdemux_get_stream (GstFFMpegDemux * demux, AVStream * avstream)
/* activate and add */
gst_element_add_pad (GST_ELEMENT (demux), pad);
+ gst_flow_combiner_add_pad (demux->flowcombiner, pad);
/* metadata */
if ((codec = gst_ffmpeg_get_codecid_longname (ctx->codec_id))) {
@@ -1359,6 +1333,7 @@ gst_ffmpegdemux_loop (GstFFMpegDemux * demux)
GstClockTime timestamp, duration;
gint outsize;
gboolean rawvideo;
+ GstFlowReturn stream_last_flow;
/* open file if we didn't so already */
if (!demux->opened)
@@ -1430,9 +1405,6 @@ gst_ffmpegdemux_loop (GstFFMpegDemux * demux)
outbuf = gst_buffer_new_and_alloc (outsize);
- if ((ret = gst_ffmpegdemux_aggregated_flow (demux)) != GST_FLOW_OK)
- goto no_buffer;
-
/* copy the data from packet into the target buffer
* and do conversions for raw video packets */
if (rawvideo) {
@@ -1484,13 +1456,13 @@ gst_ffmpegdemux_loop (GstFFMpegDemux * demux)
"Sending out buffer time:%" GST_TIME_FORMAT " size:%" G_GSIZE_FORMAT,
GST_TIME_ARGS (timestamp), gst_buffer_get_size (outbuf));
- ret = stream->last_flow = gst_pad_push (srcpad, outbuf);
+ ret = stream_last_flow = gst_pad_push (srcpad, outbuf);
/* if a pad is in e.g. WRONG_STATE, we want to pause to unlock the STREAM_LOCK */
- if ((ret != GST_FLOW_OK)
- && ((ret = gst_ffmpegdemux_aggregated_flow (demux)) != GST_FLOW_OK)) {
+ if (((ret = gst_flow_combiner_update_flow (demux->flowcombiner,
+ ret)) != GST_FLOW_OK)) {
GST_WARNING_OBJECT (demux, "stream_movi flow: %s / %s",
- gst_flow_get_name (stream->last_flow), gst_flow_get_name (ret));
+ gst_flow_get_name (stream_last_flow), gst_flow_get_name (ret));
goto pause;
}
@@ -1582,11 +1554,6 @@ drop:
goto done;
}
}
-no_buffer:
- {
- av_free_packet (&pkt);
- goto pause;
- }
}
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c
index 97680db..95b0a0a 100644
--- a/ext/libav/gstavvidenc.c
+++ b/ext/libav/gstavvidenc.c
@@ -433,24 +433,6 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
: ffmpegenc->max_key_interval;
}
- /* open codec */
- if (gst_ffmpeg_avcodec_open (ffmpegenc->context, oclass->in_plugin) < 0)
- goto open_codec_fail;
-
- /* second pass stats buffer no longer needed */
- if (ffmpegenc->context->stats_in)
- g_free (ffmpegenc->context->stats_in);
-
- /* is the colourspace correct? */
- if (pix_fmt != ffmpegenc->context->pix_fmt)
- goto pix_fmt_err;
-
- /* we may have failed mapping caps to a pixfmt,
- * and quite some codecs do not make up their own mind about that
- * in any case, _NONE can never work out later on */
- if (pix_fmt == PIX_FMT_NONE)
- goto bad_input_fmt;
-
/* some codecs support more than one format, first auto-choose one */
GST_DEBUG_OBJECT (ffmpegenc, "picking an output format ...");
allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
@@ -479,9 +461,29 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
gst_caps_unref (other_caps);
if (gst_caps_is_empty (icaps)) {
gst_caps_unref (icaps);
- return FALSE;
+ goto unsupported_codec;
}
- icaps = gst_caps_truncate (icaps);
+ icaps = gst_caps_fixate (icaps);
+
+ GST_DEBUG_OBJECT (ffmpegenc, "codec flags 0x%08x", ffmpegenc->context->flags);
+
+ /* open codec */
+ if (gst_ffmpeg_avcodec_open (ffmpegenc->context, oclass->in_plugin) < 0)
+ goto open_codec_fail;
+
+ /* is the colourspace correct? */
+ if (pix_fmt != ffmpegenc->context->pix_fmt)
+ goto pix_fmt_err;
+
+ /* we may have failed mapping caps to a pixfmt,
+ * and quite some codecs do not make up their own mind about that
+ * in any case, _NONE can never work out later on */
+ if (pix_fmt == PIX_FMT_NONE)
+ goto bad_input_fmt;
+
+ /* second pass stats buffer no longer needed */
+ if (ffmpegenc->context->stats_in)
+ g_free (ffmpegenc->context->stats_in);
/* Store input state and set output state */
if (ffmpegenc->input_state)
@@ -512,52 +514,50 @@ file_read_err:
return FALSE;
}
+insane_timebase:
+ {
+ GST_ERROR_OBJECT (ffmpegenc, "Rejecting time base %d/%d",
+ ffmpegenc->context->time_base.den, ffmpegenc->context->time_base.num);
+ goto cleanup_stats_in;
+ }
+unsupported_codec:
+ {
+ GST_DEBUG ("Unsupported codec - no caps found");
+ goto cleanup_stats_in;
+ }
open_codec_fail:
{
- gst_ffmpeg_avcodec_close (ffmpegenc->context);
- if (avcodec_get_context_defaults3 (ffmpegenc->context,
- oclass->in_plugin) < 0)
- GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
- if (ffmpegenc->context->stats_in)
- g_free (ffmpegenc->context->stats_in);
GST_DEBUG_OBJECT (ffmpegenc, "avenc_%s: Failed to open libav codec",
oclass->in_plugin->name);
- return FALSE;
+ goto close_codec;
}
pix_fmt_err:
{
- gst_ffmpeg_avcodec_close (ffmpegenc->context);
- if (avcodec_get_context_defaults3 (ffmpegenc->context,
- oclass->in_plugin) < 0)
- GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
GST_DEBUG_OBJECT (ffmpegenc,
"avenc_%s: AV wants different colourspace (%d given, %d wanted)",
oclass->in_plugin->name, pix_fmt, ffmpegenc->context->pix_fmt);
- return FALSE;
+ goto close_codec;
}
bad_input_fmt:
{
GST_DEBUG_OBJECT (ffmpegenc, "avenc_%s: Failed to determine input format",
oclass->in_plugin->name);
- return FALSE;
+ goto close_codec;
}
-
-unsupported_codec:
+close_codec:
{
gst_ffmpeg_avcodec_close (ffmpegenc->context);
if (avcodec_get_context_defaults3 (ffmpegenc->context,
oclass->in_plugin) < 0)
GST_DEBUG_OBJECT (ffmpegenc, "Failed to set context defaults");
- GST_DEBUG ("Unsupported codec - no caps found");
- return FALSE;
+ goto cleanup_stats_in;
}
-
-insane_timebase:
+cleanup_stats_in:
{
- GST_ERROR_OBJECT (ffmpegenc, "Rejecting time base %d/%d",
- ffmpegenc->context->time_base.den, ffmpegenc->context->time_base.num);
+ if (ffmpegenc->context->stats_in)
+ g_free (ffmpegenc->context->stats_in);
return FALSE;
}
}
diff --git a/gst-libav.doap b/gst-libav.doap
index 073f402..b4c24b7 100644
--- a/gst-libav.doap
+++ b/gst-libav.doap
@@ -34,6 +34,16 @@ colorspace conversion elements.
<release>
<Version>
+ <revision>1.3.3</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-06-22</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-1.3.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.3.2</revision>
<branch>1.3</branch>
<name></name>
diff --git a/gst-libav.spec b/gst-libav.spec
index 05c4a00..35a5503 100644
--- a/gst-libav.spec
+++ b/gst-libav.spec
@@ -4,7 +4,7 @@
%define gst_majorminor 1.0
Name: %{gstreamer}-libav
-Version: 1.3.2
+Version: 1.3.3
Release: 1
Summary: GStreamer Streaming-media framework plug-in using libav (FFmpeg).
Group: Libraries/Multimedia