...
 
Commits (64)
This diff is collapsed.
# GStreamer 1.10 Release Notes
**GStreamer 1.10.0 was released on 1st November 2016.**
GStreamer 1.10.0 was originally released on 1st November 2016.
The latest bug-fix release in the 1.10 series is [1.10.5](#1.10.5) and was
released on 15 June 2017.
The GStreamer team is proud to announce a new major feature release in the
stable 1.x API series of your favourite cross-platform multimedia framework!
......@@ -11,7 +13,7 @@ improvements.
See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest
version of this document.
*Last updated: Tuesday 1 Nov 2016, 15:00 UTC [(log)][gitlog]*
*Last updated: Thursday 15 Jun 2017, 09:30 UTC [(log)][gitlog]*
[latest]: https://gstreamer.freedesktop.org/releases/1.10/
[gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.10/release-notes-1.10.md
......@@ -39,7 +41,7 @@ improvements.
- A new `gst-docs` module has been created, and we are in the process of moving
our documentation to a markdown-based format for easier maintenance and
updates
- A new `gst-examples` module has been create, which contains example
- A new `gst-examples` module has been created, which contains example
GStreamer applications and is expected to grow with many more examples in
the future
- Various OpenGL and OpenGL|ES-related fixes and improvements for greater
......@@ -1073,6 +1075,138 @@ which is a stable branch.
1.10.0 was released on 1st November 2016.
<a name="1.10.1"></a>
### 1.10.1
The first 1.10 bug-fix release (1.10.1) was released on 17 November 2016.
This release only contains bugfixes and it should be safe to update from 1.10.x.
#### Major bugfixes in 1.10.1
- Security-relevant bugfix in the vmnc decoder (CVE-2016-9445, CVE-2016-9446)
- Various bugfixes to playbin3/decodebin3
- Fix error at the end of playing any WAV file
- Fix usability of androidmedia plugin if the camera or sensor API is not
available, but codecs are
- Handle redirections on PLAY, and missing control attribute in the RTSP source
- Various OpenGL related bugfixes
- ... and many, many more!
For a full list of bugfixes see [Bugzilla][buglist-1.10.1]. Note that this is
not the full list of changes. For the full list of changes please refer to the
GIT logs or ChangeLogs of the particular modules.
[buglist-1.10.1]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=168172&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.1
<a name="1.10.2"></a>
### 1.10.2
The second 1.10 bug-fix release (1.10.2) was released on 29 November 2016.
This release only contains bugfixes and it should be safe to update from 1.10.x.
#### Major bugfixes in 1.10.2
- Security-relevant bugfix in the FLI/FLX/FLC decoder (CVE-2016-9634,
CVE-2016-9635, CVE-2016-9636)
- Various fixes for crashes, assertions and other failures on fuzzed input
files. Among others, thanks to Hanno Böck for testing and reporting
(CVE-2016-9807, CVE-2016-9808, CVE-2016-9809, CVE-2016-9810, CVE-2016-9811,
CVE-2016-9812, CVE-2016-9813).
- SAVP/SAVPF profile in gst-rtsp-server works for live streams again, and the
correct MIKEY policy message is generated
- Further OpenGL related bugfixes
- gst-libav was updated to ffmpeg 3.2.1
- ... and many, many more!
For a full list of bugfixes see [Bugzilla][buglist-1.10.2]. Note that this is
not the full list of changes. For the full list of changes please refer to the
GIT logs or ChangeLogs of the particular modules.
[buglist-1.10.2]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=168172&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.2
<a name="1.10.3"></a>
### 1.10.3
The third 1.10 bug-fix release (1.10.3) was released on 30 January 2017.
This release only contains bugfixes and it should be safe to update from 1.10.x.
#### Major bugfixes in 1.10.3
- Various fixes for crashes, assertions, deadlocks and memory leaks on fuzzed
input files and in other situations (CVE-2016-10198, CVE-2016-10199,
CVE-2017-5837, CVE-2017-5838, CVE-2017-5839, CVE-2017-5840, CVE-2017-5841,
CVE-2017-5842, CVE-2017-5843, CVE-2017-5844, CVE-2017-5845, CVE-2017-5846)
- Regression fixes for souphttpsrc with redirection tracking and retrying
- Regression fix for gst-rtsp-server not handling TCP-only medias anymore
- Various other bugfixes the RTP/RTSP codebase
- Fix for gmodule on 64 bit Android, it was never working before there
- vp8enc works again on 32 bit Windows
- Fixes to Opus PLC handling in the decoder
- Fix for stream corruption in multihandlesink when removing clients
- gst-libav was updated to ffmpeg 3.2.2
- ... and many, many more!
For a full list of bugfixes see [Bugzilla][buglist-1.10.3]. Note that this is
not the full list of changes. For the full list of changes please refer to the
GIT logs or ChangeLogs of the particular modules.
[buglist-1.10.3]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=187054&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.3
<a name="1.10.4"></a>
### 1.10.4
The fourth 1.10 bug-fix release (1.10.4) was released on 23 February 2017.
This release only contains bugfixes and it should be safe to update from 1.10.x.
#### Major bugfixes in 1.10.4
- Various fixes for crashes, assertions, deadlocks and memory leaks on fuzzed
input files and in other situations (CVE-2017-5847, CVE-2017-5848)
- More regression fixes for souphttpsrc redirection tracking
- Regression fix for gmodule on 32 bit Android, which was introduced as part
of the 64 bit Android fix in 1.10.3 and broke the androidmedia plugin
- Various bugfixes for regressions and other problems in the V4L2 plugin
- Fix for 5.1, 6.1 and 7.1 channel layouts for Vorbis
- Fixes for timestamp generation of Android video encoder element
- gst-libav was updated to ffmpeg 3.2.4, fixing a couple of CVEs
- ... and many, many more!
For a full list of bugfixes see [Bugzilla][buglist-1.10.4]. Note that this is
not the full list of changes. For the full list of changes please refer to the
GIT logs or ChangeLogs of the particular modules.
[buglist-1.10.4]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=187054&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.4
<a name="1.10.5"></a>
### 1.10.5
The fifth 1.10 bug-fix release (1.10.5) was released on 15 June 2017.
This release only contains bugfixes and it should be safe to update from 1.10.x.
This is most likely the last release in the stable 1.10 release series.
#### Major bugfixes in 1.10.5
- Various fixes for crashes, assertions, deadlocks and memory leaks
- Fix for regression in rtpjitterbuffer that caused PTS to be reset to 0 on
- Fix detection of some HLS streams
- Various fixes to the MOV/MP4 muxer and demuxer
gaps in the input
- gst-libav was updated to ffmpeg 3.2.5, fixing a couple of CVEs
- ... and many, many more!
For a full list of bugfixes see [Bugzilla][buglist-1.10.5]. Note that this is
not the full list of changes and also does not include bug reports that were
closed after the 1.12.0 release. For the full list of changes please refer to
the GIT logs or ChangeLogs of the particular modules.
[buglist-1.10.5]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=187054&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.5
## Known Issues
- iOS builds with iOS 6 SDK and old C++ STL. You need to select iOS 6 instead
......@@ -1083,11 +1217,6 @@ which is a stable branch.
- Building applications with Android NDK r13 on Windows does not work. Other
platforms and earlier/later versions of the NDK are not affected.
[Bug #772842](https://bugzilla.gnome.org/show_bug.cgi?id=772842)
- The new leaks tracer may deadlock the application (or exhibit other undefined
behaviour) when `SIGUSR` handling is enabled via the `GST_LEAKS_TRACER_SIG`
environment variable. [Bug #770373](https://bugzilla.gnome.org/show_bug.cgi?id=770373)
- vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit Windows is unaffected.
[Bug #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663)
## Schedule for 1.12
......@@ -1096,9 +1225,9 @@ development version leading up to the stable 1.12 release. The development
of 1.11/1.12 will happen in the git master branch.
The plan for the 1.12 development cycle is yet to be confirmed, but it is
expected that feature freeze will be around early/mid-January,
expected that feature freeze will be around early/mid-February,
followed by several 1.11 pre-releases and the new 1.12 stable release
in March.
in April.
1.12 will be backwards-compatible to the stable 1.10, 1.8, 1.6, 1.4, 1.2 and
1.0 release series.
......@@ -1111,4 +1240,3 @@ Müller, Reynaldo H. Verdejo Pinochet, Arun Raghavan, Thibault Saunier,
Jan Schmidt, Wim Taymans, Matthew Waters*
*License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*
GStreamer 1.9.x development series
GStreamer 1.10.x stable series
WHAT IT IS
----------
......
Release notes for GStreamer Base Plugins 1.10.0
Release notes for GStreamer Base Plugins 1.10.5
The GStreamer team is pleased to announce the first release of the new stable
1.10 release series. The 1.10 release series is adding new features on top of
the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and ABI-stable 1.x
release series of the GStreamer multimedia framework.
The GStreamer team is proud to announce the fifth bugfix release in the stable
1.10 release series of your favourite cross-platform multimedia framework!
Binaries for Android, iOS, Mac OS X and Windows will be provided shortly after
the source release by the GStreamer project during the stable 1.10 release
series.
This release only contains bugfixes and it is safe to update from 1.10.x.
See /releases/1.10/ for the full release notes.
This module contains a set of reference plugins, base classes for other
......@@ -58,16 +57,7 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Bugs fixed in this release
* 768763 : vorbisenc, opusenc reconfiguration broken
* 772500 : opusdec: Fix memory leak in test code
* 772501 : videorate: Fix memory leak in test code
* 772676 : parsebin: Use gst_playback_utils_compare_factories_func
* 772855 : decodebin3: Implement lock for multiqueue slot
* 773103 : videodecoder: Default caps sets format I420
* 773105 : audioencoder: Error-handling for pushing headers
* 773107 : audioencoder: Plug buffer-leak
* 773181 : x264enc refuses to negotiate I420 or baseline profiles!
* 773441 : decodebin3: GStreamer-CRITICAL **: gst_mini_object_unref: assertion 'mini_object != NULL' failed
* 780297 : convertframe: Fix async video sample conversion with non-default context
==== Download ====
......@@ -105,18 +95,7 @@ subscribe to the gstreamer-devel list.
Contributors to this release
* Arun Raghavan
* Edward Hervey
* Graham Leggett
* Havard Graff
* Jimmy Ohn
* Nirbheek Chauhan
* Scott D Phillips
* Jan Schmidt
* Sebastian Dröge
* Seungha Yang
* Stefan Sauer
* Stian Selnes
* Thibault Saunier
* Tim-Philipp Müller
* Vincent Penquerc'h
* Wonchul Lee
 
\ No newline at end of file
common @ 742c09d9
Subproject commit f980fd91c1c1fd01333966041a4a535366e897bd
Subproject commit 742c09d9f13748a32ddf90669204415b88dd976f
......@@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file
dnl initialize autoconf
dnl releases only do -Wall, git and prerelease does -Werror too
dnl use a three digit version number for releases, and four for git/prerelease
AC_INIT([GStreamer Base Plug-ins],[1.10.0],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
AC_INIT([GStreamer Base Plug-ins],[1.10.5],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
AG_GST_INIT
......@@ -56,7 +56,7 @@ dnl 1.2.5 => 205
dnl 1.10.9 (who knows) => 1009
dnl
dnl sets GST_LT_LDFLAGS
AS_LIBTOOL(GST, 1000, 0, 1000)
AS_LIBTOOL(GST, 1005, 0, 1005)
dnl *** required versions of GStreamer stuff ***
GST_REQ=1.10.0
......
......@@ -3,7 +3,7 @@
<description>Adds multiple streams</description>
<filename>../../gst/adder/.libs/libgstadder.so</filename>
<basename>libgstadder.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>ALSA plugin library</description>
<filename>../../ext/alsa/.libs/libgstalsa.so</filename>
<basename>libgstalsa.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Elements used to communicate with applications</description>
<filename>../../gst/app/.libs/libgstapp.so</filename>
<basename>libgstapp.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Convert audio to different formats</description>
<filename>../../gst/audioconvert/.libs/libgstaudioconvert.so</filename>
<basename>libgstaudioconvert.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Adjusts audio frames</description>
<filename>../../gst/audiorate/.libs/libgstaudiorate.so</filename>
<basename>libgstaudiorate.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Resamples audio</description>
<filename>../../gst/audioresample/.libs/libgstaudioresample.so</filename>
<basename>libgstaudioresample.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Creates audio test signals of given frequency and volume</description>
<filename>../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so</filename>
<basename>libgstaudiotestsrc.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Read audio from CD in paranoid mode</description>
<filename>../../ext/cdparanoia/.libs/libgstcdparanoia.so</filename>
<basename>libgstcdparanoia.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>various encoding-related elements</description>
<filename>../../gst/encoding/.libs/libgstencodebin.so</filename>
<basename>libgstencodebin.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>GIO elements</description>
<filename>../../gst/gio/.libs/libgstgio.so</filename>
<basename>libgstgio.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>libvisual visualization plugins</description>
<filename>../../ext/libvisual/.libs/libgstlibvisual.so</filename>
<basename>libgstlibvisual.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>ogg stream manipulation (info about ogg: http://xiph.org)</description>
<filename>../../ext/ogg/.libs/libgstogg.so</filename>
<basename>libgstogg.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>OPUS plugin library</description>
<filename>../../ext/opus/.libs/libgstopus.so</filename>
<basename>libgstopus.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Pango-based text rendering and overlay</description>
<filename>../../ext/pango/.libs/libgstpango.so</filename>
<basename>libgstpango.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>various playback elements</description>
<filename>../../gst/playback/.libs/libgstplayback.so</filename>
<basename>libgstplayback.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Subtitle parsing</description>
<filename>../../gst/subparse/.libs/libgstsubparse.so</filename>
<basename>libgstsubparse.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>transfer data over the network via TCP</description>
<filename>../../gst/tcp/.libs/libgsttcp.so</filename>
<basename>libgsttcp.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Theora plugin library</description>
<filename>../../ext/theora/.libs/libgsttheora.so</filename>
<basename>libgsttheora.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>default typefind functions</description>
<filename>../../gst/typefind/.libs/libgsttypefindfunctions.so</filename>
<basename>libgsttypefindfunctions.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Colorspace conversion</description>
<filename>../../gst/videoconvert/.libs/libgstvideoconvert.so</filename>
<basename>libgstvideoconvert.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Adjusts video frames</description>
<filename>../../gst/videorate/.libs/libgstvideorate.so</filename>
<basename>libgstvideorate.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Resizes video</description>
<filename>../../gst/videoscale/.libs/libgstvideoscale.so</filename>
<basename>libgstvideoscale.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Creates a test video stream</description>
<filename>../../gst/videotestsrc/.libs/libgstvideotestsrc.so</filename>
<basename>libgstvideotestsrc.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>plugin for controlling audio volume</description>
<filename>../../gst/volume/.libs/libgstvolume.so</filename>
<basename>libgstvolume.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>Vorbis plugin library</description>
<filename>../../ext/vorbis/.libs/libgstvorbis.so</filename>
<basename>libgstvorbis.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>X11 video output element based on standard Xlib calls</description>
<filename>../../sys/ximage/.libs/libgstximagesink.so</filename>
<basename>libgstximagesink.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -3,7 +3,7 @@
<description>XFree86 video output plugin using Xv extension</description>
<filename>../../sys/xvimage/.libs/libgstxvimagesink.so</filename>
<basename>libgstxvimagesink.so</basename>
<version>1.10.0</version>
<version>1.10.5</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
......
......@@ -2816,7 +2816,7 @@ gst_ogg_demux_set_header_on_caps (GstOggDemux * ogg, GstCaps * caps,
if (G_UNLIKELY (!caps))
return NULL;
if (G_UNLIKELY (!headers))
return NULL;
return caps;
caps = gst_caps_make_writable (caps);
structure = gst_caps_get_structure (caps, 0);
......
......@@ -540,7 +540,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
GstClockTime aligned_missing_duration;
GstClockTime missing_duration = GST_BUFFER_DURATION (bufd);
if (!GST_CLOCK_TIME_IS_VALID (missing_duration)) {
if (!GST_CLOCK_TIME_IS_VALID (missing_duration) || missing_duration == 0) {
if (GST_CLOCK_TIME_IS_VALID (dec->last_known_buffer_duration)) {
missing_duration = dec->last_known_buffer_duration;
GST_WARNING_OBJECT (dec,
......@@ -595,7 +595,6 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
not constant over the stream. */
samples = 120 * dec->sample_rate / 1000;
}
packet_size = samples * dec->n_channels * 2;
outbuf =
......@@ -611,23 +610,44 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
out_data = (gint16 *) omap.data;
if (dec->use_inband_fec) {
if (gst_buffer_get_size (dec->last_buffer) > 0) {
/* normal delayed decode */
GST_LOG_OBJECT (dec, "FEC enabled, decoding last delayed buffer");
n = opus_multistream_decode (dec->state, data, size, out_data, samples,
0);
do {
if (dec->use_inband_fec) {
if (gst_buffer_get_size (dec->last_buffer) > 0) {
/* normal delayed decode */
GST_LOG_OBJECT (dec, "FEC enabled, decoding last delayed buffer");
n = opus_multistream_decode (dec->state, data, size, out_data, samples,
0);
} else {
/* FEC reconstruction decode */
GST_LOG_OBJECT (dec, "FEC enabled, reconstructing last buffer");
n = opus_multistream_decode (dec->state, data, size, out_data, samples,
1);
}
} else {
/* FEC reconstruction decode */
GST_LOG_OBJECT (dec, "FEC enabled, reconstructing last buffer");
/* normal decode */
GST_LOG_OBJECT (dec, "FEC disabled, decoding buffer");
n = opus_multistream_decode (dec->state, data, size, out_data, samples,
1);
0);
}
} else {
/* normal decode */
GST_LOG_OBJECT (dec, "FEC disabled, decoding buffer");
n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0);
}
if (n == OPUS_BUFFER_TOO_SMALL) {
/* if too small, add 2.5 milliseconds and try again, up to the
* Opus max size of 120 milliseconds */
if (samples >= 120 * dec->sample_rate / 1000)
break;
samples += 25 * dec->sample_rate / 10000;
packet_size = samples * dec->n_channels * 2;
gst_buffer_unmap (outbuf, &omap);
gst_buffer_unref (outbuf);
outbuf =
gst_audio_decoder_allocate_output_buffer (GST_AUDIO_DECODER (dec),
packet_size);
if (!outbuf) {
goto buffer_failed;
}
gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
out_data = (gint16 *) omap.data;
}
} while (n == OPUS_BUFFER_TOO_SMALL);
gst_buffer_unmap (outbuf, &omap);
if (data != NULL)
gst_buffer_unmap (buf, &map);
......@@ -642,6 +662,8 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
}
GST_DEBUG_OBJECT (dec, "decoded %d samples", n);
gst_buffer_set_size (outbuf, n * 2 * dec->n_channels);
GST_BUFFER_DURATION (outbuf) = samples * GST_SECOND / dec->sample_rate;
samples = n;
cmeta = gst_buffer_get_audio_clipping_meta (buf);
......
......@@ -134,8 +134,8 @@ const gint gst_vorbis_reorder_map[][8] = {
{0, 2, 1},
{0, 1, 2, 3},
{0, 2, 1, 3, 4},
{0, 2, 1, 4, 5, 3},
{0, 2, 1, 5, 6, 4, 3},
{0, 2, 1, 6, 7, 4, 5, 3}
{0, 2, 1, 5, 3, 4},
{0, 2, 1, 6, 5, 3, 4},
{0, 2, 1, 7, 5, 6, 3, 4}
};
#endif
......@@ -121,6 +121,19 @@ static const GstAudioChannelPosition default_channel_order[64] = {
GST_AUDIO_CHANNEL_POSITION_INVALID
};
/*
* Compares @channels audio channel positions @p1 and @p2 if they are equal.
* In other words, tells whether channel reordering is needed (unequal) or not (equal).
*
* Returns: %TRUE if the channel positions are equal, i.e. no reordering is needed.
*/
static gboolean
gst_audio_channel_positions_equal (const GstAudioChannelPosition * p1,
const GstAudioChannelPosition * p2, gint channels)
{
return memcmp (p1, p2, channels * sizeof (p1[0])) == 0;
}
static gboolean
check_valid_channel_positions (const GstAudioChannelPosition * position,
gint channels, gboolean enforce_order, guint64 * channel_mask_out)
......@@ -211,7 +224,7 @@ gst_audio_reorder_channels (gpointer data, gsize size, GstAudioFormat format,
if (size == 0)
return TRUE;
if (memcmp (from, to, channels * sizeof (from[0])) == 0)
if (gst_audio_channel_positions_equal (from, to, channels))
return TRUE;
if (!gst_audio_get_channel_reorder_map (channels, from, to, reorder_map))
......@@ -260,6 +273,9 @@ gst_audio_buffer_reorder_channels (GstBuffer * buffer,
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
g_return_val_if_fail (gst_buffer_is_writable (buffer), FALSE);
if (gst_audio_channel_positions_equal (from, to, channels))
return TRUE;
gst_buffer_map (buffer, &info, GST_MAP_READWRITE);
ret =
......
......@@ -70,7 +70,7 @@ inner_product_gint32_full_1_sse41 (gint32 * o, const gint32 * a,
res = _mm_cvtsi128_si64 (sum);
res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
*o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
*o = CLAMP (res, G_MININT32, G_MAXINT32);
}
static inline void
......@@ -113,7 +113,7 @@ inner_product_gint32_linear_1_sse41 (gint32 * o, const gint32 * a,
res = _mm_cvtsi128_si64 (sum[0]);
res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
*o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
*o = CLAMP (res, G_MININT32, G_MAXINT32);
}
static inline void
......@@ -178,7 +178,7 @@ inner_product_gint32_cubic_1_sse41 (gint32 * o, const gint32 * a,
res = _mm_cvtsi128_si64 (sum[0]);
res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
*o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
*o = CLAMP (res, G_MININT32, G_MAXINT32);
}
MAKE_RESAMPLE_FUNC (gint32, full, 1, sse41);
......
......@@ -583,7 +583,7 @@ gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile * profile,
/**
* gst_encoding_profile_set_preset:
* @profile: a #GstEncodingProfile
* @preset: the element preset to use
* @preset: (nullable): the element preset to use
*
* Sets the name of the #GstElement that implements the #GstPreset interface
* to use for the profile.
......
......@@ -47,6 +47,8 @@
#include <gst/video/video.h>
#include <gst/audio/audio.h>
#include <string.h>
#include "pbutils.h"
#include "pbutils-private.h"
......@@ -547,7 +549,9 @@ got_subtitle_data (GstPad * pad, GstPadProbeInfo * info, GstDiscoverer * dc)
{
if (!(GST_IS_BUFFER (info->data) || (GST_IS_EVENT (info->data)
&& GST_EVENT_TYPE ((GstEvent *) info->data) == GST_EVENT_GAP)))
&& (GST_EVENT_TYPE ((GstEvent *) info->data) == GST_EVENT_GAP
|| GST_EVENT_TYPE ((GstEvent *) info->data) ==
GST_EVENT_EOS))))
return GST_PAD_PROBE_OK;
......@@ -803,7 +807,7 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
GstStructure *caps_st;
GstTagList *tags_st;
const gchar *name;
int tmp;
gint tmp, tmp2;
guint utmp;
if (!st || !gst_structure_id_has_field (st, _CAPS_QUARK)) {
......@@ -812,6 +816,14 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
}
gst_structure_id_get (st, _CAPS_QUARK, GST_TYPE_CAPS, &caps, NULL);
if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps)) {
GST_WARNING ("Couldn't find caps !");
if (caps)
gst_caps_unref (caps);
return make_info (parent, GST_TYPE_DISCOVERER_STREAM_INFO, NULL);
}
caps_st = gst_caps_get_structure (caps, 0);
name = gst_structure_get_name (caps_st);
......@@ -837,7 +849,8 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
format = gst_audio_format_from_string (format_str);
finfo = gst_audio_format_get_info (format);
info->depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
if (finfo)
info->depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
}
if (gst_structure_id_has_field (st, _TAGS_QUARK)) {
......@@ -869,27 +882,51 @@ collect_information (GstDiscoverer * dc, const GstStructure * st,
} else if (g_str_has_prefix (name, "video/") ||
g_str_has_prefix (name, "image/")) {
GstDiscovererVideoInfo *info;
GstVideoInfo vinfo;
const gchar *caps_str;
info = (GstDiscovererVideoInfo *) make_info (parent,
GST_TYPE_DISCOVERER_VIDEO_INFO, caps);
if (gst_video_info_from_caps (&vinfo, caps)) {
info->width = (guint) vinfo.width;
info->height = (guint) vinfo.height;
info->depth = vinfo.finfo->bits * vinfo.finfo->n_components;
if (gst_structure_get_int (caps_st, "width", &tmp))
info->width = (guint) tmp;
if (gst_structure_get_int (caps_st, "height", &tmp))
info->height = (guint) tmp;
info->par_num = vinfo.par_n;
info->par_denom = vinfo.par_d;
if (gst_structure_get_fraction (caps_st, "framerate", &tmp, &tmp2)) {
info->framerate_num = (guint) tmp;
info->framerate_denom = (guint) tmp2;
} else {
info->framerate_num = 0;
info->framerate_denom = 1;
}
info->framerate_num = vinfo.fps_n;
info->framerate_denom = vinfo.fps_d;
if (gst_structure_get_fraction (caps_st, "pixel-aspect-ratio", &tmp, &tmp2)) {
info->par_num = (guint) tmp;
info->par_denom = (guint) tmp2;
} else {
info->par_num = 1;
info->par_denom = 1;
}
info->interlaced =
vinfo.interlace_mode != GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
/* FIXME: we only want to extract depth if raw video is what's in the
* container (i.e. not if there is a decoder involved) */
caps_str = gst_structure_get_string (caps_st, "format");
if (caps_str != NULL) {
const GstVideoFormatInfo *finfo;
GstVideoFormat format;
format = gst_video_format_from_string (caps_str);
finfo = gst_video_format_get_info (format);
if (finfo)
info->depth = finfo->bits * finfo->n_components;
}
caps_str = gst_structure_get_string (caps_st, "interlace-mode");
if (!caps_str || strcmp (caps_str, "progressive") == 0)
info->interlaced = FALSE;
else
info->interlaced = TRUE;
if (gst_structure_id_has_field (st, _TAGS_QUARK)) {
gst_structure_id_get (st, _TAGS_QUARK, GST_TYPE_TAG_LIST, &tags_st, NULL);
if (gst_tag_list_get_uint (tags_st, GST_TAG_BITRATE, &utmp) ||
......@@ -1004,10 +1041,20 @@ find_stream_for_node (GstDiscoverer * dc, const GstStructure * topology)
static gboolean
child_is_same_stream (const GstCaps * _parent, const GstCaps * child)
{
GstCaps *parent = gst_caps_copy (_parent);
guint i, size = gst_caps_get_size (parent);
GstCaps *parent;
guint i, size;
gboolean res;
if (_parent == child)
return TRUE;
if (!_parent)
return FALSE;
if (!child)
return FALSE;
parent = gst_caps_copy (_parent);
size = gst_caps_get_size (parent);
for (i = 0; i < size; i++) {
gst_structure_remove_field (gst_caps_get_structure (parent, i), "parsed");
gst_structure_remove_field (gst_caps_get_structure (parent, i), "framed");
......@@ -1024,6 +1071,13 @@ child_is_raw_stream (const GstCaps * parent, const GstCaps * child)
const GstStructure *st1, *st2;
const gchar *name1, *name2;
if (parent == child)
return TRUE;
if (!parent)
return FALSE;
if (!child)
return FALSE;
st1 = gst_caps_get_structure (parent, 0);
name1 = gst_structure_get_name (st1);
st2 = gst_caps_get_structure (child, 0);
......@@ -1101,7 +1155,8 @@ parse_stream_topology (GstDiscoverer * dc, const GstStructure * topology,
res->next = next;
next->previous = res;
}
gst_caps_unref (caps);
if (caps)
gst_caps_unref (caps);
}
}
......
......@@ -824,6 +824,8 @@ gst_riff_create_video_caps (guint32 codec_fcc,
case GST_MAKE_FOURCC ('V', 'M', 'n', 'c'):
caps = gst_caps_new_simple ("video/x-vmnc",
"version", G_TYPE_INT, 1, NULL);
if (strf && strf->bit_cnt != 0)
gst_caps_set_simple (caps, "bpp", G_TYPE_INT, strf->bit_cnt, NULL);
if (codec_name)
*codec_name = g_strdup ("VMWare NC Video");
break;
......@@ -1297,22 +1299,28 @@ gst_riff_create_audio_caps (guint16 codec_id,
if (strf != NULL) {
gint ba = strf->blockalign;
gint ch = strf->channels;
gint wd = ba * 8 / ch;
caps = gst_caps_new_simple ("audio/x-raw",
"format", G_TYPE_STRING, wd == 64 ? "F64LE" : "F32LE",
"layout", G_TYPE_STRING, "interleaved",
"channels", G_TYPE_INT, ch, NULL);
/* Add default channel layout. We know no default layout for more than
* 8 channels. */
if (ch > 8)
GST_WARNING ("don't know default layout for %d channels", ch);
else if (gst_riff_wave_add_default_channel_mask (caps, ch,
channel_reorder_map))
GST_DEBUG ("using default channel layout for %d channels", ch);
else
GST_WARNING ("failed to add channel layout");
if (ba > 0 && ch > 0 && (ba == (64 / 8) * ch || ba == (32 / 8) * ch)) {
gint wd = ba * 8 / ch;
caps = gst_caps_new_simple ("audio/x-raw",
"format", G_TYPE_STRING, wd == 64 ? "F64LE" : "F32LE",
"layout", G_TYPE_STRING, "interleaved",
"channels", G_TYPE_INT, ch, NULL);
/* Add default channel layout. We know no default layout for more than
* 8 channels. */
if (ch > 8)
GST_WARNING ("don't know default layout for %d channels", ch);
else if (gst_riff_wave_add_default_channel_mask (caps, ch,
channel_reorder_map))
GST_DEBUG ("using default channel layout for %d channels", ch);
else
GST_WARNING ("failed to add channel layout");
} else {
GST_WARNING ("invalid block align %d or channel count %d", ba, ch);
return NULL;
}
} else {
/* FIXME: this is pretty useless - we need fixed caps */
caps = gst_caps_from_string ("audio/x-raw, "
......@@ -1607,7 +1615,8 @@ gst_riff_create_audio_caps (guint16 codec_id,
subformat_guid[2] == 0xaa000080 && subformat_guid[3] == 0x719b3800) {
if (subformat_guid[0] == 0x00000001) {
GST_DEBUG ("PCM");
if (strf != NULL) {
if (strf != NULL && strf->blockalign != 0 && strf->channels != 0
&& strf->rate != 0) {
gint ba = strf->blockalign;
gint wd = ba * 8 / strf->channels;
gint ws;
......@@ -1640,7 +1649,8 @@ gst_riff_create_audio_caps (guint16 codec_id,
}
} else if (subformat_guid[0] == 0x00000003) {
GST_DEBUG ("FLOAT");
if (strf != NULL) {
if (strf != NULL && strf->blockalign != 0 && strf->channels != 0
&& strf->rate != 0) {
gint ba = strf->blockalign;
gint wd = ba * 8 / strf->channels;
......@@ -1705,7 +1715,8 @@ gst_riff_create_audio_caps (guint16 codec_id,
caps = gst_caps_new_empty_simple ("audio/x-ac3");
if (codec_name)
*codec_name = g_strdup ("wavext AC-3 SPDIF audio");
} else if (subformat_guid[0] == GST_RIFF_WAVE_FORMAT_EXTENSIBLE) {
} else if ((subformat_guid[0] & 0xffff) ==
GST_RIFF_WAVE_FORMAT_EXTENSIBLE) {
GST_DEBUG ("WAVE_FORMAT_EXTENSIBLE nested");
} else {
/* recurse where no special consideration has yet to be identified
......@@ -1730,6 +1741,11 @@ gst_riff_create_audio_caps (guint16 codec_id,
*codec_name = g_strdup ("Ogg-AVI");
}
if (caps == NULL) {
GST_WARNING ("Unknown WAVE_FORMAT_EXTENSIBLE audio format");
return NULL;
}
if (strf != NULL) {
/* If channel_mask == 0 and channels > 1 let's
* assume default layout as some wav files don't have the
......@@ -1748,10 +1764,6 @@ gst_riff_create_audio_caps (guint16 codec_id,
rate_chan = FALSE;
}
if (caps == NULL) {
GST_WARNING ("Unknown WAVE_FORMAT_EXTENSIBLE audio format");
return NULL;
}
break;
}
/* can anything decode these? pitfdll? */
......
......@@ -136,9 +136,9 @@ gst_rtsp_url_parse (const gchar * urlstr, GstRTSPUrl ** url)
if (col == NULL || col > at)
goto invalid;
res->user = g_strndup (p, col - p);
res->user = g_uri_unescape_segment (p, col, NULL);
col++;
res->passwd = g_strndup (col, at - col);
res->passwd = g_uri_unescape_segment (col, at, NULL);
/* move to host */
p = at + 1;
......
......@@ -2264,6 +2264,7 @@ gst_mikey_message_new_from_caps (GstCaps * caps)
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_ENC_KEY_LEN, 1,
&byte);
/* only HMAC-SHA1 */
byte = 1;
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_AUTH_ALG, 1,
&byte);
/* authentication key length */
......@@ -2271,6 +2272,7 @@ gst_mikey_message_new_from_caps (GstCaps * caps)
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_AUTH_KEY_LEN, 1,
&byte);
/* we enable encryption on RTP and RTCP */
byte = 1;
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_SRTP_ENC, 1,
&byte);
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_SRTCP_ENC, 1,
......
......@@ -1726,11 +1726,19 @@ gst_tag_demux_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
/* Ensure that nothing is in any of the streaming thread functions
* anymore. While the above has deactivated all pads, there is nothing
* preventing downstream from activating our srcpad again and calling the
* getrange() function. Although we're in READY!
*/
GST_PAD_STREAM_LOCK (demux->priv->srcpad);
gst_tag_demux_reset (demux);
GST_PAD_STREAM_UNLOCK (demux->priv->srcpad);
break;
default:
break;
}
return ret;
}
......
......@@ -1313,6 +1313,7 @@ gst_tag_list_from_xmp_buffer (GstBuffer * buffer)
}
if (ns_match[i].ns_prefix) {
if (strcmp (ns_map[i].original_ns, &as[6])) {
g_free (ns_map[i].gstreamer_ns);
ns_map[i].gstreamer_ns = g_strdup (&as[6]);
}
}
......
......@@ -236,10 +236,16 @@ gst_tag_list_from_id3v2_tag (GstBuffer * buffer)
work.hdr.size = read_size;
work.hdr.flags = flags;
work.hdr.frame_data = info.data + ID3V2_HDR_SIZE;
if (flags & ID3V2_HDR_FLAG_FOOTER)
if (flags & ID3V2_HDR_FLAG_FOOTER) {
if (read_size < ID3V2_HDR_SIZE + 10)
goto not_enough_data; /* Invalid frame size */
work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE - 10;
else
} else {
if (read_size < ID3V2_HDR_SIZE)
goto not_enough_data; /* Invalid frame size */
work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE;
}
/* in v2.3 the frame sizes are not syncsafe, so the entire tag had to be
* unsynced. In v2.4 the frame sizes are syncsafe so it's just the frame
......
......@@ -422,7 +422,7 @@ typedef struct
GMainContext *context;
GstSample *sample;
//GstBuffer *buffer;
gulong timeout_id;
GSource *timeout_source;
gboolean finished;
} GstVideoConvertSampleContext;
......@@ -445,8 +445,8 @@ gst_video_convert_frame_context_free (GstVideoConvertSampleContext * ctx)
g_mutex_lock (&ctx->mutex);
g_mutex_unlock (&ctx->mutex);
g_mutex_clear (&ctx->mutex);
if (ctx->timeout_id)
g_source_remove (ctx->timeout_id);
if (ctx->timeout_source)
g_source_destroy (ctx->timeout_source);
//if (ctx->buffer)
// gst_buffer_unref (ctx->buffer);
if (ctx->sample)
......@@ -486,9 +486,9 @@ convert_frame_finish (GstVideoConvertSampleContext * context,
GSource *source;
GstVideoConvertSampleCallbackContext *ctx;
if (context->timeout_id)
g_source_remove (context->timeout_id);
context->timeout_id = 0;
if (context->timeout_source)
g_source_destroy (context->timeout_source);
context->timeout_source = NULL;
ctx = g_slice_new (GstVideoConvertSampleCallbackContext);
ctx->callback = context->callback;
......@@ -712,11 +712,10 @@ gst_video_convert_sample_async (GstSample * sample,
ctx->pipeline = pipeline;
if (timeout != GST_CLOCK_TIME_NONE) {
source = g_timeout_source_new (timeout / GST_MSECOND);
g_source_set_callback (source,
ctx->timeout_source = g_timeout_source_new (timeout / GST_MSECOND);
g_source_set_callback (ctx->timeout_source,
(GSourceFunc) convert_frame_timeout_callback, ctx, NULL);
ctx->timeout_id = g_source_attach (source, context);
g_source_unref (source);
g_source_attach (ctx->timeout_source, context);
}
g_signal_connect (src, "need-data",
......
......@@ -174,7 +174,7 @@ gst_video_time_code_to_date_time (const GstVideoTimeCode * tc)
guint64
gst_video_time_code_nsec_since_daily_jam (const GstVideoTimeCode * tc)
{
gdouble nsec;
guint64 frames, nsec;
g_return_val_if_fail (gst_video_time_code_is_valid (tc), -1);
......@@ -187,21 +187,10 @@ gst_video_time_code_nsec_since_daily_jam (const GstVideoTimeCode * tc)
return -1;
}
if ((tc->config.flags & GST_VIDEO_TIME_CODE_FLAGS_INTERLACED)
&& tc->field_count == 1)
nsec =
gst_util_uint64_scale (GST_SECOND * tc->frames - 500 * GST_MSECOND,
tc->config.fps_d, tc->config.fps_n);
else