Release 1.10.0
[platform/upstream/gstreamer.git] / NEWS
1 # GStreamer 1.10 Release Notes
2
3 **GStreamer 1.10.0 was released on 1st November 2016.**
4
5 The GStreamer team is proud to announce a new major feature release in the
6 stable 1.x API series of your favourite cross-platform multimedia framework!
7
8 As always, this release is again packed with new features, bug fixes and other
9 improvements.
10
11 See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest
12 version 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
21 The GStreamer team is proud to announce a new major feature release in the
22 stable 1.x API series of your favourite cross-platform multimedia framework!
23
24 As always, this release is again packed with new features, bug fixes and other
25 improvements.
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
61 New API was added to receive element property change notifications via
62 bus 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
64 at least two reasons: one had to implement a signal callback function, and that
65 callback function would usually be called from one of the streaming threads, so
66 one had to marshal (send) any information gathered or pending requests to the
67 main application thread which was tedious and error-prone.
68
69 Enter [`gst_element_add_property_notify_watch()`][notify-watch] and
70 [`gst_element_add_property_deep_notify_watch()`][deep-notify-watch] which will
71 watch for changes of a property on the specified element, either only for this
72 element or recursively for a whole bin or pipeline. Whenever such a
73 property change happens, a `GST_MESSAGE_PROPERTY_NOTIFY` message will be posted
74 on the pipeline bus with details of the element, the property and the new
75 property value, all of which can be retrieved later from the message in the
76 application via [`gst_message_parse_property_notify()`][parse-notify]. Unlike
77 the GstBus watch functions, this API does not rely on a running GLib main loop.
78
79 The above can be used to be notified asynchronously of caps changes in the
80 pipeline, 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
88 GstBin has gained `"deep-element-added"` and `"deep-element-removed"` signals
89 which makes it easier for applications and higher-level plugins to track when
90 elements 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
93 can be used to configure elements as they are added to `playbin`, just like the
94 existing `"source-setup"` signal which can be used to configure the source
95 element created.
96
97 ##### Error messages can contain additional structured details
98
99 It is often useful to provide additional, structured information in error,
100 warning or info messages for applications (or higher-level elements) to make
101 intelligent decisions based on them. To allow this, error, warning and info
102 messages now have API for adding arbitrary additional information to them
103 using a `GstStructure`:
104 [`GST_ELEMENT_ERROR_WITH_DETAILS`][element-error-with-details] and
105 corresponding API for the other message types.
106
107 This is now used e.g. by the new [`GST_ELEMENT_FLOW_ERROR`][element-flow-error]
108 API to include the actual flow error in the error message, and the
109 [souphttpsrc element][souphttpsrc-detailed-errors] to provide the HTTP
110 status 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
118 Sometimes, elements need to redirect the current stream URL and tell the
119 application to proceed with this new URL, possibly using a different
120 protocol too (thus changing the pipeline configuration). Until now, this was
121 informally implemented using `ELEMENT` messages on the bus.
122
123 Now this has been formalized in the form of a new `GST_MESSAGE_REDIRECT` message.
124 A new redirect message can be created using [`gst_message_new_redirect()`][new-redirect].
125 If needed, multiple redirect locations can be specified by calling
126 [`gst_message_add_redirect_entry()`][add-redirect] to add further redirect
127 entries, all with metadata, so the application can decide which is
128 most 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
135 New 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
138 previously internal to GStreamer have now been exposed for general use.
139
140 The existing pad link functions will refuse to link pads or elements at
141 different levels in the pipeline hierarchy, requiring the developer to
142 create ghost pads where necessary. These new utility functions will
143 automatically create ghostpads as needed when linking pads at different
144 levels of the hierarchy (e.g. from an element inside a bin to one that's at
145 the 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
152 Pad probes: IDLE and BLOCK probes now work slightly differently in pull mode,
153 so that push and pull mode have opposite scenarios for idle and blocking probes.
154 In push mode, it will block with some data type and IDLE won't have any data.
155 In pull mode, it will block _before_ getting a buffer and will be IDLE once some
156 data 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
167 The default GStreamer debug log handler can now be removed before
168 calling `gst_init()`, so that it will never get installed and won't be active
169 during initialization.
170
171 A new [`STREAM_GROUP_DONE` event][stream-group-done-event] was added. In some
172 ways it works similar to the `EOS` event in that it can be used to unblock
173 downstream 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).
176 This is used to unblock input-selector when switching between streams in
177 adaptive 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
181 The `gst-launch-1.0` command line tool will now print unescaped caps in verbose
182 mode (enabled by the -v switch).
183
184 [`gst_element_call_async()`][call-async] has been added as convenience API for
185 plugin developers. It is useful for one-shot operations that need to be done
186 from a thread other than the current streaming thread. It is backed by a
187 thread-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
191 Various race conditions have been fixed around the `GstPoll` API used by e.g.
192 `GstBus` and `GstBufferPool`. Some of these manifested themselves primarily
193 on Windows.
194
195 `GstAdapter` can now keep track of discontinuities signalled via the `DISCONT`
196 buffer flag, and has gained [new API][new-adapter-api] to track PTS, DTS and
197 offset at the last discont. This is useful for plugins implementing advanced
198 trick 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
208 New stream listing and stream selection API: new API has been added to
209 provide high-level abstractions for streams ([`GstStream`][stream-api])
210 and collections of streams ([`GstStreamCollections`][stream-collection-api]).
211
212 ##### Stream listing
213
214 A [`GstStream`][stream-api] contains all the information pertinent to a stream,
215 such as stream id, caps, tags, flags and stream type(s); it can represent a
216 single elementary stream (e.g. audio, video, subtitles, etc.) or a container
217 stream. This will depend on the context. In a decodebin3/playbin3 one
218 it will typically be elementary streams that can be selected and unselected.
219
220 A [`GstStreamCollection`][stream-collection-api] represents a group of streams
221 and is used to announce or publish all available streams. A GstStreamCollection
222 is immutable - once created it won't change. If the available streams change,
223 e.g. because a new stream appeared or some streams disappeared, a new stream
224 collection will be published. This new stream collection may contain streams
225 from the previous collection if those streams persist, or completely new ones.
226 Stream collections do not yet list all theoretically available streams,
227 e.g. other available DVD angles or alternative resolutions/bitrate of the same
228 stream in case of adaptive streaming.
229
230 New events and messages have been added to notify or update other elements and
231 the application about which streams are currently available and/or selected.
232 This way, we can easily and seamlessly let the application know whenever the
233 available streams change, as happens frequently with digital television streams
234 for example. The new system is also more flexible. For example, it is now also
235 possible for the application to select multiple streams of the same type
236 (e.g. in a transcoding/transmuxing scenario).
237
238 A [`STREAM_COLLECTION` message][stream-collection-msg] is posted on the bus
239 to inform the parent bin (e.g. `playbin3`, `decodebin3`) and/or the application
240 about what streams are available, so you no longer have to hunt for this
241 information at different places. The available information includes number of
242 streams of each type, caps, tags etc.  Bins and/or the application can intercept
243 the message synchronously to select and deselect streams before any data is
244 produced - for the case where elements such as the demuxers support the new
245 stream API, not necessarily in the parsebin compatibility fallback case.
246
247 Similarly, there is also a [`STREAM_COLLECTION` event][stream-collection-event]
248 to inform downstream elements of the available streams. This event can be used
249 by elements to aggregate streams from multiple inputs into one single collection.
250
251 The `STREAM_START` event was extended so that it can also contain a GstStream
252 object 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
256 used 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
268 Once the available streams have been published, streams can be selected via
269 their stream ID using the new `SELECT_STREAMS` event, which can be created
270 with [`gst_event_new_select_streams()`][event-select-streams]. The new API
271 supports selecting multiple streams per stream type. In the future, we may also
272 implement explicit deselection of streams that will never be used, so
273 elements can skip these and never expose them or output data for them in the
274 first place.
275
276 The application is then notified of the currently selected streams via the
277 new `STREAMS_SELECTED` message on the pipeline bus, containing both the current
278 stream collection as well as the selected streams. This might be posted in
279 response to the application sending a `SELECT_STREAMS` event or when
280 `decodebin3` or `playbin3` decide on the streams to be initially selected without
281 application 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
287 See further below for some notes on the new elements supporting this new
288 stream API, namely: `decodebin3`, `playbin3` and `parsebin`.
289
290 More 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
304 The audio conversion library received a completely new and rewritten audio
305 resampler, complementing the audio conversion routines moved into the audio
306 library in the [previous release][release-notes-1.8]. Integrating the resampler
307 with the other audio conversion library allows us to implement generic
308 conversion much more efficiently, as format conversion and resampling can now
309 be done in the same processing loop instead of having to do it in separate
310 steps (our element implementations do not make use of this yet though).
311
312 The new audio resampler library is a combination of some of the best features
313 of other samplers such as ffmpeg, speex and SRC. It natively supports S16, S32,
314 F32 and F64 formats and uses optimized x86 and neon assembly for most of its
315 processing. It also has support for dynamically changing sample rates by incrementally
316 updating the filter tables using linear or cubic interpolation. According to
317 some benchmarks, it's one of the fastest and most accurate resamplers around.
318
319 The `audioresample` plugin has been ported to the new audio library functions
320 to 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
326 Support for SMPTE timecodes was added to the GStreamer video library. This
327 comes with an abstraction for timecodes, [`GstVideoTimeCode`][video-timecode]
328 and a [`GstMeta`][video-timecode-meta] that can be placed on video buffers for
329 carrying the timecode information for each frame. Additionally there is
330 various API for making handling of timecodes easy and to do various
331 calculations with them.
332
333 A new plugin called [`timecode`][timecode-plugin] was added, that contains an
334 element called `timecodestamper` for putting the timecode meta on video frames
335 based on counting the frames and another element called `timecodewait` that
336 drops all video (and audio) until a specific timecode is reached.
337
338 Additionally support was added to the Decklink plugin for including the
339 timecode information when sending video out or capturing it via SDI, the
340 `qtmux` element is able to write timecode information into the MOV container,
341 and the `timeoverlay` element can overlay timecodes on top of the video.
342
343 More information can be found in the [talk about timecodes][timecode-talk] at
344 the 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
353 The last gst-omx release, 1.2.0, was in July 2014. It was about time to get
354 a new one out with all the improvements that have happened in the meantime.
355 From now on, we will try to release gst-omx together with all other modules.
356
357 This release features a lot of bugfixes, improved support for the Raspberry Pi
358 and in general improved support for zerocopy rendering via EGL and a few minor
359 new features.
360
361 At this point, gst-omx is known to work best on the Raspberry Pi platform but
362 it is also known to work on various other platforms. Unfortunately, we are
363 not including configurations for any other platforms, so if you happen to use
364 gst-omx: please send us patches with your configuration and code changes!
365
366 ### New Elements
367
368 #### decodebin3, playbin3, parsebin (experimental)
369
370 This release features new decoding and playback elements as experimental
371 technology previews: `decodebin3` and `playbin3` will soon supersede the
372 existing `decodebin` and `playbin` elements. We skipped the number 2 because
373 it was already used back in the 0.10 days, which might cause confusion.
374 Experimental technology preview means that everything should work fine already,
375 but we can't guarantee there won't be minor behavioural changes in the
376 next cycle. In any case, please test and report any problems back.
377
378 Before we go into detail about what these new elements improve, let's look at
379 the 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
381 decoder elements. It will only plug parsers, tag readers, demuxers and
382 depayloaders. Also note that parsebin does not contain any queueing element.
383
384 [`decodebin3`'s][decodebin3] internal architecture is slightly different from
385 the existing `decodebin` element and fixes many long-standing issues with our
386 decoding 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`
388 element now has more knowledge and is able to calculate the interleaving of the
389 various streams, thus minimizing memory requirements and doing away with magic
390 values for buffering limits that were conceived when videos were 240p or 360p.
391 Anyone who has tried to play back 4k video streams with decodebin2
392 will have noticed the limitations of that approach. The improved timestamp
393 tracking also enables `multiqueue` to keep streams of the same type (audio,
394 video) aligned better, making sure switching between streams of the same type
395 is very fast.
396
397 Another major improvement in `decodebin3` is that it will no longer decode
398 streams that are not being used. With the old `decodebin` and `playbin`, when
399 there were 8 audio streams we would always decode all 8 streams even
400 if 7 were not actually used. This caused a lot of CPU overhead, which was
401 particularly problematic on embedded devices. When switching between streams
402 `decodebin3` will try hard to re-use existing decoders. This is useful when
403 switching between multiple streams of the same type if they are encoded in the
404 same format.
405
406 Re-using decoders is also useful when the available streams change on the fly,
407 as might happen with radio streams (chained Oggs), digital television
408 broadcasts, when adaptive streaming streams change bitrate, or when switching
409 gaplessly to the next title. In order to guarantee a seamless transition, the
410 old `decodebin2` would plug a second decoder for the new stream while finishing
411 up the old stream. With `decodebin3`, this is no longer needed - at least not
412 when the new and old format are the same. This will be particularly useful
413 on embedded systems where it is often not possible to run multiple decoders
414 at the same time, or when tearing down and setting up decoders is fairly
415 expensive.
416
417 `decodebin3` also allows for multiple input streams, not just a single one.
418 This will be useful, in the future, for gapless playback, or for feeding
419 multiple external subtitle streams to decodebin/playbin.
420
421 `playbin3` uses `decodebin3` internally, and will supercede `playbin`.
422 It was decided that it would be too risky to make the old `playbin` use the
423 new `decodebin3` in a backwards-compatible way. The new architecture
424 makes it awkward, if not impossible, to maintain perfect backwards compatibility
425 in some aspects, hence `playbin3` was born, and developers can migrate to the
426 new element and new API at their own pace.
427
428 All of these new elements make use of the new `GstStream` API for listing and
429 selecting streams, as described above. `parsebin` provides backwards
430 compatibility for demuxers and parsers which do not advertise their streams
431 using the new API yet (which is most).
432
433 The new elements are not entirely feature-complete yet: `playbin3` does not
434 support so-called decodersinks yet where the data is not decoded inside
435 GStreamer but passed directly for decoding to the sink. `decodebin3` is missing
436 the various `autoplug-*` signals to influence which decoders get autoplugged
437 in which order. We're looking to add back this functionality, but it will probably
438 be in a different way, with a single unified signal and using GstStream perhaps.
439
440 For 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
449 The LV2 wrapper plugin has been ported to 1.0 and moved from using the
450 deprecated slv2 library to its replacement liblv2. We support sources and
451 filter 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
453 support for audio synthesis (generation), digital signal processing of digital
454 audio, 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
458 A set of new elements ([webrtcdsp][webrtcdsp], [webrtcechoprobe][webrtcechoprobe])
459 based on the WebRTC DSP software stack can now be used to improve your audio
460 voice communication pipelines. They support echo cancellation, gain control,
461 noise 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
470 New encoder and decoder elements wrapping the Fraunhofer FDK AAC library have
471 been added (`fdkaacdec`, `fdkaacdec`). The Fraunhofer FDK AAC encoder is
472 generally considered to be a very high-quality AAC encoder, but unfortunately
473 it comes under a non-free license with the option to obtain a paid, commercial
474 license.
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
701 No plugins were moved this cycle. We'll make up for it next cycle, promise!
702
703 ### Rewritten memory leak tracer
704
705 GStreamer has had basic functionality to trace allocation and freeing of
706 both mini-objects (buffers, events, caps, etc.) and objects in the form of the
707 internal `GstAllocTrace` tracing system. This API was never exposed in the
708 1.x API series though. When requested, this would dump a list of objects and
709 mini-objects at exit time which had still not been freed at that point,
710 enabled with an environment variable. This subsystem has now been removed
711 in favour of a new implementation based on the recently-added tracing framework.
712
713 Tracing hooks have been added to trace the creation and destruction of
714 GstObjects and mini-objects, and a new tracer plugin has been written using
715 those new hooks to track which objects are still live and which are not. If
716 GStreamer has been compiled against the libunwind library, the new leaks tracer
717 will remember where objects were allocated from as well. By default the leaks
718 tracer will simply output a warning if leaks have been detected on `gst_deinit()`.
719
720 If the `GST_LEAKS_TRACER_SIG` environment variable is set, the leaks tracer
721 will 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
727 Unfortunately this will not work on Windows due to no signals, however.
728
729 If the `GST_LEAKS_TRACER_STACK_TRACE` environment variable is set, the leaks
730 tracer will also log the creation stack trace of leaked objects. This may
731 significantly increase memory consumption however.
732
733 New `MAY_BE_LEAKED` flags have been added to GstObject and GstMiniObject, so
734 that objects and mini-objects that are likely to stay around forever can be
735 flagged and blacklisted from the leak output.
736
737 To give the new leak tracer a spin, simply call any GStreamer application such
738 as `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
742 If there are any leaks, a warning will be raised at the end.
743
744 It 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
748 This dedicated leaks tracer is much much faster than valgrind since all code is
749 executed natively instead of being instrumented. This makes it very suitable
750 for use on slow machines or embedded devices. It is however limited to certain
751 types of leaks and won't catch memory leaks when the allocation has been made
752 via plain old `malloc()` or `g_malloc()` or other means. It will also not trace
753 non-GstObject GObjects.
754
755 The goal is to enable leak tracing on GStreamer's Continuous-Integration and
756 testing 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
758 and fixed quickly.
759
760 For 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
762 the 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
780 This cycle has been focused on making GstValidate more than just a validating
781 tool, but also a tool to help developers debug their GStreamer issues. When
782 reporting issues, we try to gather as much information as possible and expose
783 it to end users in a useful way. For an example of such enhancements, check out
784 Thibault Saunier's [blog post](improving-debugging-gstreamer-validate) about
785 the new Not Negotiated Error reporting mechanism.
786
787 Playbin3 support has been added so we can run validate tests with `playbin3`
788 instead of playbin.
789
790 We are now able to properly communicate between `gst-validate-launcher` and
791 launched subprocesses with actual IPC between them. That has enabled the test
792 launcher 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
798 gst-libav uses the recently released ffmpeg 3.2 now, which brings a lot of
799 improvements and bugfixes from the ffmpeg team in addition to various new
800 codec mappings on the GStreamer side and quite a few bugfixes to the GStreamer
801 integration to make it more robust.
802
803 ## Build and Dependencies
804
805 ### Experimental support for Meson as build system
806
807 #### Overview
808
809 We have have added support for building GStreamer using the
810 [Meson build system][meson]. This is currently experimental, but should work
811 fine at least on Linux using the gcc or clang toolchains and on Windows using
812 the MingW or MSVC toolchains.
813
814 Autotools remains the primary build system for the time being, but we hope to
815 someday replace it and will steadily work towards that goal.
816
817 More information about the background and implications of all this and where
818 we're hoping to go in future with this can be found in [Tim's mail][meson-mail]
819 to the gstreamer-devel mailing list.
820
821 For more information on Meson check out [these videos][meson-videos] and also
822 the [Meson talk][meson-gstconf] at the GStreamer Conference.
823
824 Immediate benefits for Linux users are faster builds and rebuilds. At the time
825 of writing the Meson build of GStreamer is used by default in GNOME's jhbuild
826 system.
827
828 The Meson build currently still lacks many of the fine-grained configuration
829 options to enable/disable specific plugins. These will be added back in due
830 course.
831
832 Note: The meson build files are not distributed in the source tarballs, you will
833 need 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
842 Windows users might appreciate being able to build GStreamer using the MSVC
843 toolchain, which is not possible using autotools. This means that it will be
844 possible to debug GStreamer and applications in Visual Studio, for example.
845 We require VS2015 or newer for this at the moment.
846
847 There are two ways to build GStreamer using the MSVC toolchain:
848
849 1. Using the MSVC command-line tools (`cl.exe` etc.) via Meson's "ninja" backend.
850 2. Letting Meson's "vs2015" backend generate Visual Studio project files that
851    can be opened in Visual Studio and compiled from there.
852
853 This is currently only for adventurous souls though. All the bits are in place,
854 but support for all of this has not been merged into GStreamer's cerbero build
855 tool yet at the time of writing. This will hopefully happen in the next cycle,
856 but for now this means that those wishing to compile GStreamer with MSVC will
857 have to get their hands dirty.
858
859 There are also no binary SDK builds using the MSVC toolchain yet.
860
861 For more information on GStreamer builds using Meson and the Windows toolchain
862 check 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
870 libunwind was added as an optional dependency. It is used only for debugging
871 and tracing purposes.
872
873 The `opencv` plugin in gst-plugins-bad can now be built against OpenCV
874 version 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
888 Packagers please note that the `gst/gstconfig.h` public header file in the
889 GStreamer core library moved back from being an architecture dependent include
890 to being architecture independent, and thus it is no longer installed into
891 `$(libdir)/gstreamer-1.0/include/gst` but into the normal include directory
892 where it lives happily ever after with all the other public header files. The
893 reason for this is that we now check whether the target supports unaligned
894 memory access based on predefined compiler macros at compile time instead of
895 checking it at configure time.
896
897 ## Platform-specific improvements
898
899 ### Android
900
901 #### New universal binaries for all supported ABIs
902
903 We now provide a "universal" tarball to allow building apps against all the
904 architectures currently supported (x86, x86-64, armeabi, armeabi-v7a,
905 armeabi-v8a). This is needed for building with recent versions of the Android
906 NDK which defaults to building against all supported ABIs. Use [the Android
907 player example][android-player-example-build] as a reference for the required
908 changes.
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
933 Three new git modules have been added recently:
934
935 ### gst-docs
936
937 This is a new module where we will maintain documentation in the markdown
938 format.
939
940 It contains the former gstreamer.com SDK tutorials which have kindly been made
941 available by Fluendo under a Creative Commons license. The tutorials have been
942 reviewed 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
944 site will then be shut down with redirects pointing to the updated tutorials.
945
946 Some of the existing docbook XML-formatted documentation from the GStreamer
947 core module such as the *Application Development Manual* and the *Plugin
948 Writer's Guide* have been converted to markdown as well and will be maintained
949 in the gst-docs module in future. They will be removed from the GStreamer core
950 module in the next cycle.
951
952 This is just the beginning. Our goal is to provide a more cohesive documentation
953 experience for our users going forward, and easier to create and maintain
954 documentation for developers. There is a lot more work to do, get in touch if
955 you want to help out.
956
957 If you encounter any problems or spot any omissions or outdated content in the
958 new documentation, please [file a bug in bugzilla][doc-bug] to let us know.
959
960 We will probably release gst-docs as a separate tarball for distributions to
961 package 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
968 A new [module][examples-git] has been added for examples. It does not contain
969 much yet, currently it only contains a small [http-launch][http-launch] utility
970 that serves a pipeline over http as well as various [GstPlayer playback frontends][puis]
971 for Android, iOS, Gtk+ and Qt.
972
973 More examples will be added over time. The examples in this repository should
974 be more useful and more substantial than most of the examples we ship as part
975 of our other modules, and also written in a way that makes them good example
976 code. If you have ideas for examples, let us know.
977
978 No decision has been made yet if this module will be released and/or packaged.
979 It 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
988 new Meson build system. This module is not required to build GStreamer with
989 Meson, it is merely for convenience and aims to provide a development setup
990 similar to the existing `gst-uninstalled` setup.
991
992 gst-build makes use of Meson's [subproject feature][meson-subprojects] and sets
993 up the various GStreamer modules as subprojects, so they can all be updated and
994 built in parallel.
995
996 This module is still very new and highly experimental. It should work at least
997 on Linux and Windows (OS/X needs some build fixes). Let us know of any issues
998 you encounter by popping into the `#gstreamer` IRC channel or by
999 [filing a bug][gst-build-bug].
1000
1001 This 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
1009 Aaron Boxer, Aleix Conchillo Flaqué, Alessandro Decina, Alexandru Băluț, Alex
1010 Ashley, Alex-P. Natsios, Alistair Buxton, Allen Zhang, Andreas Naumann, Andrew
1011 Eikum, Andy Devar, Anthony G. Basile, Arjen Veenhuizen, Arnaud Vrac, Artem
1012 Martynovich, Arun Raghavan, Aurélien Zanelli, Barun Kumar Singh, Bernhard
1013 Miller, Brad Lackey, Branko Subasic, Carlos Garcia Campos, Carlos Rafael
1014 Giani, Christoffer Stengren, Daiki Ueno, Damian Ziobro, Danilo Cesar Lemes de
1015 Paula, David Buchmann, Dimitrios Katsaros, Duncan Palmer, Edward Hervey,
1016 Emmanuel Poitier, Enrico Jorns, Enrique Ocaña González, Fabrice Bellet,
1017 Florian Zwoch, Florin Apostol, Francisco Velazquez, Frédéric Bertolus, Fredrik
1018 Fornwall, Gaurav Gupta, George Kiagiadakis, Georg Lippitsch, Göran Jönsson,
1019 Graham Leggett, Gregoire Gentil, Guillaume Desmottes, Gwang Yoon Hwang, Haakon
1020 Sporsheim, Haihua Hu, Havard Graff, Heinrich Fink, Hoonhee Lee, Hyunjun Ko,
1021 Iain Lane, Ian, Ian Jamison, Jagyum Koo, Jake Foytik, Jakub Adam, Jan
1022 Alexander Steffens (heftig), Jan Schmidt, Javier Martinez Canillas, Jerome
1023 Laheurte, Jesper Larsen, Jie Jiang, Jihae Yi, Jimmy Ohn, Jinwoo Ahn, Joakim
1024 Johansson, Joan Pau Beltran, Jonas Holmberg, Jonathan Matthew, Jonathan Roy,
1025 Josep Torra, Julien Isorce, Jun Ji, Jürgen Slowack, Justin Kim, Kazunori
1026 Kobayashi, Kieran Bingham, Kipp Cannon, Koop Mast, Kouhei Sutou, Kseniia, Kyle
1027 Schwarz, Kyungyong Kim, Linus Svensson, Luis de Bethencourt, Marcin Kolny,
1028 Marcin Lewandowski, Marianna Smidth Buschle, Mario Sanchez Prada, Mark
1029 Combellack, Mark Nauwelaerts, Martin Kelly, Matej Knopp, Mathieu Duponchelle,
1030 Mats Lindestam, Matthew Gruenke, Matthew Waters, Michael Olbrich, Michal Lazo,
1031 Miguel París Díaz, Mikhail Fludkov, Minjae Kim, Mohan R, Munez, Nicola Murino,
1032 Nicolas Dufresne, Nicolas Huet, Nikita Bobkov, Nirbheek Chauhan, Olivier
1033 Crête, Paolo Pettinato, Patricia Muscalu, Paulo Neves, Peng Liu, Peter
1034 Seiderer, Philippe Normand, Philippe Renon, Philipp Zabel, Pierre Lamot, Piotr
1035 Drąg, Prashant Gotarne, Raffaele Rossi, Ray Strode, Reynaldo H. Verdejo
1036 Pinochet, Santiago Carot-Nemesio, Scott D Phillips, Sebastian Dröge, Sebastian
1037 Rasmussen, Sergei Saveliev, Sergey Borovkov, Sergey Mamonov, Sergio Torres
1038 Soldado, Seungha Yang, sezero, Song Bing, Sreerenj Balachandran, Stefan Sauer,
1039 Stephen, Steven Hoving, Stian Selnes, Thiago Santos, Thibault Saunier, Thijs
1040 Vermeir, Thomas Bluemel, Thomas Jones, Thomas Klausner, Thomas Scheuermann,
1041 Tim-Philipp Müller, Ting-Wei Lan, Tom Schoonjans, Ursula Maplehurst, Vanessa
1042 Chipirras Navalon, Víctor Manuel Jáquez Leal, Vincent Penquerc'h, Vineeth TM,
1043 Vivia Nikolaidou, Vootele Vesterblom, Wang Xin-yu (王昕宇), William Manley,
1044 Wim Taymans, Wonchul Lee, Xabier Rodriguez Calvar, Xavier Claessens, xlazom00,
1045 Yann Jouanin, Zaheer Abbas Merali
1046
1047 ... and many others who have contributed bug reports, translations, sent
1048 suggestions or helped testing.
1049
1050 ## Bugs fixed in 1.10
1051
1052 More than [750 bugs][bugs-fixed-in-1.10] have been fixed during
1053 the development of 1.10.
1054
1055 This list does not include issues that have been cherry-picked into the
1056 stable 1.8 branch and fixed there as well, all fixes that ended up in the
1057 1.8 branch are also included in 1.10.
1058
1059 This list also does not include issues that have been fixed without a bug
1060 report 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
1066 After the 1.10.0 release there will be several 1.10.x bug-fix releases which
1067 will contain bug fixes which have been deemed suitable for a stable branch,
1068 but no new features or intrusive changes will be added to a bug-fix release
1069 usually. The 1.10.x bug-fix releases will be made from the git 1.10 branch,
1070 which is a stable branch.
1071
1072 ### 1.10.0
1073
1074 1.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
1094 Our next major feature release will be 1.12, and 1.11 will be the unstable
1095 development version leading up to the stable 1.12 release. The development
1096 of 1.11/1.12 will happen in the git master branch.
1097
1098 The plan for the 1.12 development cycle is yet to be confirmed, but it is
1099 expected that feature freeze will be around early/mid-January,
1100 followed by several 1.11 pre-releases and the new 1.12 stable release
1101 in March.
1102
1103 1.12 will be backwards-compatible to the stable 1.10, 1.8, 1.6, 1.4, 1.2 and
1104 1.0 release series.
1105
1106 - - -
1107
1108 *These release notes have been prepared by Olivier Crête, Sebastian Dröge,
1109 Nicolas Dufresne, Edward Hervey, Víctor Manuel Jáquez Leal, Tim-Philipp
1110 Müller, Reynaldo H. Verdejo Pinochet, Arun Raghavan, Thibault Saunier,
1111 Jan Schmidt, Wim Taymans, Matthew Waters*
1112
1113 *License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*
1114