[Pkg-gstreamer-commits] [gst-libav1.0] 01/03: Imported Upstream version 1.3.3

Sebastian Dröge slomo at moszumanska.debian.org
Sun Jun 22 17:39:54 UTC 2014


This is an automated email from the git hooks/post-receive script.

slomo pushed a commit to branch master
in repository gst-libav1.0.

commit db79c75633528e54ef5c853c23c52a684eb06dcf
Author: Sebastian Dröge <sebastian at centricular.com>
Date:   Sun Jun 22 19:23:12 2014 +0200

    Imported Upstream version 1.3.3
---
 ChangeLog                                          | 127 ++++++++++++++++++++-
 NEWS                                               |  25 +++-
 configure                                          |  38 +++---
 configure.ac                                       |   8 +-
 .../html/gst-libav-plugins-plugin-libav.html       |   2 +-
 docs/plugins/html/index.html                       |   2 +-
 docs/plugins/inspect/plugin-libav.xml              |  22 ++--
 ext/libav/gstavaudenc.c                            |   5 +-
 ext/libav/gstavcodecmap.c                          |  46 +++++---
 ext/libav/gstavdemux.c                             |  65 +++--------
 ext/libav/gstavvidenc.c                            |  82 ++++++-------
 gst-libav.doap                                     |  10 ++
 gst-libav.spec                                     |   2 +-
 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 at coaxion.net>
+
+	* configure.ac:
+	  releasing 1.3.3
+
+2014-06-21 18:29:32 +0200  Sebastian Dröge <sebastian at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at centricular.com>
+
+	* configure.ac:
+	  Back to development
+
 === release 1.3.2 ===
 
-2014-05-21  Sebastian Dröge <slomo at coaxion.net>
+2014-05-21 13:06:36 +0200  Sebastian Dröge <sebastian at 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 at 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=(strin [...]
+          <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=(f [...]
         </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=(strin [...]
+          <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=(f [...]
         </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=(in [...]
+          <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)h [...]
         </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

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gstreamer/gst-libav1.0.git



More information about the Pkg-gstreamer-commits mailing list