queue2: handle overwriting the current range correctly
[platform/upstream/gstreamer.git] / NEWS
1 # GStreamer 1.12 Release Notes
2
3 GStreamer 1.12.0 was originally released on 4th May 2017.
4 The latest bug-fix release in the 1.12 series is [1.12.2](#1.12.2) and was
5 released on 14 July 2017.
6
7 The GStreamer team is proud to announce a new major feature release in the
8 stable 1.x API series of your favourite cross-platform multimedia framework!
9
10 As always, this release is again packed with new features, bug fixes and other
11 improvements.
12
13 See [https://gstreamer.freedesktop.org/releases/1.12/][latest] for the latest
14 version of this document.
15
16 *Last updated: Friday 14 July 2017, 10:00 UTC [(log)][gitlog]*
17
18 [latest]: https://gstreamer.freedesktop.org/releases/1.12/
19 [gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.12/release-notes-1.12.md
20
21 ## Introduction
22
23 The GStreamer team is proud to announce a new major feature release in the
24 stable 1.x API series of your favourite cross-platform multimedia framework!
25
26 As always, this release is again packed with new features, bug fixes and other
27 improvements.
28
29 ## Highlights
30
31 - new `msdk` plugin for Intel's Media SDK for hardware-accelerated video
32   encoding and decoding on Intel graphics hardware on Windows or Linux.
33
34 - `x264enc` can now use multiple x264 library versions compiled for different
35   bit depths at runtime, to transparently provide support for multiple bit
36   depths.
37
38 - `videoscale` and `videoconvert` now support multi-threaded scaling and
39   conversion, which is particularly useful with higher resolution video.
40
41 - `h264parse` will now automatically insert AU delimiters if needed when
42   outputting byte-stream format, which improves standard compliance and
43   is needed in particular for HLS playback on iOS/macOS.
44
45 - `rtpbin` has acquired bundle support for incoming streams
46
47 ## Major new features and changes
48
49 ### Noteworthy new API
50
51 - The video library gained support for a number of new video formats:
52
53   - `GBR_12LE`, `GBR_12BE`, `GBRA_12LE`, `GBRA_12BE` (planar 4:4:4 RGB/RGBA, 12 bits per channel)
54   - `GBRA_10LE`, `GBRA_10BE` (planar 4:4:4:4 RGBA, 10 bits per channel)
55   - `GBRA` (planar 4:4:4:4 ARGB, 8 bits per channel)
56   - `I420_12BE`, `I420_12LE` (planar 4:2:0 YUV, 12 bits per channel)
57   - `I422_12BE`,`I422_12LE` (planar 4:2:2 YUV, 12 bits per channel)
58   - `Y444_12BE`, `Y444_12LE` (planar 4:4:4 YUV, 12 bits per channel)
59   - `VYUY` (another packed 4:2:2 YUV format)
60
61 - The high-level `GstPlayer` API was extended with functions for taking video
62   snapshots and enabling accurate seeking. It can optionally also use the
63   still-experimental `playbin3` element now.
64
65 ### New Elements
66
67 - msdk: new plugin for Intel's Media SDK for hardware-accelerated video encoding
68   and decoding on Intel graphics hardware on Windows or Linux. This includes
69   an H.264 encoder/decoder (`msdkh264dec`, `msdkh264enc`),
70   an H.265 encoder/decoder (`msdkh265dec`, `msdkh265enc`),
71   an MJPEG encoder/encoder (`msdkmjpegdec`, `msdkmjpegenc`),
72   an MPEG-2 video encoder (`msdkmpeg2enc`) and a VP8 encoder (`msdkvp8enc`).
73
74 - `iqa` is a new Image Quality Assessment plugin based on [DSSIM][dssim],
75   similar to the old (unported) videomeasure element.
76
77 - The `faceoverlay` element, which allows you to overlay SVG graphics over
78   a detected face in a video stream, has been ported from 0.10.
79
80 - our `ffmpeg` wrapper plugin now exposes/maps the ffmpeg Opus audio decoder
81   (`avdec_opus`) as well as the GoPro CineForm HD / CFHD decoder (`avdec_cfhd`),
82   and also a parser/writer for the IVF format (`avdemux_ivf` and `avmux_ivf`).
83
84 - `audiobuffersplit` is a new element that splits raw audio buffers into
85   equal-sized buffers
86
87 - `audiomixmatrix` is a new element that mixes N:M audio channels according to
88   a configured mix matrix.
89
90 - The `timecodewait` element got renamed to `avwait` and can operate in
91   different modes now.
92
93 - The `opencv` video processing plugin has gained a new `dewarp` element that
94   dewarps fisheye images.
95
96 - `ttml` is a new plugin for parsing and rendering subtitles in Timed Text
97   Markup Language (TTML) format. For the time being these elements will not
98   be autoplugged during media playback however, unless the `GST_TTML_AUTOPLUG=1`
99   environment variable is set. Only the EBU-TT-D profile is supported at this
100   point.
101
102 [dssim]: https://github.com/pornel/dssim
103
104 ### New element features and additions
105
106 - `x264enc` can now use multiple x264 library versions compiled for different
107   bit depths at runtime, to transparently provide support for multiple bit
108   depths. A new configure parameter `--with-x264-libraries` has been added to
109   specify additional paths to look for additional x264 libraries to load.
110   Background is that the libx264 library is always compile for one specific
111   bit depth and the `x264enc` element would simply support the depth supported
112   by the underlying library. Now we can support multiple depths.
113
114 - `x264enc` also picks up the interlacing mode automatically from the input
115   caps now and passed interlacing/TFF information correctly to the library.
116
117 - `videoscale` and `videoconvert` now support multi-threaded scaling and
118   conversion, which is particularly useful with higher resolution video.
119   This has to be enabled explicitly via the `"n-threads"` property.
120
121 - `videorate`'s new `"rate"` property lets you set a speed factor
122   on the output stream
123
124 - `splitmuxsink`'s buffer collection and scheduling was rewritten to make
125   processing and splitting deterministic; before it was possible for a buffer
126   to end up in a different file chunk in different runs. `splitmuxsink` also
127   gained a new `"format-location-full"` signal that works just like the existing
128   `"format-location"` signal only that it is also passed the primary stream's
129   first buffer as argument, so that it is possible to construct the file name
130   based on metadata such as the buffer timestamp or any GstMeta attached to
131   the buffer. The new `"max-size-timecode"` property allows for timecode-based
132   splitting. `splitmuxsink` will now also automatically start a new file if the
133   input caps change in an incompatible way.
134
135 - `fakesink` has a new `"drop-out-of-segment"` property to not drop
136   out-of-segment buffers, which is useful for debugging purposes.
137
138 - `identity` gained a `"ts-offset"` property.
139
140 - both `fakesink` and `identity` now also print what kind of metas are attached
141   to buffers when printing buffer details via the `"last-message"` property
142   used by `gst-launch-1.0 -v`.
143
144 - multiqueue: made `"min-interleave-time"` a configurable property.
145
146 - video nerds will be thrilled to know that `videotestsrc`'s snow is now
147   deterministic. `videotestsrc` also gained some new properties to make the
148   ball pattern based on system time, and invert colours each second
149   (`"animation-mode"`, `"motion"`, and `"flip"` properties).
150
151 - `oggdemux` reverse playback should work again now. You're welcome.
152
153 - `playbin3` and `urisourcebin` now have buffering enabled by default, and
154   buffering message aggregation was fixed.
155
156 - `tcpclientsrc` now has a `"timeout"` property
157
158 - `appsink` has gained support for buffer lists. For backwards compatibility
159   reasons users need to enable this explicitly with `gst_app_sink_set_buffer_list_support()`,
160   however. Once activated, a pulled `GstSample` can contain either a buffer
161   list or a single buffer.
162
163 - `splitmuxsrc` reverse playback was fixed and handling of sparse streams, such
164   as subtitle tracks or metadata tracks, was improved.
165
166 - `matroskamux` has acquired support for muxing G722 audio; it also marks all
167   buffers as keyframes now when streaming only audio, so that `tcpserversink`
168   will behave properly with audio-only streams.
169
170 - `qtmux` gained support for ProRes 4444 XQ, HEVC/H.265 and CineForm (GoPro) formats,
171   and generally writes more video stream-related metadata into the track headers.
172   It is also allows configuration of the maximum interleave size in bytes and
173   time now. For fragmented mp4 we always write the `tfdt` atom now as required
174   by the DASH spec.
175
176 - `qtdemux` supports FLAC, xvid, mp2, S16L and CineForm (GoPro) tracks now, and
177   generally tries harder to extract more video-related information from track
178   headers, such as colorimetry or interlacing details. It also received a
179   couple of fixes for the scenario where upstream operates in TIME format and
180   feeds chunks to qtdemux (e.g. DASH or MSE).
181
182 - `audioecho` has two new properties to apply a delay only to certain channels
183   to create a surround effect, rather than an echo on all channels. This is
184   useful when upmixing from stereo, for example. The `"surround-delay"` property
185   enables this, and the `"surround-mask"` property controls which channels
186   are considered surround sound channels in this case.
187
188 - `webrtcdsp` gained various new properties for gain control and also exposes
189   voice activity detection now, in which case it will post `"voice-activity"`
190   messages on the bus whenever the voice detection status changes.
191
192 - The `decklink` capture elements for Blackmagic Decklink cards have seen a
193   number of improvements:
194
195   - `decklinkvideosrc` will post a warning message on "no signal" and an info
196     message when the signal lock has been (re)acquired. There is also a new
197     read-only `"signal"` property that can be used to query the signal lock
198     status. The `GAP` flag will be set on buffers that are captured without
199     a signal lock. The new `drop-no-signal-frames` will make `decklinkvideosrc`
200     drop all buffers that have been captured without an input signal. The
201     `"skip-first-time"` property will make the source drop the first few
202     buffers, which is handy since some devices will at first output buffers
203     with the wrong resolution before they manage to figure out the right input
204     format and decide on the actual output caps.
205
206   - `decklinkaudiosrc` supports more than just 2 audio channels now.
207
208   - The capture sources no longer use the "hardware" timestamps which turn
209     out to be useless and instead just use the pipeline clock directly.
210
211 - `srtpdec` now also has a readonly `"stats"` property, just like `srtpenc`.
212
213 - `rtpbin` gained RTP bundle support, as used by e.g. WebRTC. The first
214    rtpsession will have a `rtpssrcdemux` element inside splitting the streams
215    based on their SSRC and potentially dispatch to a different rtpsession.
216    Because retransmission SSRCs need to be merged with the corresponding media
217    stream the `::on-bundled-ssrc` signal is emitted on `rtpbin` so that the
218    application can find out to which session the SSRC belongs.
219
220 - `rtprtxqueue` gained two new properties exposing retransmission
221   statistics (`"requests"` and `"fulfilled-requests"`)
222
223 - `kmssink` will now use the preferred mode for the monitor and render to the
224   base plane if nothing else has set a mode yet. This can also be done forcibly
225   in any case via the new `"force-modesetting"` property. Furthermore, `kmssink`
226   now allows only the supported connector resolutions as input caps in order to
227   avoid scaling or positioning of the input stream, as `kmssink` can't know
228   whether scaling or positioning would be more appropriate for the use case at
229   hand.
230
231 - `waylandsink` can now take DMAbuf buffers as input in the presence
232   of a compatible Wayland compositor. This enables zero-copy transfer
233   from a decoder or source that outputs DMAbuf. It will also set surface
234   opacity hint to allow better rendering optimization in the compositor.
235
236 - `udpsrc` can be bound to more than one interface when joining a
237   multicast group, this is done by giving a comma separate list of
238   interfaces such as multicast-iface="eth0,eth1".
239
240 ### Plugin moves
241
242 - `dataurisrc` moved from gst-plugins-bad to core
243
244 - The `rawparse` plugin containing the `rawaudioparse` and `rawvideoparse`
245   elements moved from gst-plugins-bad to gst-plugins-base. These elements
246   supersede the old `videoparse` and `audioparse` elements. They work the
247   same, with just some minor API changes. The old legacy elements still
248   exist in gst-plugins-bad, but may be removed at some point in the future.
249
250 - `timecodestamper` is an element that attaches time codes to video buffers
251   in form of `GstVideoTimeCodeMeta`s. It had a `"clock-source"` property
252   which has now been removed because it was fairly useless in practice. It
253   gained some new properties however: the `"first-timecode"` property can
254   be used to set the inital timecode; alternatively `"first-timecode-to-now"`
255   can be set, and then the current system time at the time the first buffer
256   arrives is used as base time for the time codes.
257
258
259 ### Plugin removals
260
261 - The `mad` mp1/mp2/mp3 decoder plugin was removed from gst-plugins-ugly,
262   as libmad is GPL licensed, has been unmaintained for a very long time, and
263   there are better alternatives available. Use the `mpg123audiodec` element
264   from the `mpg123` plugin in gst-plugins-ugly instead, or `avdec_mp3` from
265   the `gst-libav` module which wraps the ffmpeg library. We expect that we
266   will be able to move mp3 decoding to gst-plugins-good in the next cycle
267   seeing that most patents around mp3 have expired recently or are about to
268   expire.
269
270 - The `mimic` plugin was removed from gst-plugins-bad. It contained a decoder
271   and encoder for a video codec used by MSN messenger many many years ago (in
272   a galaxy far far away). The underlying library is unmaintained and no one
273   really needs to use this codec any more. Recorded videos can still be played
274   back with the MIMIC decoder in gst-libav.
275
276 ## Miscellaneous API additions
277
278 - Request pad name templates passed to `gst_element_request_pad()` may now
279   contain multiple specifiers, such as e.g. `src_%u_%u`.
280
281 - [`gst_buffer_iterate_meta_filtered()`][buffer-iterate-meta-filtered] is a
282   variant of `gst_buffer_iterate_meta()` that only returns metas of the
283   requested type and skips all other metas.
284
285 - [`gst_pad_task_get_state()`][pad-task-get-state] gets the current state of
286   a task in a thread-safe way.
287
288 - [`gst_uri_get_media_fragment_table()`][uri-get-fragment-table] provides the
289   media fragments of an URI as a table of key=value pairs.
290
291 - [`gst_print()`][print], [`gst_println()`][println], [`gst_printerr()`][printerr],
292   and [`gst_printerrln()`][printerrln] can be used to print to stdout or stderr.
293   These functions are similar to `g_print()` and `g_printerr()` but they also
294   support all the additional format specifiers provided by the GStreamer
295   logging system, such as e.g. `GST_PTR_FORMAT`.
296
297 - a `GstParamSpecArray` has been added, for elements who want to have array
298   type properties, such as the `audiomixmatrix` element for example. There are
299   also two new functions to set and get properties of this type from bindings:
300    - gst_util_set_object_array()
301    - gst_util_get_object_array()
302
303 - various helper functions have been added to make it easier to set or get
304   GstStructure fields containing caps-style array or list fields from language
305   bindings (which usually support GValueArray but don't know about the GStreamer
306   specific fundamental types):
307    - [`gst_structure_get_array()`][get-array]
308    - [`gst_structure_set_array()`][set-array]
309    - [`gst_structure_get_list()`][get-list]
310    - [`gst_structure_set_list()`][set-list]
311
312 - a new ['dynamic type' registry factory type][dynamic-type] was added to
313   register dynamically loadable GType types. This is useful for automatically
314   loading enum/flags types that are used in caps, such as for example the
315   `GstVideoMultiviewFlagsSet` type used in multiview video caps.
316
317 - there is a new [`GstProxyControlBinding`][proxy-control-binding] for use
318   with GstController. This allows proxying the control interface from one
319   property on one GstObject to another property (of the same type) in another
320   GstObject. So e.g. in parent-child relationship, one may need to call
321   `gst_object_sync_values()` on the child and have a binding (set elsewhere)
322   on the parent update the value. This is used in `glvideomixer` and `glsinkbin`
323   for example, where `sync_values()` on the child pad or element will call
324   `sync_values()` on the exposed bin pad or element.
325
326   Note that this doesn't solve GObject property forwarding, that must
327   be taken care of by the implementation manually or using GBinding.
328
329 - `gst_base_parse_drain()` has been made public for subclasses to use.
330
331 - `gst_base_sink_set_drop_out_of_segment()' can be used by subclasses to
332   prevent GstBaseSink from dropping buffers that fall outside of the segment.
333
334 - [`gst_calculate_linear_regression()`][calc-lin-regression] is a new utility
335   function to calculate a linear regression.
336
337 - [`gst_debug_get_stack_trace`][get-stack-trace] is an easy way to retrieve a
338   stack trace, which can be useful in tracer plugins.
339
340 - allocators: the dmabuf allocator is now sub-classable, and there is a new
341   `GST_CAPS_FEATURE_MEMORY_DMABUF` define.
342
343 - video decoder subclasses can use the newly-added function
344   `gst_video_decoder_allocate_output_frame_with_params()` to
345   pass a `GstBufferPoolAcquireParams` to the buffer pool for
346   each buffer allocation.
347
348 - the video time code API has gained a dedicated [`GstVideoTimeCodeInterval`][timecode-interval]
349   type plus related API, including functions to add intervals to timecodes.
350
351 - There is a new `libgstbadallocators-1.0` library in gst-plugins-bad, which
352   may go away again in future releases once the `GstPhysMemoryAllocator`
353   interface API has been validated by more users and was moved to
354   `libgstallocators-1.0` from gst-plugins-base.
355
356 [timecode-interval]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#gst-video-time-code-interval-new
357 [buffer-iterate-meta-filtered]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-iterate-meta-filtered
358 [pad-task-get-state]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-task-get-state
359 [uri-get-fragment-table]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUri.html#gst-uri-get-media-fragment-table
360 [print]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-print
361 [println]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-println
362 [printerr]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerr
363 [printerrln]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-printerrln
364 [get-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-array
365 [set-array]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-array
366 [get-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-get-list
367 [set-list]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html#gst-structure-set-list
368 [dynamic-type]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstDynamicTypeFactory.html
369 [proxy-control-binding]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstProxyControlBinding.html
370 [calc-lin-regression]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-calculate-linear-regression
371 [get-stack-trace]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUtils.html#gst-debug-get-stack-trace
372
373 ### GstPlayer
374
375 New API has been added to:
376
377  - get the number of audio/video/subtitle streams:
378    - `gst_player_media_info_get_number_of_streams()`
379    - `gst_player_media_info_get_number_of_video_streams()`
380    - `gst_player_media_info_get_number_of_audio_streams()`
381    - `gst_player_media_info_get_number_of_subtitle_streams()`
382
383  - enable accurate seeking: `gst_player_config_set_seek_accurate()`
384    and `gst_player_config_get_seek_accurate()`
385
386  - get a snapshot image of the video in RGBx, BGRx, JPEG, PNG or
387    native format: [`gst_player_get_video_snapshot()`][snapshot]
388
389  - selecting use of a specific video sink element
390    ([`gst_player_video_overlay_video_renderer_new_with_sink()`][renderer-with-vsink])
391
392  - If the environment variable `GST_PLAYER_USE_PLAYBIN3` is set, GstPlayer will
393    use the still-experimental `playbin3` element and the `GstStreams` API for
394    playback.
395
396 [snapshot]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstplayer.html#gst-player-get-video-snapshot
397 [renderer-with-vsink]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstplayer-videooverlayvideorenderer.html#gst-player-video-overlay-video-renderer-new-with-sink
398
399 ## Miscellaneous changes
400
401 - video caps for interlaced video may contain an optional `"field-order"` field
402   now in the case of `interlaced-mode=interleaved` to signal that the field
403   order is always the same throughout the stream. This is useful to signal to
404   muxers such as mp4mux. The new field is parsed from/to `GstVideoInfo` of course.
405
406 - video decoder and video encoder base classes try harder to proxy
407   interlacing, colorimetry and chroma-site related fields in caps properly.
408
409 - The buffer stored in the `PROTECTION` events is now left unchanged. This is a
410   change of behaviour since 1.8, especially for the mssdemux element which used to
411   decode the base64 parsed data wrapped in the protection events emitted by the
412   demuxer.
413
414 - `PROTECTION` events can now be injected into the pipeline from the application;
415   source elements deriving from GstBaseSrc will forward those downstream now.
416
417 - The DASH demuxer is now correctly parsing the MSPR-2.0 ContentProtection nodes
418   and emits Protection events accordingly. Applications relying on those events
419   might need to decode the base64 data stored in the event buffer before using it.
420
421 - The registry can now also be disabled by setting the environment variable
422   `GST_REGISTRY_DISABLE=yes`, with similar effect as the `GST_DISABLE_REGISTRY`
423   compile time switch.
424
425 - Seeking performance with gstreamer-vaapi based decoders was improved. It would
426   recreate the decoder and surfaces on every seek which can be quite slow.
427
428 - more robust handling of input caps changes in videoaggregator-based elements
429   such as `compositor`.
430
431 - Lots of adaptive streaming-related fixes across the board (DASH, MSS, HLS). Also:
432
433   - `mssdemux`, the Microsoft Smooth Streaming demuxer, has seen various
434     fixes for live streams, duration reporting and seeking.
435
436   - The DASH manifest parser now extracts MS PlayReady ContentProtection objects
437     from manifests and sends them downstream as `PROTECTION` events. It also
438     supports multiple Period elements in external xml now.
439
440 - gst-libav was updated to ffmpeg 3.3 but should still work with any 3.x
441   version.
442
443 - GstEncodingProfile has been generally enhanced so it can, for
444   example, be used to get possible profiles for a given file
445   extension. It is now possible to define profiles based on element
446   factory names or using a path to a `.gep` file containing a
447   serialized profile.
448
449 - `audioconvert` can now do endianness conversion in-place. All other
450   conversions still require a copy, but e.g. sign conversion and a few others
451   could also be implemented in-place now.
452
453 - The new, experimental `playbin3` and `urisourcebin` elements got many
454   bugfixes and improvements and should generally be closer to a full
455   replacement of the old elements.
456
457 - `interleave` now supports > 64 channels.
458
459 - OpenCV elements, `grabcut` and `retinex` has been ported to use
460   `GstOpencvVideoFilter` base class, increasing code reuse and fixing buffer
461   map/unmap issues. Redundant copie of images has been removed in `edgedetect`,
462   `cvlaplace` and `cvsobel`. This comes with various cleanup and Meson support.
463
464 ### OpenGL integration
465
466 - As usual the GStreamer OpenGL integration library has seen numerous
467   fixes and performance improvements all over the place, and is hopefully
468   ready now to become API stable and be moved to gst-plugins-base during the
469   1.14 release cycle.
470
471 - The GStreamer OpenGL integration layer has also gained support for the
472   Vivante EGL FB windowing system, which improves performance on platforms
473   such as Freescale iMX.6 for those who are stuck with the proprietary driver.
474   The `qmlglsink` element also supports this now if Qt is used with eglfs or
475   wayland backend, and it works in conjunction with [gstreamer-imx][gstreamer-imx]
476   of course.
477
478 - various `qmlglsrc` improvements
479
480 [gstreamer-imx]: https://github.com/Freescale/gstreamer-imx
481
482 ## Tracing framework and debugging improvements
483
484 - New tracing hooks have been added to track GstMiniObject and GstObject
485   ref/unref operations.
486
487 - The memory leaks tracer can optionally use this to retrieve stack traces if
488   enabled with e.g. `GST_TRACERS=leaks(filters="GstEvent,GstMessage",stack-traces-flags=full)`
489
490 - The `GST_DEBUG_FILE` environment variable, which can be used to write the
491   debug log output to a file instead of printing it to stderr, can now contain
492   a name pattern, which is useful for automated testing and continuous
493   integration systems. The following format specifiers are supported:
494
495    - `%p`: will be replaced with the PID
496    - `%r`: will be replaced with a random number, which is useful for instance
497      when running two processes with the same PID but in different containers.
498
499 ## Tools
500
501 - `gst-inspect-1.0` can now list elements by type with the new `--types`
502    command-line option, e.g. `gst-inspect-1.0 --types=Audio/Encoder` will
503    show a list of audio encoders.
504
505 - `gst-launch-1.0` and `gst_parse_launch()` have gained a new operator (`:`)
506    that allows linking all pads between two elements. This is useful in cases
507    where the exact number of pads or type of pads is not known beforehand, such
508    as in the `uridecodebin : encodebin` scenario, for example. In this case,
509    multiple links will be created if the encodebin has multiple profiles
510    compatible with the output of uridecodebin.
511
512 - `gst-device-monitor-1.0` now shows a `gst-launch-1.0` snippet for each
513   device that shows how to make use of it in a `gst-launch-1.0` pipeline string.
514
515 ## GStreamer RTSP server
516
517 - The RTSP server now also supports Digest authentication in addition to Basic
518   authentication.
519
520 - The `GstRTSPClient` class has gained a `pre-*-request` signal and virtual
521   method for each client request type, emitted in the beginning of each rtsp
522   request. These signals or virtual methods let the application validate the
523   requests, configure the media/stream in a certain way and also generate error
524   status codes in case of an error or a bad request.
525
526 ## GStreamer VAAPI
527
528 - GstVaapiDisplay now inherits from GstObject, thus the VA display logging
529   messages are better and tracing the context sharing is more readable.
530
531 - When uploading raw images into a VA surfaces now VADeriveImages are tried
532   fist, improving the upload performance, if it is possible.
533
534 - The decoders and the post-processor now can push dmabuf-based buffers to
535   downstream under certain conditions. For example:
536
537   `GST_GL_PLATFORM=egl gst-play-1.0 video-sample.mkv --videosink=glimagesink`
538
539 - Refactored the wrapping of VA surface into gstreamer memory, adding lock
540   when mapping and unmapping, and many other fixes.
541
542 - Now `vaapidecodebin` loads `vaapipostproc` dynamically. It is possible to
543   avoid it usage with the environment variable `GST_VAAPI_DISABLE_VPP=1`.
544
545 - Regarding encoders: they have primary rank again, since they can discover,
546   in run-time, the color formats they can use for upstream raw buffers and
547   caps renegotiation is now possible. Also the encoders push encoding info
548   downstream via tags.
549
550 - About specific encoders: added constant bit-rate encoding mode for VP8 and
551   H265 encoder handles P010_10LE color format.
552
553 - Regarding decoders, flush operation has been improved, now the internal VA
554   encoder is not recreated at each flush. Also there are several improvements
555   in the handling of H264 and H265 streams.
556
557 - VAAPI plugins try to create their on GstGL context (when available) if they
558   cannot find it in the pipeline, to figure out what type of VA Display they
559   should create.
560
561 - Regarding `vaapisink` for X11, if the backend reports that it is unable to
562   render correctly the current color format, an internal VA post-processor, is
563   instantiated (if available) and converts the color format.
564
565 ## GStreamer Editing Services and NLE
566
567 - Enhanced auto transition behaviour
568
569 - Fix some races in `nlecomposition`
570
571 - Allow building with msvc
572
573 - Added a UNIX manpage for `ges-launch`
574
575 - API changes:
576   - Added ges_deinit (allowing the leak tracer to work properly)
577   - Added ges_layer_get_clips_in_interval
578   - Finally hide internal symbols that should never have been exposed
579
580 ## GStreamer validate
581
582 - Port `gst-validate-launcher` to python 3
583
584 - `gst-validate-launcher` now checks if blacklisted bugs have been fixed on
585   bugzilla and errors out if it is the case
586
587 - Allow building with msvc
588
589 - Add ability for the launcher to run GStreamer unit tests
590
591 - Added a way to activate the leaks tracer on our tests and fix leaks
592
593 - Make the http server multithreaded
594
595 - New testsuite for running various test scenarios on the DASH-IF test vectors
596
597 ## GStreamer Python Bindings
598
599 - Overrides has been added for IntRange, Int64Range, DoubleRange,
600   FractionRange, Array and List. This finally enables Python programmers
601   to fully read and write GstCaps objects.
602
603 ## Build and Dependencies
604
605 - Meson build files are now disted in tarballs, for jhbuild and so distro
606   packagers can start using it. Note that the Meson-based build system is not
607   100% feature-equivalent with the autotools-based one yet.
608
609 - Some plugin filenames have been changed to match the plugin names: for example
610   the file name of the `encoding` plugin in gst-plugins-base containing the
611   `encodebin` element was `libgstencodebin.so` and has been changed to
612   `libgstencoding.so`. This affects only a handful of plugins across modules.
613
614   **Developers who install GStreamer from source and just do `make install`**
615   **after updating the source code, without doing `make uninstall` first, will**
616   **have to manually remove the old installed plugin files from the installation**
617   **prefix, or they will get 'Cannot register existing type' critical warnings.**
618
619 - Most of the docbook-based documentation (FAQ, Application Development Manual,
620   Plugin Writer's Guide, design documents) has been converted to markdown and
621   moved into a new gst-docs module. The gtk-doc library API references and
622   the plugins documentation are still built as part of the source modules though.
623
624 - GStreamer core now optionally uses libunwind and libdw to generate backtraces.
625   This is useful for tracer plugins used during debugging and development.
626
627 - There is a new `libgstbadallocators-1.0` library in gst-plugins-bad (which
628   may go away again in future releases once the `GstPhysMemoryAllocator`
629   interface API has been validated by more users).
630
631 - `gst-omx` and `gstreamer-vaapi` modules can now also be built using the
632   Meson build system.
633
634 - The `qtkitvideosrc` element for macOS was removed. The API is deprecated
635   since 10.9 and it wasn't shipped in the binaries since a few releases.
636
637 ## Platform-specific improvements
638
639 ### Android
640
641 - androidmedia: add support for VP9 video decoding/encoding and Opus audio
642   decoding (where supported)
643
644 ### OS/X and iOS
645
646 - `avfvideosrc`, which represents an iPhone camera or, on a Mac, a screencapture
647   session, so far allowed you to select an input device by device index only.
648   New API adds the ability to select the position (front or back facing) and
649   device-type (wide angle, telephoto, etc.). Furthermore, you can now also
650   specify the orientation (portrait, landscape, etc.) of the videostream.
651
652 ### Windows
653
654 - `dx9screencapsrc` can now optionally also capture the cursor.
655
656 ## Contributors
657
658 Aleix Conchillo Flaque, Alejandro G. Castro, Aleksandr Slobodeniuk, Alexandru
659 Băluț, Alex Ashley, Andre McCurdy, Andrew, Anton Eliasson, Antonio Ospite,
660 Arnaud Vrac, Arun Raghavan, Aurélien Zanelli, Axel Menzel, Benjamin Otte,
661 Branko Subasic, Brendan Shanks, Carl Karsten, Carlos Rafael Giani, ChangBok
662 Chae, Chris Bass, Christian Schaller, christophecvr, Claudio Saavedra,
663 Corentin Noël, Dag Gullberg, Daniel Garbanzo, Daniel Shahaf, David Evans,
664 David Schleef, David Warman, Dominique Leuenberger, Dongil Park, Douglas
665 Bagnall, Edgard Lima, Edward Hervey, Emeric Grange, Enrico Jorns, Enrique
666 Ocaña González, Evan Nemerson, Fabian Orccon, Fabien Dessenne, Fabrice Bellet,
667 Florent Thiéry, Florian Zwoch, Francisco Velazquez, Frédéric Dalleau, Garima
668 Gaur, Gaurav Gupta, George Kiagiadakis, Georg Lippitsch, Göran Jönsson, Graham
669 Leggett, Guillaume Desmottes, Gurkirpal Singh, Haihua Hu, Hanno Boeck, Havard
670 Graff, Heekyoung Seo, hoonhee.lee, Hyunjun Ko, Imre Eörs, Iñaki García
671 Etxebarria, Jagadish, Jagyum Koo, Jan Alexander Steffens (heftig), Jan
672 Schmidt, Jean-Christophe Trotin, Jochen Henneberg, Jonas Holmberg, Joris
673 Valette, Josep Torra, Juan Pablo Ugarte, Julien Isorce, Jürgen Sachs, Koop
674 Mast, Kseniia Vasilchuk, Lars Wendler, leigh123linux@googlemail.com, Luis de
675 Bethencourt, Lyon Wang, Marcin Kolny, Marinus Schraal, Mark Nauwelaerts,
676 Mathieu Duponchelle, Matthew Waters, Matt Staples, Michael Dutka, Michael
677 Olbrich, Michael Smith, Michael Tretter, Miguel París Díaz, namanyadav12, Neha
678 Arora, Nick Kallen, Nicola Murino, Nicolas Dechesne, Nicolas Dufresne, Nicolas
679 Huet, Nirbheek Chauhan, Ole André Vadla Ravnås, Olivier Crête, Patricia
680 Muscalu, Peter Korsgaard, Peter Seiderer, Petr Kulhavy, Philippe Normand,
681 Philippe Renon, Philipp Zabel, Rahul Bedarkar, Reynaldo H. Verdejo Pinochet,
682 Ricardo Ribalda Delgado, Rico Tzschichholz, Руслан Ижбулатов, Samuel Maroy,
683 Santiago Carot-Nemesio, Scott D Phillips, Sean DuBois, Sebastian Dröge, Sergey
684 Borovkov, Seungha Yang, shakin chou, Song Bing, Søren Juul, Sreerenj
685 Balachandran, Stefan Kost, Stefan Sauer, Stepan Salenikovich, Stian Selnes,
686 Stuart Weaver, suhas2go, Thiago Santos, Thibault Saunier, Thomas Bluemel,
687 Thomas Petazzoni, Tim-Philipp Müller, Ting-Wei Lan, Tobias Mueller, Todor
688 Tomov, Tomasz Zajac, Ulf Olsson, Ursula Maplehurst, Víctor Manuel Jáquez Leal,
689 Victor Toso, Vincent Penquerc'h, Vineeth TM, Vinod Kesti, Vitor Massaru Iha,
690 Vivia Nikolaidou, WeiChungChang, William Manley, Wim Taymans, Wojciech
691 Przybyl, Wonchul Lee, Xavier Claessens, Yasushi SHOJI
692
693 ... and many others who have contributed bug reports, translations, sent
694 suggestions or helped testing.
695
696 ## Bugs fixed in 1.12
697
698 More than [635 bugs][bugs-fixed-in-1.12] have been fixed during
699 the development of 1.12.
700
701 This list does not include issues that have been cherry-picked into the
702 stable 1.10 branch and fixed there as well, all fixes that ended up in the
703 1.10 branch are also included in 1.12.
704
705 This list also does not include issues that have been fixed without a bug
706 report in bugzilla, so the actual number of fixes is much higher.
707
708 [bugs-fixed-in-1.12]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=213265&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.1&target_milestone=1.10.2&target_milestone=1.10.3&target_milestone=1.10.4&target_milestone=1.11.1&target_milestone=1.11.2&target_milestone=1.11.3&target_milestone=1.11.4&target_milestone=1.11.90&target_milestone=1.11.91&target_milestone=1.12.0
709
710 ## Stable 1.12 branch
711
712 After the 1.12.0 release there will be several 1.12.x bug-fix releases which
713 will contain bug fixes which have been deemed suitable for a stable branch,
714 but no new features or intrusive changes will be added to a bug-fix release
715 usually. The 1.12.x bug-fix releases will be made from the git 1.12 branch, which
716 is a stable branch.
717
718 ### 1.12.0
719
720 1.12.0 was released on 4th May 2017.
721
722 <a name="1.12.1"></a>
723
724 ### 1.12.1
725
726 The first 1.12 bug-fix release (1.12.1) was released on 20 June 2017.
727 This release only contains bugfixes and it should be safe to update from 1.12.x.
728
729 #### Major bugfixes in 1.12.1
730
731  - Various fixes for crashes, assertions, deadlocks and memory leaks
732  - Fix for regression when seeking to the end of ASF files
733  - Fix for regression in (raw)videoparse that caused it to omit video metadata
734  - Fix for regression in discoverer that made it show more streams than
735    actually available
736  - Numerous bugfixes to the adaptive demuxer base class and the DASH demuxer
737  - Various playbin3/urisourcebin related bugfixes
738  - Vivante DirectVIV (imx6) texture uploader works with single-plane (e.g.
739    RGB) video formats now
740  - Intel Media SDK encoder now outputs valid PTS and keyframe flags
741  - OpenJPEG2000 plugin can be loaded again on MacOS and correctly displays
742    8 bit RGB images now
743  - Fixes to DirectSound source/sink for high CPU usage and wrong
744    latency/buffer size calculations
745  - gst-libav was updated to ffmpeg n3.3.2
746  - ... and many, many more!
747
748 For a full list of bugfixes see [Bugzilla][buglist-1.12.1]. Note that this is
749 not the full list of changes. For the full list of changes please refer to the
750 GIT logs or ChangeLogs of the particular modules.
751
752 [buglist-1.12.1]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=225693&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.12.1
753
754 <a name="1.12.2"></a>
755
756 ### 1.12.2
757
758 The second 1.12 bug-fix release (1.12.2) was released on 14 July 2017.
759 This release only contains bugfixes and it should be safe to update from 1.12.x.
760
761 #### Major bugfixes in 1.12.2
762
763  - Various fixes for crashes, assertions, deadlocks and memory leaks
764  - Regression fix for playback of live HLS streams
765  - Regression fix for crash when playing back a tunneled RTSP stream
766  - Regression fix for playback of RLE animations in MOV containers
767  - Regression fix for RTP GSM payloading producing corrupted output
768  - Major bugfixes to the MXF demuxer, mostly related to seeking and
769    fixes to the frame reordering handling in the MXF muxer and demuxer
770  - Fix for playback of mono streams on MacOS
771  - More fixes for index handling of ASF containers
772  - Various fixes to adaptivedemux, DASH and HLS demuxers
773  - Fix deadlock in gstreamer-editing-services during class initialization
774  - ... and many, many more!
775
776 For a full list of bugfixes see [Bugzilla][buglist-1.12.2]. Note that this is
777 not the full list of changes. For the full list of changes please refer to the
778 GIT logs or ChangeLogs of the particular modules.
779
780 [buglist-1.12.2]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=225693&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.12.2
781
782 ## Known Issues
783
784 - The `webrtcdsp` element is currently not shipped as part of the Windows
785   binary packages due to a [build system issue][bug-770264].
786
787 [bug-770264]: https://bugzilla.gnome.org/show_bug.cgi?id=770264
788
789 ## Schedule for 1.14
790
791 Our next major feature release will be 1.14, and 1.13 will be the unstable
792 development version leading up to the stable 1.14 release. The development
793 of 1.13/1.14 will happen in the git master branch.
794
795 The plan for the 1.14 development cycle is yet to be confirmed, but it is
796 expected that feature freeze will be around September 2017
797 followed by several 1.13 pre-releases and the new 1.14 stable release
798 in October.
799
800 1.14 will be backwards-compatible to the stable 1.12, 1.10, 1.8, 1.6, 1.4,
801 1.2 and 1.0 release series.
802
803 - - -
804
805 *These release notes have been prepared by Olivier Crête, Sebastian Dröge,
806 Nicolas Dufresne, Víctor Manuel Jáquez Leal, Tim-Philipp Müller, Philippe
807 Normand and Thibault Saunier.*
808
809 *License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*