blob: 547de7f3f99045a4363d695305919908e345c028 [file] [log] [blame]
Sebastian Dröge990eeb22016-11-01 17:57:44 +02001# GStreamer 1.10 Release Notes
2
3**GStreamer 1.10.0 was released on 1st November 2016.**
4
5The GStreamer team is proud to announce a new major feature release in the
6stable 1.x API series of your favourite cross-platform multimedia framework!
7
8As always, this release is again packed with new features, bug fixes and other
9improvements.
10
11See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest
12version of this document.
13
14*Last updated: Tuesday 1 Nov 2016, 15:00 UTC [(log)][gitlog]*
15
16[latest]: https://gstreamer.freedesktop.org/releases/1.10/
17[gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.10/release-notes-1.10.md
18
19## Introduction
20
21The GStreamer team is proud to announce a new major feature release in the
22stable 1.x API series of your favourite cross-platform multimedia framework!
23
24As always, this release is again packed with new features, bug fixes and other
25improvements.
26
27## Highlights
28
29- Several convenience APIs have been added to make developers' lives easier
30- A new `GstStream` API provides applications a more meaningful view of the
31 structure of streams, simplifying the process of dealing with media in
32 complex container formats
33- Experimental `decodebin3` and `playbin3` elements which bring a number of
34 improvements which were hard to implement within `decodebin` and `playbin`
35- A new `parsebin` element to automatically unpack and parse a stream, stopping
36 just short of decoding
37- Experimental new `meson`-based build system, bringing faster build and much
38 better Windows support (including for building with Visual Studio)
39- A new `gst-docs` module has been created, and we are in the process of moving
40 our documentation to a markdown-based format for easier maintenance and
41 updates
42- A new `gst-examples` module has been create, which contains example
43 GStreamer applications and is expected to grow with many more examples in
44 the future
45- Various OpenGL and OpenGL|ES-related fixes and improvements for greater
46 efficiency on desktop and mobile platforms, and Vulkan support on Wayland was
47 also added
48- Extensive improvements to the VAAPI plugins for improved robustness and
49 efficiency
50- Lots of fixes and improvements across the board, spanning RTP/RTSP, V4L2,
51 Bluetooth, audio conversion, echo cancellation, and more!
52
53## Major new features and changes
54
55### Noteworthy new API, features and other changes
56
57#### Core API additions
58
59##### Receive property change notifications via bus messages
60
61New API was added to receive element property change notifications via
62bus messages. So far, applications had to connect a callback to an element's
63`notify::property-name` signal via the GObject API, which was inconvenient for
64at least two reasons: one had to implement a signal callback function, and that
65callback function would usually be called from one of the streaming threads, so
66one had to marshal (send) any information gathered or pending requests to the
67main application thread which was tedious and error-prone.
68
69Enter [`gst_element_add_property_notify_watch()`][notify-watch] and
70[`gst_element_add_property_deep_notify_watch()`][deep-notify-watch] which will
71watch for changes of a property on the specified element, either only for this
72element or recursively for a whole bin or pipeline. Whenever such a
73property change happens, a `GST_MESSAGE_PROPERTY_NOTIFY` message will be posted
74on the pipeline bus with details of the element, the property and the new
75property value, all of which can be retrieved later from the message in the
76application via [`gst_message_parse_property_notify()`][parse-notify]. Unlike
77the GstBus watch functions, this API does not rely on a running GLib main loop.
78
79The above can be used to be notified asynchronously of caps changes in the
80pipeline, or volume changes on an audio sink element, for example.
81
82[notify-watch]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-add-property-notify-watch
83[deep-notify-watch]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-add-property-deep-notify-watch
84[parse-notify]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-parse-property-notify
85
86##### GstBin "deep" element-added and element-removed signals
87
88GstBin has gained `"deep-element-added"` and `"deep-element-removed"` signals
89which makes it easier for applications and higher-level plugins to track when
90elements are added or removed from a complex pipeline with multiple sub-bins.
91
92`playbin` makes use of this to implement the new `"element-setup"` signal which
93can be used to configure elements as they are added to `playbin`, just like the
94existing `"source-setup"` signal which can be used to configure the source
95element created.
96
97##### Error messages can contain additional structured details
98
99It is often useful to provide additional, structured information in error,
100warning or info messages for applications (or higher-level elements) to make
101intelligent decisions based on them. To allow this, error, warning and info
102messages now have API for adding arbitrary additional information to them
103using a `GstStructure`:
104[`GST_ELEMENT_ERROR_WITH_DETAILS`][element-error-with-details] and
105corresponding API for the other message types.
106
107This is now used e.g. by the new [`GST_ELEMENT_FLOW_ERROR`][element-flow-error]
108API to include the actual flow error in the error message, and the
109[souphttpsrc element][souphttpsrc-detailed-errors] to provide the HTTP
110status code, and the URL (if any) to which a redirection has happened.
111
112[element-error-with-details]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-ERROR-WITH-DETAILS:CAPS
113[element-flow-error]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-FLOW-ERROR:CAPS
114[souphttpsrc-detailed-errors]: https://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/ext/soup/gstsouphttpsrc.c?id=60d30db912a1aedd743e66b9dcd2e21d71fbb24f#n1318
115
116##### Redirect messages have official API now
117
118Sometimes, elements need to redirect the current stream URL and tell the
119application to proceed with this new URL, possibly using a different
120protocol too (thus changing the pipeline configuration). Until now, this was
121informally implemented using `ELEMENT` messages on the bus.
122
123Now this has been formalized in the form of a new `GST_MESSAGE_REDIRECT` message.
124A new redirect message can be created using [`gst_message_new_redirect()`][new-redirect].
125If needed, multiple redirect locations can be specified by calling
126[`gst_message_add_redirect_entry()`][add-redirect] to add further redirect
127entries, all with metadata, so the application can decide which is
128most suitable (e.g. depending on the bitrate tags).
129
130[new-redirect]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-redirect
131[add-redirect]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-add-redirect-entry
132
133##### New pad linking convenience functions that automatically create ghost pads
134
135New pad linking convenience functions were added:
136[`gst_pad_link_maybe_ghosting()`][pad-maybe-ghost] and
137[`gst_pad_link_maybe_ghosting_full()`][pad-maybe-ghost-full] which were
138previously internal to GStreamer have now been exposed for general use.
139
140The existing pad link functions will refuse to link pads or elements at
141different levels in the pipeline hierarchy, requiring the developer to
142create ghost pads where necessary. These new utility functions will
143automatically create ghostpads as needed when linking pads at different
144levels of the hierarchy (e.g. from an element inside a bin to one that's at
145the same level in the hierarchy as the bin, or in another bin).
146
147[pad-maybe-ghost]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-link-maybe-ghosting
148[pad-maybe-ghost-full]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-link-maybe-ghosting-full
149
150##### Miscellaneous
151
152Pad probes: IDLE and BLOCK probes now work slightly differently in pull mode,
153so that push and pull mode have opposite scenarios for idle and blocking probes.
154In push mode, it will block with some data type and IDLE won't have any data.
155In pull mode, it will block _before_ getting a buffer and will be IDLE once some
156data has been obtained. ([commit][commit-pad-probes], [bug][bug-pad-probes])
157
158[commit-pad-probes]: https://cgit.freedesktop.org/gstreamer/gstreamer/commit/gst/gstpad.c?id=368ee8a336d0c868d81fdace54b24431a8b48cbf
159[bug-pad-probes]: https://bugzilla.gnome.org/show_bug.cgi?id=761211
160
161[`gst_parse_launch_full()`][parse-launch-full] can now be made to return a
162`GstBin` instead of a top-level pipeline by passing the new
163`GST_PARSE_FLAG_PLACE_IN_BIN` flag.
164
165[parse-launch-full]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch-full
166
167The default GStreamer debug log handler can now be removed before
168calling `gst_init()`, so that it will never get installed and won't be active
169during initialization.
170
171A new [`STREAM_GROUP_DONE` event][stream-group-done-event] was added. In some
172ways it works similar to the `EOS` event in that it can be used to unblock
173downstream elements which may be waiting for further data, such as for example
174`input-selector`. Unlike `EOS`, further data flow may happen after the
175`STREAM_GROUP_DONE` event though (and without the need to flush the pipeline).
176This is used to unblock input-selector when switching between streams in
177adaptive streaming scenarios (e.g. HLS).
178
179[stream-group-done-event]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-stream-group-done
180
181The `gst-launch-1.0` command line tool will now print unescaped caps in verbose
182mode (enabled by the -v switch).
183
184[`gst_element_call_async()`][call-async] has been added as convenience API for
185plugin developers. It is useful for one-shot operations that need to be done
186from a thread other than the current streaming thread. It is backed by a
187thread-pool that is shared by all elements.
188
189[call-async]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-call-async
190
191Various race conditions have been fixed around the `GstPoll` API used by e.g.
192`GstBus` and `GstBufferPool`. Some of these manifested themselves primarily
193on Windows.
194
195`GstAdapter` can now keep track of discontinuities signalled via the `DISCONT`
196buffer flag, and has gained [new API][new-adapter-api] to track PTS, DTS and
197offset at the last discont. This is useful for plugins implementing advanced
198trick mode scenarios.
199
200[new-adapter-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-pts-at-discont
201
202`GstTestClock` gained a new [`"clock-type"` property][clock-type-prop].
203
204[clock-type-prop]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#GstTestClock--clock-type
205
206#### GstStream API for stream announcement and stream selection
207
208New stream listing and stream selection API: new API has been added to
209provide high-level abstractions for streams ([`GstStream`][stream-api])
210and collections of streams ([`GstStreamCollections`][stream-collection-api]).
211
212##### Stream listing
213
214A [`GstStream`][stream-api] contains all the information pertinent to a stream,
215such as stream id, caps, tags, flags and stream type(s); it can represent a
216single elementary stream (e.g. audio, video, subtitles, etc.) or a container
217stream. This will depend on the context. In a decodebin3/playbin3 one
218it will typically be elementary streams that can be selected and unselected.
219
220A [`GstStreamCollection`][stream-collection-api] represents a group of streams
221and is used to announce or publish all available streams. A GstStreamCollection
222is immutable - once created it won't change. If the available streams change,
223e.g. because a new stream appeared or some streams disappeared, a new stream
224collection will be published. This new stream collection may contain streams
225from the previous collection if those streams persist, or completely new ones.
226Stream collections do not yet list all theoretically available streams,
227e.g. other available DVD angles or alternative resolutions/bitrate of the same
228stream in case of adaptive streaming.
229
230New events and messages have been added to notify or update other elements and
231the application about which streams are currently available and/or selected.
232This way, we can easily and seamlessly let the application know whenever the
233available streams change, as happens frequently with digital television streams
234for example. The new system is also more flexible. For example, it is now also
235possible for the application to select multiple streams of the same type
236(e.g. in a transcoding/transmuxing scenario).
237
238A [`STREAM_COLLECTION` message][stream-collection-msg] is posted on the bus
239to inform the parent bin (e.g. `playbin3`, `decodebin3`) and/or the application
240about what streams are available, so you no longer have to hunt for this
241information at different places. The available information includes number of
242streams of each type, caps, tags etc. Bins and/or the application can intercept
243the message synchronously to select and deselect streams before any data is
244produced - for the case where elements such as the demuxers support the new
245stream API, not necessarily in the parsebin compatibility fallback case.
246
247Similarly, there is also a [`STREAM_COLLECTION` event][stream-collection-event]
248to inform downstream elements of the available streams. This event can be used
249by elements to aggregate streams from multiple inputs into one single collection.
250
251The `STREAM_START` event was extended so that it can also contain a GstStream
252object with all information about the current stream, see
253[`gst_event_set_stream()`][event-set-stream] and
254[`gst_event_parse_stream()`][event-parse-stream].
255[`gst_pad_get_stream()`][pad-get-stream] is a new utility function that can be
256used to look up the GstStream from the `STREAM_START` sticky event on a pad.
257
258[stream-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStream.html
259[stream-collection-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStreamCollection.html
260[stream-collection-msg]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-stream-collection
261[stream-collection-event]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-stream-collection
262[event-set-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-set-stream
263[event-parse-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-parse-stream
264[pad-get-stream]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-stream
265
266##### Stream selection
267
268Once the available streams have been published, streams can be selected via
269their stream ID using the new `SELECT_STREAMS` event, which can be created
270with [`gst_event_new_select_streams()`][event-select-streams]. The new API
271supports selecting multiple streams per stream type. In the future, we may also
272implement explicit deselection of streams that will never be used, so
273elements can skip these and never expose them or output data for them in the
274first place.
275
276The application is then notified of the currently selected streams via the
277new `STREAMS_SELECTED` message on the pipeline bus, containing both the current
278stream collection as well as the selected streams. This might be posted in
279response to the application sending a `SELECT_STREAMS` event or when
280`decodebin3` or `playbin3` decide on the streams to be initially selected without
281application input.
282
283[event-select-streams]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html#gst-event-new-select-streams
284
285##### Further reading
286
287See further below for some notes on the new elements supporting this new
288stream API, namely: `decodebin3`, `playbin3` and `parsebin`.
289
290More information about the new API and the new elements can also be found here:
291
292- GStreamer [stream selection design docs][streams-design]
293- Edward Hervey's talk ["The new streams API: Design and usage"][streams-talk] ([slides][streams-slides])
294- Edward Hervey's talk ["Decodebin3: Dealing with modern playback use cases"][db3-talk] ([slides][db3-slides])
295
296[streams-design]: https://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-stream-selection.txt
297[streams-talk]: https://gstconf.ubicast.tv/videos/the-new-gststream-api-design-and-usage/
298[streams-slides]: https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2016/Edward%20Hervey%20-%20The%20New%20Streams%20API%20Design%20and%20Usage.pdf
299[db3-talk]: https://gstconf.ubicast.tv/videos/decodebin3-or-dealing-with-modern-playback-use-cases/
300[db3-slides]: https://gstreamer.freedesktop.org/data/events/gstreamer-conference/2015/Edward%20Hervey%20-%20decodebin3.pdf
301
302#### Audio conversion and resampling API
303
304The audio conversion library received a completely new and rewritten audio
305resampler, complementing the audio conversion routines moved into the audio
306library in the [previous release][release-notes-1.8]. Integrating the resampler
307with the other audio conversion library allows us to implement generic
308conversion much more efficiently, as format conversion and resampling can now
309be done in the same processing loop instead of having to do it in separate
310steps (our element implementations do not make use of this yet though).
311
312The new audio resampler library is a combination of some of the best features
313of other samplers such as ffmpeg, speex and SRC. It natively supports S16, S32,
314F32 and F64 formats and uses optimized x86 and neon assembly for most of its
315processing. It also has support for dynamically changing sample rates by incrementally
316updating the filter tables using linear or cubic interpolation. According to
317some benchmarks, it's one of the fastest and most accurate resamplers around.
318
319The `audioresample` plugin has been ported to the new audio library functions
320to make use of the new resampler.
321
322[release-notes-1.8]: https://gstreamer.freedesktop.org/releases/1.8/
323
324#### Support for SMPTE timecodes
325
326Support for SMPTE timecodes was added to the GStreamer video library. This
327comes with an abstraction for timecodes, [`GstVideoTimeCode`][video-timecode]
328and a [`GstMeta`][video-timecode-meta] that can be placed on video buffers for
329carrying the timecode information for each frame. Additionally there is
330various API for making handling of timecodes easy and to do various
331calculations with them.
332
333A new plugin called [`timecode`][timecode-plugin] was added, that contains an
334element called `timecodestamper` for putting the timecode meta on video frames
335based on counting the frames and another element called `timecodewait` that
336drops all video (and audio) until a specific timecode is reached.
337
338Additionally support was added to the Decklink plugin for including the
339timecode information when sending video out or capturing it via SDI, the
340`qtmux` element is able to write timecode information into the MOV container,
341and the `timeoverlay` element can overlay timecodes on top of the video.
342
343More information can be found in the [talk about timecodes][timecode-talk] at
344the GStreamer Conference 2016.
345
346[video-timecode]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoTimeCode
347[video-timecode-meta]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-time-code-meta
348[timecode-plugin]: https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/gst/timecode
349[timecode-talk]: https://gstconf.ubicast.tv/videos/smpte-timecodes-in-gstreamer/
350
351#### GStreamer OpenMAX IL plugin
352
353The last gst-omx release, 1.2.0, was in July 2014. It was about time to get
354a new one out with all the improvements that have happened in the meantime.
355From now on, we will try to release gst-omx together with all other modules.
356
357This release features a lot of bugfixes, improved support for the Raspberry Pi
358and in general improved support for zerocopy rendering via EGL and a few minor
359new features.
360
361At this point, gst-omx is known to work best on the Raspberry Pi platform but
362it is also known to work on various other platforms. Unfortunately, we are
363not including configurations for any other platforms, so if you happen to use
364gst-omx: please send us patches with your configuration and code changes!
365
366### New Elements
367
368#### decodebin3, playbin3, parsebin (experimental)
369
370This release features new decoding and playback elements as experimental
371technology previews: `decodebin3` and `playbin3` will soon supersede the
372existing `decodebin` and `playbin` elements. We skipped the number 2 because
373it was already used back in the 0.10 days, which might cause confusion.
374Experimental technology preview means that everything should work fine already,
375but we can't guarantee there won't be minor behavioural changes in the
376next cycle. In any case, please test and report any problems back.
377
378Before we go into detail about what these new elements improve, let's look at
379the new [`parsebin`][parsebin] element. It works similarly to `decodebin` and
380`decodebin3`, only that it stops one step short and does not plug any actual
381decoder elements. It will only plug parsers, tag readers, demuxers and
382depayloaders. Also note that parsebin does not contain any queueing element.
383
384[`decodebin3`'s][decodebin3] internal architecture is slightly different from
385the existing `decodebin` element and fixes many long-standing issues with our
386decoding engine. For one, data is now fed into the internal `multiqueue` element
387*after* it has been parsed and timestamped, which means that the `multiqueue`
388element now has more knowledge and is able to calculate the interleaving of the
389various streams, thus minimizing memory requirements and doing away with magic
390values for buffering limits that were conceived when videos were 240p or 360p.
391Anyone who has tried to play back 4k video streams with decodebin2
392will have noticed the limitations of that approach. The improved timestamp
393tracking also enables `multiqueue` to keep streams of the same type (audio,
394video) aligned better, making sure switching between streams of the same type
395is very fast.
396
397Another major improvement in `decodebin3` is that it will no longer decode
398streams that are not being used. With the old `decodebin` and `playbin`, when
399there were 8 audio streams we would always decode all 8 streams even
400if 7 were not actually used. This caused a lot of CPU overhead, which was
401particularly problematic on embedded devices. When switching between streams
402`decodebin3` will try hard to re-use existing decoders. This is useful when
403switching between multiple streams of the same type if they are encoded in the
404same format.
405
406Re-using decoders is also useful when the available streams change on the fly,
407as might happen with radio streams (chained Oggs), digital television
408broadcasts, when adaptive streaming streams change bitrate, or when switching
409gaplessly to the next title. In order to guarantee a seamless transition, the
410old `decodebin2` would plug a second decoder for the new stream while finishing
411up the old stream. With `decodebin3`, this is no longer needed - at least not
412when the new and old format are the same. This will be particularly useful
413on embedded systems where it is often not possible to run multiple decoders
414at the same time, or when tearing down and setting up decoders is fairly
415expensive.
416
417`decodebin3` also allows for multiple input streams, not just a single one.
418This will be useful, in the future, for gapless playback, or for feeding
419multiple external subtitle streams to decodebin/playbin.
420
421`playbin3` uses `decodebin3` internally, and will supercede `playbin`.
422It was decided that it would be too risky to make the old `playbin` use the
423new `decodebin3` in a backwards-compatible way. The new architecture
424makes it awkward, if not impossible, to maintain perfect backwards compatibility
425in some aspects, hence `playbin3` was born, and developers can migrate to the
426new element and new API at their own pace.
427
428All of these new elements make use of the new `GstStream` API for listing and
429selecting streams, as described above. `parsebin` provides backwards
430compatibility for demuxers and parsers which do not advertise their streams
431using the new API yet (which is most).
432
433The new elements are not entirely feature-complete yet: `playbin3` does not
434support so-called decodersinks yet where the data is not decoded inside
435GStreamer but passed directly for decoding to the sink. `decodebin3` is missing
436the various `autoplug-*` signals to influence which decoders get autoplugged
437in which order. We're looking to add back this functionality, but it will probably
438be in a different way, with a single unified signal and using GstStream perhaps.
439
440For more information on these new elements, check out Edward Hervey's talk
441[*decodebin3 - dealing with modern playback use cases*][db3-talk]
442
443[parsebin]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-parsebin.html
444[decodebin3]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-decodebin3.html
445[db3-talk]: https://gstconf.ubicast.tv/videos/decodebin3-or-dealing-with-modern-playback-use-cases/
446
447#### LV2 ported from 0.10 and switched from slv2 to lilv2
448
449The LV2 wrapper plugin has been ported to 1.0 and moved from using the
450deprecated slv2 library to its replacement liblv2. We support sources and
451filter elements. lv2 is short for *Linux Audio Developer's Simple Plugin API
452(LADSPA) version 2* and is an open standard for audio plugins which includes
453support for audio synthesis (generation), digital signal processing of digital
454audio, and MIDI. The new lv2 plugin supersedes the existing LADSPA plugin.
455
456#### WebRTC DSP Plugin for echo-cancellation, gain control and noise suppression
457
458A set of new elements ([webrtcdsp][webrtcdsp], [webrtcechoprobe][webrtcechoprobe])
459based on the WebRTC DSP software stack can now be used to improve your audio
460voice communication pipelines. They support echo cancellation, gain control,
461noise suppression and more. For more details you may read
462[Nicolas' blog post][webrtc-blog-post].
463
464[webrtcdsp]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-webrtcdsp.html
465[webrtcechoprobe]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-webrtcechoprobe.html
466[webrtc-blog-post]: https://ndufresne.ca/2016/06/gstreamer-echo-canceller/
467
468#### Fraunhofer FDK AAC encoder and decoder
469
470New encoder and decoder elements wrapping the Fraunhofer FDK AAC library have
471been added (`fdkaacdec`, `fdkaacdec`). The Fraunhofer FDK AAC encoder is
472generally considered to be a very high-quality AAC encoder, but unfortunately
473it comes under a non-free license with the option to obtain a paid, commercial
474license.
475
476### Noteworthy element features and additions
477
478#### Major RTP and RTSP improvements
479
480- The RTSP server and source element, as well as the RTP jitterbuffer now support
481 remote clock synchronization according to [RFC7273][https://tools.ietf.org/html/rfc7273].
482- Support for application and profile specific RTCP packets was added.
483- The H265/HEVC payloader/depayloader is again in sync with the final RFC.
484- Seeking stability of the RTSP source and server was improved a lot and
485 runs stably now, even when doing scrub-seeking.
486- The RTSP server received various major bugfixes, including for regressions that
487 caused the IP/port address pool to not be considered, or NAT hole punching
488 to not work anymore. [Bugzilla #766612][https://bugzilla.gnome.org/show_bug.cgi?id=766612]
489- Various other bugfixes that improve the stability of RTP and RTSP, including
490 many new unit / integration tests.
491
492#### Improvements to splitmuxsrc and splitmuxsink
493
494- The splitmux element received reliability and error handling improvements,
495 removing at least one deadlock case. `splitmuxsrc` now stops cleanly at the end
496 of the segment when handling seeks with a stop time. We fixed a bug with large
497 amounts of downstream buffering causing incorrect out-of-sequence playback.
498
499- `splitmuxsrc` now has a `"format-location"` signal to directly specify the list
500 of files to play from.
501
502- `splitmuxsink` can now optionally send force-keyunit events to upstream
503 elements to allow splitting files more accurately instead of having to wait
504 for upstream to provide a new keyframe by itself.
505
506#### OpenGL/GLES improvements
507
508##### iOS and macOS (OS/X)
509
510- We now create OpenGL|ES 3.x contexts on iOS by default with a fallback to
511 OpenGL|ES 2.x if that fails.
512- Various zerocopy decoding fixes and enhancements with the
513 encoding/decoding/capturing elements.
514- libdispatch is now used on all Apple platforms instead of GMainLoop, removing
515 the expensive poll()/pthread_*() overhead.
516
517##### New API
518
519- `GstGLFramebuffer` - for wrapping OpenGL frame buffer objects. It provides
520 facilities for attaching `GstGLMemory` objects to the necessary attachment
521 points, binding and unbinding and running a user-supplied function with the
522 framebuffer bound.
523- `GstGLRenderbuffer` (a `GstGLBaseMemory` subclass) - for wrapping OpenGL
524 render buffer objects that are typically used for depth/stencil buffers or
525 for color buffers where we don't care about the output.
526- `GstGLMemoryEGL` (a `GstGLMemory` subclass) - for combining `EGLImage`s with a GL
527 texture that replaces `GstEGLImageMemory` bringing the improvements made to the
528 other `GstGLMemory` implementations. This fixes a performance regression in
529 zerocopy decoding on the Raspberry Pi when used with an updated gst-omx.
530
531##### Miscellaneous improvements
532
533- `gltestsrc` is now usable on devices/platforms with OpenGL 3.x and OpenGL|ES
534 and has completed or gained support for new patterns in line with the
535 existing ones in `videotestsrc`.
536- `gldeinterlace` is now available on devices/platforms with OpenGL|ES
537 implementations.
538- The dispmanx backend (used on the Raspberry Pi) now supports the
539 `gst_video_overlay_set_window_handle()` and
540 `gst_video_overlay_set_render_rectangle()` functions.
541- The `gltransformation` element now correctly transforms mouse coordinates (in
542 window space) to stream coordinates for both perspective and orthographic
543 projections.
544- The `gltransformation` element now detects if the
545 `GstVideoAffineTransformationMeta` is supported downstream and will efficiently
546 pass its transformation downstream. This is a performance improvement as it
547 results in less processing being required.
548- The wayland implementation now uses the multi-threaded safe event-loop API
549 allowing correct usage in applications that call wayland functions from
550 multiple threads.
551- Support for native 90 degree rotations and horizontal/vertical flips
552 in `glimagesink`.
553
554#### Vulkan
555
556- The Vulkan elements now work under Wayland and have received numerous
557 bugfixes.
558
559#### QML elements
560
561- `qmlglsink` video sink now works on more platforms, notably, Windows, Wayland,
562 and Qt's eglfs (for embedded devices with an OpenGL implementation) including
563 the Raspberry Pi.
564- New element `qmlglsrc` to record a QML scene into a GStreamer pipeline.
565
566#### KMS video sink
567
568- New element `kmssink` to render video using Direct Rendering Manager
569 (DRM) and Kernel Mode Setting (KMS) subsystems in the Linux
570 kernel. It is oriented to be used mostly in embedded systems.
571
572#### Wayland video sink
573
574- `waylandsink` now supports the wl_viewporter extension allowing
575 video scaling and cropping to be delegated to the Wayland
576 compositor. This extension is also been made optional, so that it can
577 also work on current compositors that don't support it. It also now has
578 support for the video meta, allowing zero-copy operations in more
579 cases.
580
581#### DVB improvements
582
583- `dvbsrc` now has better delivery-system autodetection and several
584 new parameter sanity-checks to improve its resilience to configuration
585 omissions and errors. Superfluous polling continues to be trimmed down,
586 and the debugging output has been made more consistent and precise.
587 Additionally, the channel-configuration parser now supports the new dvbv5
588 format, enabling `dvbbasebin` to automatically playback content transmitted
589 on delivery systems that previously required manual description, like ISDB-T.
590
591#### DASH, HLS and adaptivedemux
592
593- HLS now has support for Alternate Rendition audio and video tracks. Full
594 support for Alternate Rendition subtitle tracks will be in an upcoming release.
595- DASH received support for keyframe-only trick modes if the
596 `GST_SEEK_FLAG_TRICKMODE_KEY_UNITS` flag is given when seeking. It will
597 only download keyframes then, which should help with high-speed playback.
598 Changes to skip over multiple frames based on bandwidth and other metrics
599 will be added in the near future.
600- Lots of reliability fixes around seek handling and bitrate switching.
601
602#### Bluetooth improvements
603
604- The `avdtpsrc` element now supports metadata such as track title, artist
605 name, and more, which devices can send via AVRCP. These are published as
606 tags on the pipeline.
607- The `a2dpsink` element received some love and was cleaned up so that it
608 actually works after the initial GStreamer 1.0 port.
609
610#### GStreamer VAAPI
611
612- All the decoders have been split, one plugin feature per codec. So
613 far, the available ones, depending on the driver, are:
614 `vaapimpeg2dec`, `vaapih264dec`, `vaapih265dec`, `vaapivc1dec`, `vaapivp8dec`,
615 `vaapivp9dec` and `vaapijpegdec` (which already was split).
616- Improvements when mapping VA surfaces into memory. It now differentiates
617 between negotiation caps and allocations caps, since the allocation
618 memory for surfaces may be bigger than one that is going to be
619 mapped.
620- `vaapih265enc` now supports constant bitrate mode (CBR).
621- Since several VA drivers are unmaintained, we decide to keep a whitelist
622 with the va drivers we actually test, which is mostly the i915 and to a lesser
623 degree gallium from the mesa project. Exporting the environment variable
624 `GST_VAAPI_ALL_DRIVERS` disables the whitelist.
625- Plugin features are registered at run-time, according to their support by
626 the loaded VA driver. So only the decoders and encoder supported by the
627 system are registered. Since the driver can change, some dependencies are
628 tracked to invalidate the GStreamer registry and reload the plugin.
629- `dmabuf` importation from upstream has been improved, gaining performance.
630- `vaapipostproc` now can negotiate buffer transformations via caps.
631- Decoders now can do I-frame only reverse playback. This decodes I-frames
632 only because the surface pool is smaller than the required by the GOP to show all the
633 frames.
634- The upload of frames onto native GL textures has been optimized too, keeping
635 a cache of the internal structures for the offered textures by the sink.
636
637#### V4L2 changes
638
639- More pixels formats are now supported
640- Decoder is now using `G_SELECTION` instead of the deprecated `G_CROP`
641- Decoder now uses the `STOP` command to handle EOS
642- Transform element can now scale the pixel aspect ratio
643- Colorimetry support has been improved even more
644- We now support the `OUTPUT_OVERLAY` type of video node in v4l2sink
645
646#### Miscellaneous
647
648- `multiqueue`'s input pads gained a new `"group-id"` property which
649 can be used to group input streams. Typically one will assign
650 different id numbers to audio, video and subtitle streams for
651 example. This way `multiqueue` can make sure streams of the same
652 type advance in lockstep if some of the streams are unlinked and the
653 `"sync-by-running-time"` property is set. This is used in
654 decodebin3/playbin3 to implement almost-instantaneous stream
655 switching. The grouping is required because different downstream
656 paths (audio, video, etc.) may have different buffering/latency
657 etc. so might be consuming data from multiqueue with a slightly
658 different phase, and if we track different stream groups separately
659 we minimize stream switching delays and buffering inside the
660 `multiqueue`.
661- `alsasrc` now supports ALSA drivers without a position for each
662 channel, this is common in some professional or industrial hardware.
663- `libvpx` based decoders (`vp8dec` and `vp9dec`) now create multiple threads on
664 computers with multiple CPUs automatically.
665- `rfbsrc` - used for capturing from a VNC server - has seen a lot of
666 debugging. It now supports the latest version of the RFB
667 protocol and uses GIO everywhere.
668- `tsdemux` can now read ATSC E-AC-3 streams.
669- New `GstVideoDirection` video orientation interface for rotating, flipping
670 and mirroring video in 90° steps. It is implemented by the `videoflip` and
671 `glvideoflip` elements currently.
672- It is now possible to give `appsrc` a duration in time, and there is now a
673 non-blocking try-pull API for `appsink` that returns NULL if nothing is
674 available right now.
675- `x264enc` has support now for chroma-site and colorimetry settings
676- A new JPEG2000 parser element was added, and the JPEG2000 caps were cleaned
677 up and gained more information needed in combination with RTP and various
678 container formats.
679- Reverse playback support for `videorate` and `deinterlace` was implemented
680- Various improvements everywhere for reverse playback and `KEY_UNITS` trick mode
681- New cleaned up `rawaudioparse` and `rawvideoparse` elements that replace the
682 old `audioparse` and `videoparse` elements. There are compatibility element
683 factories registered with the old names to allow existing code to continue
684 to work.
685- The Decklink plugin gained support for 10 bit video SMPTE timecodes, and
686 generally got many bugfixes for various issues.
687- New API in `GstPlayer` for setting the multiview mode for stereoscopic
688 video, setting an HTTP/RTSP user agent and a time offset between audio and
689 video. In addition to that, there were various bugfixes and the new
690 gst-examples module contains Android, iOS, GTK+ and Qt example applications.
691- `GstBin` has new API for suppressing various `GstElement` or `GstObject`
692 flags that would otherwise be affected by added/removed child elements. This
693 new API allows `GstBin` subclasses to handle for themselves if they
694 should be considered a sink or source element, for example.
695- The `subparse` element can handle WebVTT streams now.
696- A new `sdpsrc` element was added that can read an SDP from a file, or get it
697 as a string as property and then sets up an RTP pipeline accordingly.
698
699### Plugin moves
700
701No plugins were moved this cycle. We'll make up for it next cycle, promise!
702
703### Rewritten memory leak tracer
704
705GStreamer has had basic functionality to trace allocation and freeing of
706both mini-objects (buffers, events, caps, etc.) and objects in the form of the
707internal `GstAllocTrace` tracing system. This API was never exposed in the
7081.x API series though. When requested, this would dump a list of objects and
709mini-objects at exit time which had still not been freed at that point,
710enabled with an environment variable. This subsystem has now been removed
711in favour of a new implementation based on the recently-added tracing framework.
712
713Tracing hooks have been added to trace the creation and destruction of
714GstObjects and mini-objects, and a new tracer plugin has been written using
715those new hooks to track which objects are still live and which are not. If
716GStreamer has been compiled against the libunwind library, the new leaks tracer
717will remember where objects were allocated from as well. By default the leaks
718tracer will simply output a warning if leaks have been detected on `gst_deinit()`.
719
720If the `GST_LEAKS_TRACER_SIG` environment variable is set, the leaks tracer
721will also handle the following UNIX signals:
722
723 - `SIGUSR1`: log alive objects
724 - `SIGUSR2`: create a checkpoint and print a list of objects created and
725 destroyed since the previous checkpoint.
726
727Unfortunately this will not work on Windows due to no signals, however.
728
729If the `GST_LEAKS_TRACER_STACK_TRACE` environment variable is set, the leaks
730tracer will also log the creation stack trace of leaked objects. This may
731significantly increase memory consumption however.
732
733New `MAY_BE_LEAKED` flags have been added to GstObject and GstMiniObject, so
734that objects and mini-objects that are likely to stay around forever can be
735flagged and blacklisted from the leak output.
736
737To give the new leak tracer a spin, simply call any GStreamer application such
738as `gst-launch-1.0` or `gst-play-1.0` like this:
739
740 GST_TRACERS=leaks gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
741
742If there are any leaks, a warning will be raised at the end.
743
744It is also possible to trace only certain types of objects or mini-objects:
745
746 GST_TRACERS="leaks(GstEvent,GstMessage)" gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
747
748This dedicated leaks tracer is much much faster than valgrind since all code is
749executed natively instead of being instrumented. This makes it very suitable
750for use on slow machines or embedded devices. It is however limited to certain
751types of leaks and won't catch memory leaks when the allocation has been made
752via plain old `malloc()` or `g_malloc()` or other means. It will also not trace
753non-GstObject GObjects.
754
755The goal is to enable leak tracing on GStreamer's Continuous-Integration and
756testing system, both for the regular unit tests (make check) and media tests
757(gst-validate), so that accidental leaks in common code paths can be detected
758and fixed quickly.
759
760For more information about the new tracer, check out Guillaume Desmottes's
761["Tracking Memory Leaks"][leaks-talk] talk or his [blog post][leaks-blog] about
762the topic.
763
764[leaks-talk]: https://gstconf.ubicast.tv/videos/tracking-memory-leaks/
765[leaks-blog]: https://blog.desmottes.be/?post/2016/06/20/GStreamer-leaks-tracer
766
767### GES and NLE changes
768
769- Clip priorities are now handled by the layers, and the GESTimelineElement
770 priority property is now deprecated and unused
771- Enhanced (de)interlacing support to always use the `deinterlace` element
772 and expose needed properties to users
773- Allow reusing clips children after removing the clip from a layer
774- We are now testing many more rendering formats in the gst-validate
775 test suite, and failures have been fixed.
776- Also many bugs have been fixed in this cycle!
777
778### GStreamer validate changes
779
780This cycle has been focused on making GstValidate more than just a validating
781tool, but also a tool to help developers debug their GStreamer issues. When
782reporting issues, we try to gather as much information as possible and expose
783it to end users in a useful way. For an example of such enhancements, check out
784Thibault Saunier's [blog post](improving-debugging-gstreamer-validate) about
785the new Not Negotiated Error reporting mechanism.
786
787Playbin3 support has been added so we can run validate tests with `playbin3`
788instead of playbin.
789
790We are now able to properly communicate between `gst-validate-launcher` and
791launched subprocesses with actual IPC between them. That has enabled the test
792launcher to handle failing tests specifying the exact expected issue(s).
793
794[improving-debugging-gstreamer-validate]: https://blogs.s-osg.org/improving-debugging-gstreamer-validate/
795
796### gst-libav changes
797
798gst-libav uses the recently released ffmpeg 3.2 now, which brings a lot of
799improvements and bugfixes from the ffmpeg team in addition to various new
800codec mappings on the GStreamer side and quite a few bugfixes to the GStreamer
801integration to make it more robust.
802
803## Build and Dependencies
804
805### Experimental support for Meson as build system
806
807#### Overview
808
809We have have added support for building GStreamer using the
810[Meson build system][meson]. This is currently experimental, but should work
811fine at least on Linux using the gcc or clang toolchains and on Windows using
812the MingW or MSVC toolchains.
813
814Autotools remains the primary build system for the time being, but we hope to
815someday replace it and will steadily work towards that goal.
816
817More information about the background and implications of all this and where
818we're hoping to go in future with this can be found in [Tim's mail][meson-mail]
819to the gstreamer-devel mailing list.
820
821For more information on Meson check out [these videos][meson-videos] and also
822the [Meson talk][meson-gstconf] at the GStreamer Conference.
823
824Immediate benefits for Linux users are faster builds and rebuilds. At the time
825of writing the Meson build of GStreamer is used by default in GNOME's jhbuild
826system.
827
828The Meson build currently still lacks many of the fine-grained configuration
829options to enable/disable specific plugins. These will be added back in due
830course.
831
832Note: The meson build files are not distributed in the source tarballs, you will
833need to get GStreamer from git if you want try it out.
834
835[meson]: http://mesonbuild.com/
836[meson-mail]: https://lists.freedesktop.org/archives/gstreamer-devel/2016-September/060231.html
837[meson-videos]: http://mesonbuild.com/videos.html
838[meson-gstconf]: https://gstconf.ubicast.tv/videos/gstreamer-development-on-windows-ans-faster-builds-everywhere-with-meson/
839
840#### Windows Visual Studio toolchain support
841
842Windows users might appreciate being able to build GStreamer using the MSVC
843toolchain, which is not possible using autotools. This means that it will be
844possible to debug GStreamer and applications in Visual Studio, for example.
845We require VS2015 or newer for this at the moment.
846
847There are two ways to build GStreamer using the MSVC toolchain:
848
8491. Using the MSVC command-line tools (`cl.exe` etc.) via Meson's "ninja" backend.
8502. Letting Meson's "vs2015" backend generate Visual Studio project files that
851 can be opened in Visual Studio and compiled from there.
852
853This is currently only for adventurous souls though. All the bits are in place,
854but support for all of this has not been merged into GStreamer's cerbero build
855tool yet at the time of writing. This will hopefully happen in the next cycle,
856but for now this means that those wishing to compile GStreamer with MSVC will
857have to get their hands dirty.
858
859There are also no binary SDK builds using the MSVC toolchain yet.
860
861For more information on GStreamer builds using Meson and the Windows toolchain
862check out Nirbheek Chauhan's blog post ["Building and developing GStreamer using Visual Studio"][msvc-blog].
863
864[msvc-blog]: http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
865
866### Dependencies
867
868#### gstreamer
869
870libunwind was added as an optional dependency. It is used only for debugging
871and tracing purposes.
872
873The `opencv` plugin in gst-plugins-bad can now be built against OpenCV
874version 3.1, previously only 2.3-2.5 were supported.
875
876#### gst-plugins-ugly
877
878- `mpeg2dec` now requires at least libmpeg2 0.5.1 (from 2008).
879
880#### gst-plugins-bad
881
882- `gltransformation` now requires at least graphene 1.4.0.
883
884- `lv2` now plugin requires at least lilv 0.16 instead of slv2.
885
886### Packaging notes
887
888Packagers please note that the `gst/gstconfig.h` public header file in the
889GStreamer core library moved back from being an architecture dependent include
890to being architecture independent, and thus it is no longer installed into
891`$(libdir)/gstreamer-1.0/include/gst` but into the normal include directory
892where it lives happily ever after with all the other public header files. The
893reason for this is that we now check whether the target supports unaligned
894memory access based on predefined compiler macros at compile time instead of
895checking it at configure time.
896
897## Platform-specific improvements
898
899### Android
900
901#### New universal binaries for all supported ABIs
902
903We now provide a "universal" tarball to allow building apps against all the
904architectures currently supported (x86, x86-64, armeabi, armeabi-v7a,
905armeabi-v8a). This is needed for building with recent versions of the Android
906NDK which defaults to building against all supported ABIs. Use [the Android
907player example][android-player-example-build] as a reference for the required
908changes.
909
910[android-player-example-build]: https://cgit.freedesktop.org/gstreamer/gst-examples/commit/playback/player/android?id=a5cdde9119f038a1eb365aca20faa9741a38e788
911
912#### Miscellaneous
913
914- New `ahssrc` element that allows reading the hardware sensors, e.g. compass
915 or accelerometer.
916
917### macOS (OS/X) and iOS
918
919- Support for querying available devices on OS/X via the GstDeviceProvider
920 API was added.
921- It is now possible to create OpenGL|ES 3.x contexts on iOS and use them in
922 combination with the VideoToolbox based decoder element.
923- many OpenGL/GLES improvements, see OpenGL section above
924
925### Windows
926
927- gstconfig.h: Always use dllexport/import on Windows with MSVC
928- Miscellaneous fixes to make libs and plugins compile with the MVSC toolchain
929- MSVC toolchain support (see Meson section above for more details)
930
931## New Modules for Documentation, Examples, Meson Build
932
933Three new git modules have been added recently:
934
935### gst-docs
936
937This is a new module where we will maintain documentation in the markdown
938format.
939
940It contains the former gstreamer.com SDK tutorials which have kindly been made
941available by Fluendo under a Creative Commons license. The tutorials have been
942reviewed and updated for GStreamer 1.x and will be available as part of the
943[official GStreamer documentation][doc] going forward. The old gstreamer.com
944site will then be shut down with redirects pointing to the updated tutorials.
945
946Some of the existing docbook XML-formatted documentation from the GStreamer
947core module such as the *Application Development Manual* and the *Plugin
948Writer's Guide* have been converted to markdown as well and will be maintained
949in the gst-docs module in future. They will be removed from the GStreamer core
950module in the next cycle.
951
952This is just the beginning. Our goal is to provide a more cohesive documentation
953experience for our users going forward, and easier to create and maintain
954documentation for developers. There is a lot more work to do, get in touch if
955you want to help out.
956
957If you encounter any problems or spot any omissions or outdated content in the
958new documentation, please [file a bug in bugzilla][doc-bug] to let us know.
959
960We will probably release gst-docs as a separate tarball for distributions to
961package in the next cycle.
962
963[doc]: http://gstreamer.freedesktop.org/documentation/
964[doc-bug]: https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=documentation
965
966### gst-examples
967
968A new [module][examples-git] has been added for examples. It does not contain
969much yet, currently it only contains a small [http-launch][http-launch] utility
970that serves a pipeline over http as well as various [GstPlayer playback frontends][puis]
971for Android, iOS, Gtk+ and Qt.
972
973More examples will be added over time. The examples in this repository should
974be more useful and more substantial than most of the examples we ship as part
975of our other modules, and also written in a way that makes them good example
976code. If you have ideas for examples, let us know.
977
978No decision has been made yet if this module will be released and/or packaged.
979It probably makes sense to do so though.
980
981[examples-git]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/
982[http-launch]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/network/http-launch/
983[puis]: https://cgit.freedesktop.org/gstreamer/gst-examples/tree/playback/player
984
985### gst-build
986
987[gst-build][gst-build-git] is a new meta module to build GStreamer using the
988new Meson build system. This module is not required to build GStreamer with
989Meson, it is merely for convenience and aims to provide a development setup
990similar to the existing `gst-uninstalled` setup.
991
992gst-build makes use of Meson's [subproject feature][meson-subprojects] and sets
993up the various GStreamer modules as subprojects, so they can all be updated and
994built in parallel.
995
996This module is still very new and highly experimental. It should work at least
997on Linux and Windows (OS/X needs some build fixes). Let us know of any issues
998you encounter by popping into the `#gstreamer` IRC channel or by
999[filing a bug][gst-build-bug].
1000
1001This module will probably not be released or packaged (does not really make sense).
1002
1003[gst-build-git]: https://cgit.freedesktop.org/gstreamer/gst-build/tree/
1004[gst-build-bug]: https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=gst-build
1005[meson-subprojects]: https://github.com/mesonbuild/meson/wiki/Subprojects
1006
1007## Contributors
1008
1009Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, Alex
1010Ashley, Alex-P. Natsios, Alistair Buxton, Allen Zhang, Andreas Naumann, Andrew
1011Eikum, Andy Devar, Anthony G. Basile, Arjen Veenhuizen, Arnaud Vrac, Artem
1012Martynovich, Arun Raghavan, Aurélien Zanelli, Barun Kumar Singh, Bernhard
1013Miller, Brad Lackey, Branko Subasic, Carlos Garcia Campos, Carlos Rafael
1014Giani, Christoffer Stengren, Daiki Ueno, Damian Ziobro, Danilo Cesar Lemes de
1015Paula, David Buchmann, Dimitrios Katsaros, Duncan Palmer, Edward Hervey,
1016Emmanuel Poitier, Enrico Jorns, Enrique Ocaña González, Fabrice Bellet,
1017Florian Zwoch, Florin Apostol, Francisco Velazquez, Frédéric Bertolus, Fredrik
1018Fornwall, Gaurav Gupta, George Kiagiadakis, Georg Lippitsch, Göran Jönsson,
1019Graham Leggett, Gregoire Gentil, Guillaume Desmottes, Gwang Yoon Hwang, Haakon
1020Sporsheim, Haihua Hu, Havard Graff, Heinrich Fink, Hoonhee Lee, Hyunjun Ko,
1021Iain Lane, Ian, Ian Jamison, Jagyum Koo, Jake Foytik, Jakub Adam, Jan
1022Alexander Steffens (heftig), Jan Schmidt, Javier Martinez Canillas, Jerome
1023Laheurte, Jesper Larsen, Jie Jiang, Jihae Yi, Jimmy Ohn, Jinwoo Ahn, Joakim
1024Johansson, Joan Pau Beltran, Jonas Holmberg, Jonathan Matthew, Jonathan Roy,
1025Josep Torra, Julien Isorce, Jun Ji, Jürgen Slowack, Justin Kim, Kazunori
1026Kobayashi, Kieran Bingham, Kipp Cannon, Koop Mast, Kouhei Sutou, Kseniia, Kyle
1027Schwarz, Kyungyong Kim, Linus Svensson, Luis de Bethencourt, Marcin Kolny,
1028Marcin Lewandowski, Marianna Smidth Buschle, Mario Sanchez Prada, Mark
1029Combellack, Mark Nauwelaerts, Martin Kelly, Matej Knopp, Mathieu Duponchelle,
1030Mats Lindestam, Matthew Gruenke, Matthew Waters, Michael Olbrich, Michal Lazo,
1031Miguel París Díaz, Mikhail Fludkov, Minjae Kim, Mohan R, Munez, Nicola Murino,
1032Nicolas Dufresne, Nicolas Huet, Nikita Bobkov, Nirbheek Chauhan, Olivier
1033Crête, Paolo Pettinato, Patricia Muscalu, Paulo Neves, Peng Liu, Peter
1034Seiderer, Philippe Normand, Philippe Renon, Philipp Zabel, Pierre Lamot, Piotr
1035Drąg, Prashant Gotarne, Raffaele Rossi, Ray Strode, Reynaldo H. Verdejo
1036Pinochet, Santiago Carot-Nemesio, Scott D Phillips, Sebastian Dröge, Sebastian
1037Rasmussen, Sergei Saveliev, Sergey Borovkov, Sergey Mamonov, Sergio Torres
1038Soldado, Seungha Yang, sezero, Song Bing, Sreerenj Balachandran, Stefan Sauer,
1039Stephen, Steven Hoving, Stian Selnes, Thiago Santos, Thibault Saunier, Thijs
1040Vermeir, Thomas Bluemel, Thomas Jones, Thomas Klausner, Thomas Scheuermann,
1041Tim-Philipp Müller, Ting-Wei Lan, Tom Schoonjans, Ursula Maplehurst, Vanessa
1042Chipirras Navalon, Víctor Manuel Jáquez Leal, Vincent Penquerc'h, Vineeth TM,
1043Vivia Nikolaidou, Vootele Vesterblom, Wang Xin-yu (王昕宇), William Manley,
1044Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens, xlazom00,
1045Yann Jouanin, Zaheer Abbas Merali
1046
1047... and many others who have contributed bug reports, translations, sent
1048suggestions or helped testing.
1049
1050## Bugs fixed in 1.10
1051
1052More than [750 bugs][bugs-fixed-in-1.10] have been fixed during
1053the development of 1.10.
1054
1055This list does not include issues that have been cherry-picked into the
1056stable 1.8 branch and fixed there as well, all fixes that ended up in the
10571.8 branch are also included in 1.10.
1058
1059This list also does not include issues that have been fixed without a bug
1060report in bugzilla, so the actual number of fixes is much higher.
1061
1062[bugs-fixed-in-1.10]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=164074&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.8.1&target_milestone=1.8.2&target_milestone=1.8.3&target_milestone=1.8.4&target_milestone=1.9.1&target_milestone=1.9.2&target_milestone=1.9.90&target_milestone=1.10.0
1063
1064## Stable 1.10 branch
1065
1066After the 1.10.0 release there will be several 1.10.x bug-fix releases which
1067will contain bug fixes which have been deemed suitable for a stable branch,
1068but no new features or intrusive changes will be added to a bug-fix release
1069usually. The 1.10.x bug-fix releases will be made from the git 1.10 branch,
1070which is a stable branch.
1071
1072### 1.10.0
1073
10741.10.0 was released on 1st November 2016.
1075
1076## Known Issues
1077
1078- iOS builds with iOS 6 SDK and old C++ STL. You need to select iOS 6 instead
1079 of 7 or 8 in your projects settings to be able to link applications.
1080 [Bug #766366](https://bugzilla.gnome.org/show_bug.cgi?id=766366)
1081- Code signing for Apple platforms has some problems currently, requiring
1082 manual work to get your application signed. [Bug #771860](https://bugzilla.gnome.org/show_bug.cgi?id=771860)
1083- Building applications with Android NDK r13 on Windows does not work. Other
1084 platforms and earlier/later versions of the NDK are not affected.
1085 [Bug #772842](https://bugzilla.gnome.org/show_bug.cgi?id=772842)
1086- The new leaks tracer may deadlock the application (or exhibit other undefined
1087 behaviour) when `SIGUSR` handling is enabled via the `GST_LEAKS_TRACER_SIG`
1088 environment variable. [Bug #770373](https://bugzilla.gnome.org/show_bug.cgi?id=770373)
1089- vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit Windows is unaffected.
1090 [Bug #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663)
1091
1092## Schedule for 1.12
1093
1094Our next major feature release will be 1.12, and 1.11 will be the unstable
1095development version leading up to the stable 1.12 release. The development
1096of 1.11/1.12 will happen in the git master branch.
1097
1098The plan for the 1.12 development cycle is yet to be confirmed, but it is
1099expected that feature freeze will be around early/mid-January,
1100followed by several 1.11 pre-releases and the new 1.12 stable release
1101in March.
1102
11031.12 will be backwards-compatible to the stable 1.10, 1.8, 1.6, 1.4, 1.2 and
11041.0 release series.
1105
1106- - -
1107
1108*These release notes have been prepared by Olivier Crête, Sebastian Dröge,
1109Nicolas Dufresne, Edward Hervey, Víctor Manuel Jáquez Leal, Tim-Philipp
1110Müller, Reynaldo H. Verdejo Pinochet, Arun Raghavan, Thibault Saunier,
1111Jan Schmidt, Wim Taymans, Matthew Waters*
1112
1113*License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*
1114