Release 1.8.0
[platform/upstream/gstreamer.git] / NEWS
1 # GStreamer 1.8 Release Notes
2
3 **GStreamer 1.8.0 was released on 24 March 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.8/][latest] for the latest
12 version of this document.
13
14 *Last updated: Thursday 24 March 2016, 10:00 UTC [(log)][gitlog]*
15
16 [latest]: https://gstreamer.freedesktop.org/releases/1.8/
17 [gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.8/release-notes-1.8.md
18
19 ## Highlights
20
21 - **Hardware-accelerated zero-copy video decoding on Android**
22
23 - **New video capture source for Android using the android.hardware.Camera API**
24
25 - **Windows Media reverse playback** support (ASF/WMV/WMA)
26
27 - **New tracing system** provides support for more sophisticated debugging tools
28
29 - **New high-level GstPlayer playback convenience API**
30
31 - **Initial support for the new [Vulkan][vulkan] API**, see
32   [Matthew Waters' blog post][vulkan-in-gstreamer] for more details
33
34 - **Improved Opus audio codec support**: Support for more than two channels; MPEG-TS demuxer/muxer can now handle Opus;
35   [sample-accurate][opus-sample-accurate] encoding/decoding/transmuxing with
36   Ogg, Matroska, ISOBMFF (Quicktime/MP4), and MPEG-TS as container;
37   [new codec utility functions for Opus header and caps handling][opus-codec-utils]
38   in pbutils library. The Opus encoder/decoder elements were also moved to
39   gst-plugins-base (from -bad), and the opus RTP depayloader/payloader to -good.
40
41   [opus-sample-accurate]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta
42   [opus-codec-utils]:     https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
43
44 - **GStreamer VAAPI module now released and maintained as part of the GStreamer project**
45
46   [vulkan]:              https://www.khronos.org/vulkan
47   [vulkan-in-gstreamer]: http://ystreet00.blogspot.co.uk/2016/02/vulkan-in-gstreamer.html
48
49 ## Major new features and changes
50
51 ### Noteworthy new API, features and other changes
52
53 - New GstVideoAffineTransformationMeta meta for adding a simple 4x4 affine
54   transformation matrix to video buffers
55
56 - [g\_autoptr()](https://developer.gnome.org/glib/stable/glib-Miscellaneous-Macros.html#g-autoptr)
57   support for all types is exposed in GStreamer headers now, in combination
58   with a sufficiently-new GLib version (i.e. 2.44 or later). This is primarily
59   for the benefit of application developers who would like to make use of
60   this, the GStreamer codebase itself will not be using g_autoptr() for
61   the time being due to portability issues.
62
63 - GstContexts are now automatically propagated to elements added to a bin
64   or pipeline, and elements now maintain a list of contexts set on them.
65   The list of contexts set on an element can now be queried using the new functions
66   [gst\_element\_get\_context()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-context)
67   and [gst\_element\_get\_contexts()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-contexts). GstContexts are used to share context-specific configuration objects
68   between elements and can also be used by applications to set context-specific
69   configuration objects on elements, e.g. for OpenGL or Hardware-accelerated
70   video decoding.
71
72 - New [GST\_BUFFER\_DTS\_OR\_PTS()](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#GST-BUFFER-DTS-OR-PTS:CAPS)
73   convenience macro that returns the decode timestamp if one is set and
74   otherwise returns the presentation timestamp
75
76 - New GstPadEventFullFunc that returns a GstFlowReturn instead of a gboolean.
77   This new API is mostly for internal use and was added to fix a race condition
78   where occasionally internal flow error messages were posted on the bus when
79   sticky events were propagated at just the wrong moment whilst the pipeline
80   was shutting down. This happened primarily when the pipeline was shut down
81   immediately after starting it up. GStreamer would not know that the reason
82   the events could not be propagated was because the pipeline was shutting down
83   and not some other problem, and now the flow error allows GStreamer to know
84   the reason for the failure (and that there's no reason to post an error
85   message). This is particularly useful for queue-like elements which may need
86   to asynchronously propagate a previous flow return from downstream.
87
88 - Pipeline dumps in form of "dot files" now also show pad properties that
89   differ from their default value, the same as it does for elements. This is
90   useful for elements with pad subclasses that provide additional properties,
91   e.g. videomixer or compositor.
92
93 - Pad probes are now guaranteed to be called in the order they were added
94   (before they were called in reverse order, but no particular order was
95   documented or guaranteed)
96
97 - Plugins can now have dependencies on device nodes (not just regular files)
98   and also have a prefix filter. This is useful for plugins that expose
99   features (elements) based on available devices, such as the video4linux
100   plugin does with video decoders on certain embedded systems.
101
102 - gst\_segment\_to\_position() has been deprecated and been replaced by the
103   better-named gst\_segment\_position\_from\_running\_time(). At the same time
104   gst\_segment\_position\_from\_stream\_time() was added, as well as \_full()
105   variants of both to deal with negative stream time.
106
107 - GstController: the interpolation control source gained a new monotonic cubic
108   interpolation mode that, unlike the existing cubic mode, will never overshoot
109   the min/max y values set.
110
111 - GstNetAddressMeta: can now be read from buffers in language bindings as well,
112   via the new gst\_buffer\_get\_net\_address\_meta() function
113
114 - ID3 tag PRIV frames are now extraced into a new GST\_TAG\_PRIVATE\_DATA tag
115
116 - gst-launch-1.0 and gst\_parse\_launch() now warn in the most common case if
117   a dynamic pad link could not be resolved, instead of just silently
118   waiting to see if a suitable pad appears later, which is often perceived
119   by users as hanging -- they are now notified when this happens and can check
120   their pipeline.
121
122 - GstRTSPConnection now also parses custom RTSP message headers and retains
123   them for the application instead of just ignoring them
124
125 - rtspsrc handling of  authentication over tunneled connections (e.g. RTSP over HTTP)
126   was fixed
127
128 - gst\_video\_convert\_sample() now crops if there is a crop meta on the input buffer
129
130 - The debugging system printf functions are now exposed for general use, which
131   supports special printf format specifiers such as GST\_PTR\_FORMAT and
132   GST\_SEGMENT\_FORMAT to print GStreamer-related objects. This is handy for
133   systems that want to prepare some debug log information to be output at a
134   later point in time. The GStreamer-OpenGL subsystem is making use of these
135   new functions, which are [gst\_info\_vasprintf()][gst_info_vasprintf],
136     [gst\_info\_strdup\_vprintf()][gst_info_strdup_vprintf] and
137     [gst\_info\_strdup\_printf()][gst_info_strdup_printf].
138
139 - videoparse: "strides", "offsets" and "framesize" properties have been added to
140   allow parsing raw data with strides and padding that do not match GStreamer
141   defaults.
142
143 - GstPreset reads presets from the directories given in GST\_PRESET\_PATH now.
144   Presets are read from there after presets in the system path, but before
145   application and user paths.
146
147 [gst_info_vasprintf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-vasprintf
148 [gst_info_strdup_vprintf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-strdup-vprintf
149 [gst_info_strdup_printf]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#gst-info-strdup-printf
150
151 ### New Elements
152
153 - [netsim](): a new (resurrected) element to simulate network jitter and
154   packet dropping / duplication.
155
156 - New VP9 RTP payloader/depayloader elements: rtpvp9pay/rtpvp9depay
157
158 - New [videoframe_audiolevel]() element, a video frame synchronized audio level element
159
160 - New spandsp-based tone generator source
161
162 - New NVIDIA NVENC-based H.264 encoder for GPU-accelerated video encoding on
163   suitable NVIDIA hardware
164
165 - [rtspclientsink](), a new RTSP RECORD sink element, was added to gst-rtsp-server
166
167 - [alsamidisrc](), a new ALSA MIDI sequencer source element
168
169 ### Noteworthy element features and additions
170
171 - *identity*: new ["drop-buffer-flags"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-identity.html#GstIdentity--drop-buffer-flags)
172   property to drop buffers based on buffer flags. This can be used to drop all
173   non-keyframe buffers, for example.
174
175 - *multiqueue*: various fixes and improvements, in particular special handling
176   for sparse streams such as substitle streams, to make sure we don't overread
177   them any more. For sparse streams it can be normal that there's no buffer for
178   a long period of time, so having no buffer queued is perfectly normal. Before
179   we would often unnecessarily try to fill the subtitle stream queue, which
180   could lead to much more data being queued in multiqueue than necessary.
181
182 - *multiqueue*/*queue*: When dealing with time limits, these elements now use the
183   new ["GST_BUFFER_DTS_OR_PTS"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#GST-BUFFER-DTS-OR-PTS:CAPS)
184   and ["gst_segment_to_running_time_full()"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSegment.html#gst-segment-to-running-time-full)
185   API, resulting in more accurate levels, especially when dealing with non-raw
186   streams (where reordering happens, and we want to use the increasing DTS as
187   opposed to the non-continuously increasing PTS) and out-of-segment input/output.
188   Previously all encoded buffers before the segment start, which can happen when
189   doing ACCURATE seeks, were not taken into account in the queue level calculation.
190
191 - *multiqueue*: New ["use-interleave"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-multiqueue.html#GstMultiQueue--use-interleave)
192   property which allows the size of the queues to be optimized based on the input
193   streams interleave. This should only be used with input streams which are properly
194   timestamped. It will be used in the future decodebin3 element.
195
196 - *queue2*: new ["avg-in-rate"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-queue2.html#GstQueue2--avg-in-rate)
197   property that returns the average input rate in bytes per second
198
199 - audiotestsrc now supports all audio formats and is no longer artificially
200   limited with regard to the number of channels or sample rate
201
202 - gst-libav (ffmpeg codec wrapper): map and enable JPEG2000 decoder
203
204 - multisocketsink can, on request, send a custom GstNetworkMessage event
205   upstream whenever data is received from a client on a socket. Similarly,
206   socketsrc will, on request, pick up GstNetworkMessage events from downstream
207   and send any data contained within them via the socket. This allows for
208   simple bidirectional communication.
209
210 - matroska muxer and demuxer now support the ProRes video format
211
212 - Improved VP8/VP9 decoding performance on multi-core systems by enabling
213   multi-threaded decoding in the libvpx-based decoders on such systems
214
215 - appsink has a new ["wait-on-eos"](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-appsink.html#GstAppSink--wait-on-eos)
216   property, so in cases where it is uncertain if an appsink will have a consumer for
217   its buffers when it receives an EOS this can be set to FALSE to ensure that the
218   appsink will not hang.
219
220 - rtph264pay and rtph265pay have a new "config-interval" mode -1 that will
221   re-send the setup data (SPS/PPS/VPS) before every keyframe to ensure
222   optimal coverage and the shortest possibly start-up time for a new client
223
224 - mpegtsmux can now mux H.265/HEVC video as well
225
226 - The MXF muxer was ported to 1.x and produces more standard conformant files now
227   that can be handled by more other software; The MXF demuxer got improved
228   support for seek tables (IndexTableSegments).
229
230 ### Plugin moves
231
232 - The rtph265pay/depay RTP payloader/depayloader elements for H.265/HEVC video
233   from the rtph265 plugin in -bad have been moved into the existing rtp plugin
234   in gst-plugins-good.
235
236 - The mpg123 plugin containing a libmpg123 based audio decoder element has
237   been moved from -bad to -ugly.
238
239 - The Opus encoder/decoder elements have been moved to gst-plugins-base and
240   the RTP payloader to gst-plugins-good, both coming from gst-plugins-bad.
241
242 ### New tracing tools for developers
243
244 A new tracing subsystem API has been added to GStreamer, which provides
245 external tracers with the possibility to strategically hook into GStreamer
246 internals and collect data that can be evaluated later. These tracers are a
247 new type of plugin features, and GStreamer core ships with a few example
248 tracers (latency, stats, rusage, log) to start with. Tracers can be loaded
249 and configured at start-up via an environment variable (GST\_TRACER\_PLUGINS).
250
251 Background: While GStreamer provides plenty of data on what's going on in a
252 pipeline via its debug log, that data is not necessarily structured enough to
253 be generally useful, and the overhead to enable logging output for all data
254 required might be too high in many cases. The new tracing system allows tracers
255 to just obtain the data needed at the right spot with as little overhead as
256 possible, which will be particularly useful on embedded systems.
257
258 Of course it has always been possible to do performance benchmarks and debug
259 memory leaks, memory consumption and invalid memory access using standard
260 operating system tools, but there are some things that are difficult to track
261 with the standard tools, and the new tracing system helps with that. Examples
262 are things such as latency handling, buffer flow, ownership transfer of
263 events and buffers from element to element, caps negotiation, etc.
264
265 For some background on the new tracing system, watch Stefan Sauer's
266 GStreamer Conference talk ["A new tracing subsystem for GStreamer"][tracer-0]
267 and for a more specific example how it can be useful have a look at
268 Thiago Santos's lightning talk ["Analyzing caps negotiation using GstTracer"][tracer-1]
269 and his ["GstTracer experiments"][tracer-2] blog post. There was also a Google
270 Summer of Code project in 2015 that used tracing system for a graphical
271 GStreamer debugging tool ["gst-debugger"][tracer-3].
272
273 This is all still very much work in progress, but we hope this will provide the
274 foundation for a whole suite of new debugging tools for GStreamer pipelines.
275
276 [tracer-0]: https://gstconf.ubicast.tv/videos/a-new-tracing-subsystem-for-gstreamer/
277 [tracer-1]: https://gstconf.ubicast.tv/videos/analyzing-caps-negotiation-using-gsttracer/
278 [tracer-2]: http://blog.thiagoss.com/2015/07/23/gsttracer-experiments/
279 [tracer-3]: https://git.gnome.org/browse/gst-debugger
280
281 ### GstPlayer: a new high-level API for cross-platform multimedia playback
282
283 GStreamer has had reasonably high-level API for multimedia playback
284 in the form of the playbin element for a long time. This allowed application
285 developers to just configure a URI to play, and playbin would take care of
286 everything else. This works well, but there is still way too much to do on
287 the application-side to implement a fully-featured playback application, and
288 too much general GStreamer pipeline API exposed, making it less accessible
289 to application developers.
290
291 Enter GstPlayer. GstPlayer's aim is to provide an even higher-level abstraction
292 of a fully-featured playback API but specialised for its specific use case. It
293 also provides easy integration with and examples for Gtk+, Qt, Android, OS/X,
294 iOS and Windows. Watch Sebastian's [GstPlayer talk at the GStreamer Conference][gstplayer-talk]
295 for more information, or check out the [GstPlayer API reference][gstplayer-api]
296 and [GstPlayer examples][gstplayer-examples].
297
298 [gstplayer-api]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/player.html
299 [gstplayer-talk]: https://gstconf.ubicast.tv/videos/gstplayer-a-simple-cross-platform-api-for-all-your-media-playback-needs-part-1/
300 [gstplayer-examples]: https://github.com/sdroege/gst-player/
301
302 ### Adaptive streaming: DASH, HLS and MSS improvements
303
304 - dashdemux now supports loading external xml nodes pointed from its MPD.
305
306 - Content protection nodes parsing support for PlayReady WRM in mssdemux.
307
308 - Reverse playback was improved to respect seek start and stop positions.
309
310 - Adaptive demuxers (hlsdemux, dashdemux, mssdemux) now support the SNAP_AFTER
311   and SNAP_BEFORE seek flags which will jump to the nearest fragment boundary
312   when executing a seek, which means playback resumes more quickly after a seek.
313
314 ### Audio library improvements
315
316 - audio conversion, quantization and channel up/downmixing functionality
317   has been moved from the audioconvert element into the audio library and
318   is now available as public API in form of [GstAudioConverter][audio-0],
319   [GstAudioQuantize][audio-1] and [GstAudioChannelMixer][audio-2].
320   Audio resampling will follow in future releases.
321
322 - [gst\_audio\_channel\_get\_fallback\_mask()][audio-3] can be used
323   to retrieve a default channel mask for a given number of channels as last
324   resort if the layout is unknown
325
326 - A new [GstAudioClippingMeta][audio-4] meta was added for specifying clipping
327   on encoded audio buffers
328
329 - A new GstAudioVisualizer base class for audio visualisation elements;
330   most of the existing visualisers have been ported over to the new base class.
331   This new base class lives in the pbutils library rather than the audio library,
332   since we'd have had to make libgstaudio depend on libgstvideo otherwise,
333   which was deemed undesirable.
334
335 [audio-0]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstAudioConverter.html
336 [audio-1]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstAudioQuantize.html
337 [audio-2]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiochannels.html#gst-audio-channel-mix-new
338 [audio-3]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiochannels.html#gst-audio-channel-get-fallback-mask
339 [audio-4]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta
340
341 ### GStreamer OpenGL support improvements
342
343 #### Better OpenGL Shader support
344
345 [GstGLShader][shader] has been revamped to allow more OpenGL shader types
346 by utilizing a new GstGLSLStage object.  Each stage holds an OpenGL pipeline
347 stage such as a vertex, fragment or a geometry shader that are all compiled
348 separately into a program that is executed.
349
350 The glshader element has also received a revamp as a result of the changes in
351 the library.  It does not take file locations for the vertex and fragment
352 shaders anymore.  Instead it takes the strings directly leaving the file
353 management to the application.
354
355 A new [example][liveshader-example] was added utilizing the new shader
356 infrastructure showcasing live shader edits.
357
358 [shader]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglshader.html
359 [liveshader-example]: https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/tests/examples/gtk/glliveshader.c
360
361 #### OpenGL GLMemory rework
362
363 [GstGLMemory] was extensively reworked to support the addition of multiple
364 texture targets required for zero-copy integration with the Android
365 MediaCodec elements.  This work was also used to provide IOSurface based
366 GLMemory on OS X for zero-copy with OS X's VideoToolbox decoder (vtdec) and
367 AV Foundation video source (avfvideosrc).  There are also patches in bugzilla
368 for GstGLMemoryEGL specifically aimed at improving the decoding performance on
369 the Raspberry Pi.
370
371 [GstGLMemory]: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-gstglmemory.html
372
373 A texture-target field was added to video/x-raw(memory:GLMemory) caps to signal
374 the texture target contained in the GLMemory.  Its values can be 2D, rectangle
375 or external-oes.  glcolorconvert can convert between the different formats as
376 required and different elements will accept or produce different targets.  e.g.
377 glimagesink can take and render external-oes textures directly as required for
378 effecient zero-copy on android.
379
380 A generic GL allocation framework was also implemented to support the generic
381 allocation of OpenGL buffers and textures which is used extensively by
382 GstGLBufferPool.
383
384 #### OpenGL DMABuf import uploader
385
386 There is now a DMABuf uploader available for automatic selection that will
387 attempt to import the upstream provided DMABuf.  The uploader will import into
388 2D textures with the necesarry format.  YUV to RGB conversion is still provided
389 by glcolorconvert to avoid the laxer restrictions with external-oes textures.
390
391 #### OpenGL queries
392
393 Queries of various aspects of the OpenGL runtime such as timers, number of
394 samples or the current timestamp are not possible.  The GstGLQuery object uses a
395 delayed debug system to delay the debug output to later to avoid expensive calls
396 to the glGet\* family of functions directly after finishing a query.  It is
397 currently used to output the time taken to perform various operations of texture
398 uploads and downloads in GstGLMemory.
399
400 #### New OpenGL elements
401
402 glcolorbalance has been created mirroring the videobalance elements.
403 glcolorbalance provides the exact same interface as videobalance so can be used
404 as a GPU accelerated replacement.  glcolorbalance has been added to glsinkbin so
405 usage with playsink/playbin will use it automatically instead of videobalance
406 where possible.
407
408 glvideoflip, which is the OpenGL equiavalant of videoflip, implements the exact
409 same interface and functionality as videoflip.
410
411 #### EGL implementation now selects OpenGL 3.x
412
413 The EGL implementation can now select OpenGL 3.x contexts.
414
415 #### OpenGL API removal
416
417 The GstGLDownload library object was removed as it was not used by anything.
418 Everything is performed by GstGLMemory or in the gldownloadelement.
419
420 The GstGLUploadMeta library object was removed as it was not being used and we
421 don't want to promote the use of GstVideoGLTextureUploadMeta.
422
423 #### OpenGL: Other miscellaneous changes
424
425 - The EGL implementation can now select OpenGL 3.x contexts.  This brings
426   OpenGL 3.x to e.g. wayland and other EGL systems.
427
428 - glstereomix/glstereosplit are now built and are usable on OpenGL ES systems
429
430 - The UYVY/YUY2 to RGBA and RGBA to UYVY/YUY2 shaders were fixed removing the
431   sawtooth pattern and luma bleeding.
432
433 - We now utilize the GL\_APPLE\_sync extension on iOS devices which improves
434   performance of OpenGL applications, especially with multiple OpenGL
435   contexts.
436
437 - glcolorconvert now uses a bufferpool to avoid costly
438   glGenTextures/glDeleteTextures for every frame.
439
440 - glvideomixer now has full glBlendFunc and glBlendEquation support per input.
441
442 - gltransformation now support navigation events so your weird transformations
443   also work with DVD menus.
444
445 - qmlglsink can now run on iOS, OS X and Android in addition to the already
446   supported Linux platform.
447
448 - glimagesink now posts unhandled keyboard and mouse events (on backends that
449   support user input, current only X11) on the bus for the application.
450
451 ### Initial GStreamer Vulkan support
452
453 Some new elements, vulkansink and vulkanupload have been implemented utilizing
454 the new Vulkan API.  The implementation is currently limited to X11 platforms
455 (via xcb) and does not perform any scaling of the stream's contents to the size
456 of the available output.
457
458 A lot of infrasctructure work has been undertaken to support using Vulkan in
459 GStreamer in the future.  A number of GstMemory subclasses have been created for
460 integrating Vulkan's GPU memory handling along with VkBuffer's and VkImage's
461 that can be passed between elements.  Some GStreamer refcounted wrappers for
462 global objects such as VkInstance, VkDevice, VkQueue, etc have also been
463 implemented along with GstContext integration for sharing these objects with the
464 application.
465
466 ### GStreamer VAAPI support for hardware-accelerated video decoding and encoding on Intel (and other) platforms
467
468 #### GStreamer VAAPI is now part of upstream GStreamer
469
470 The GStreamer-VAAPI module which provides support for hardware-accelerated
471 video decoding, encoding and post-processing on Intel graphics hardware
472 on Linux has moved from its previous home at the [Intel Open Source Technology Center][iostc]
473 to the upstream GStreamer repositories, where it will in future be maintained
474 as part of the upstream GStreamer project and released in lockstep with the
475 other GStreamer modules. The current maintainers will continue to spearhead
476 the development at the new location:
477
478 [http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/][gst-vaapi-git]
479
480 [gst-vaapi-git]: http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/
481
482 GStreamer-VAAPI relies heavily on certain GStreamer infrastructure API that
483 is still in flux such as the OpenGL integration API or the codec parser
484 libraries, and one of the goals of the move was to be able to leverage
485 new developments early and provide tighter integration with the latest
486 developments of those APIs and other graphics-related APIs provided by
487 GStreamer, which should hopefully improve performance even further and in
488 some cases might also provide better stability.
489
490 Thanks to everyone involved in making this move happen!
491
492 #### GStreamer VAAPI: Bug tracking
493
494 Bugs had already been tracked on [GNOME bugzilla](bgo) but will be moved
495 from the gstreamer-vaapi product into a new gstreamer-vaapi component of
496 the GStreamer product in bugzilla. Please file new bugs against the new
497 component in the GStreamer product from now on.
498
499 #### GStreamer VAAPI: Pending patches
500
501 The code base has been re-indented to the GStreamer code style, which
502 affected some files more than others. This means that some of the patches
503 in bugzilla might not apply any longer, so if you have any unmerged patches
504 sitting in bugzilla please consider checking if they still apply cleany and
505 refresh them if not. Sorry for any inconvenience this may cause.
506
507 #### GStreamer VAAPI: New versioning scheme and supported GStreamer versions
508
509 The version numbering has been changed to match the GStreamer version
510 numbering to avoid confusion: there is a new gstreamer-vaapi 1.6.0 release
511 and a 1.6 branch that is roughly equivalent to the previous 0.7.0 version.
512 Future releases 1.7.x and 1.8.x will be made alongside GStreamer releases.
513
514 While it was possible and supported by previous releases to build against
515 a whole range of different GStreamer versions (such as 1.2, 1.4, 1.6 or 1.7/1.8),
516 in the future there will only be one target branch, so that git master will
517 track GStreamer git master, 1.8.x will target GStreamer 1.8, and
518 1.6.x will target the 1.6 series.
519
520 [iostc]: http://01.org
521 [bgo]:   http://bugzilla.gnome.og
522
523 #### GStreamer VAAPI: Miscellaneous changes
524
525 All GStreamer-VAAPI functionality is now provided solely by its GStreamer
526 elements. There is no more public library exposing GstVaapi API, this API
527 was only ever meant for private use by the elements. Parts of it may be
528 resurrected again in future if needed, but for now it has all been made
529 private.
530
531 GStreamer-VAAPI now unconditionally uses the codecparser library in
532 gst-plugins-bad instead of shipping its own internal copy. Similarly,
533 it no longer ships its own codec parsers but relies on the upstream
534 codec parser elements.
535
536 The GStreamer-VAAPI encoder elements have been renamed from vaapiencode_foo
537 to vaapifooenc, so encoders are now called vaapih264enc, vaapih265enc,
538 vaapimpeg2enc, vaapijpegenc, and vaapivp8enc. With this change we now follow
539 the standard names in GStreamer, and the plugin documentation is generated
540 correctly.
541
542 In the case of the decoders, only the jpeg decoder has been split from the
543 general decoding element vaapidecode: vaapijpegdec. This is the first step to
544 split per codec each decoding element. The vaapijpegdec has also been given
545 marginal rank for the time being.
546
547 #### GStreamer VAAPI: New features in 1.8: 10-bit H.265/HEVC decoding support
548
549 Support for decoding 10-bit H.265/HEVC has been added. For the time being
550 this only works in combination with vaapisink though, until support for the
551 P010 video format used internally is added to GStreamer and to the
552 vaGetImage()/vaPutimage() API in the vaapi-intel-driver.
553
554 Several fixes for memory leaks, build errors, and in the internal
555 video parsing.
556
557 Finally, vaapisink now posts the unhandled keyboard and mouse events to the
558 application.
559
560 ### GStreamer Video 4 Linux Support
561
562 Colorimetry support has been enhanced even more. It will now properly select
563 default values when not specified by the driver. The range of color formats
564 supported by GStreamer has been greatly improved. Notably, support for
565 multi-planar I420 has been added along with all the new and non-ambiguous RGB
566 formats that got added in recent kernels.
567
568 The device provider now exposes a variety of properties as found in the udev
569 database.
570
571 The video decoder is now able to negotiate the downstream format.
572
573 Elements that are dynamically created from /dev/video\* now track changes on
574 these devices to ensure the registry stay up to date.
575
576 All this and various bug fixes that improve both stability and correctness.
577
578 ### GStreamer Editing Services
579
580 Added APIs to handle asset proxying support. Proxy creation is not the
581 responsibility of GES itself, but GES provides all the needed features
582 for it to be cleanly handled at a higher level.
583
584 Added support for changing playback rate.  This means that now, whenever a
585 user adds a 'pitch' element (as it is the only known element to change playback
586 rate through properties), GES will handle everything internally. This change
587 introduced a new media-duration-factor property in NleObject which will
588 lead to tweaking of seek events so they have the proper playback range to be
589 requested upstream.
590
591 Construction of NLE objects has been reworked making copy/pasting fully
592 functional and allowing users to set properties on effects right after
593 creating them.
594
595 Rework of the title source to add more flexibility in text positioning,
596 and letting the user get feedback about rendered text positioning.
597
598 Report nlecomposition structural issues (coming from user programing mistakes)
599 into ERROR messages on the bus.
600
601 Add GI/pythyon testsuite in GES itself, making sure the API is working as expected
602 in python, and allowing writing tests faster.
603
604 ### GstValidate
605
606 Added support to run tests inside gdb.
607
608 Added a 'smart' reporting mode where we give as much information as possible about
609 critical errors.
610
611 Uses GstTracer now instead of a LD\_PRELOAD library.
612
613 ## Miscellaneous
614
615 - encodebin now works with "encoder-muxers" such as wavenc
616
617 - gst-play-1.0 acquired a new keyboard shortcut: '0' seeks back to the start
618
619 - gst-play-1.0 supports two new command line switches: -v for verbose output
620   and --flags to configure the playbin flags to use.
621
622 ## Build and Dependencies
623
624 - The GLib dependency requirement was bumped to 2.40
625
626 - The -Bsymbolic configure check now works with clang as well
627
628 - ffmpeg is now required as libav provider, incompatible changes were
629   introduced that make it no longer viable to support both FFmpeg and Libav
630   as libav providers. Most major distros have switched to FFmpeg or are in
631   the process of switching to it anyway, so we don't expect this to be a
632   problem, and there is still an internal copy of ffmpeg that can be used
633   as fallback if needed.
634
635 - The internal ffmpeg snapshot is now FFMpeg 3.0, but it should be possible
636   to build against 2.8 as well for the time being.
637
638 ## Platform-specific improvements
639
640 ### Android
641
642 - Zero-copy video decoding on Android using the hardware-accelerated decoders
643   has been implemented, and is fully integrated with the GStreamer OpenGL stack
644
645 - ahcsrc, a new camera source element, has been merged and can be used to
646   capture video on android devices. It uses the android.hardware.Camera Java
647   API to capture from the system's cameras.
648
649 - The OpenGL-based QML video sink can now also be used on Android
650
651 - New tinyalsasink element, which is mainly useful for Android but can also
652   be used on other platforms.
653
654 ### OS/X and iOS
655
656 - The system clock now uses mach\_absolute\_time() on OSX/iOS, which is
657   the preferred high-resolution monotonic clock to be used on Apple platforms
658
659 - The OpenGL-based QML video sink can now also be used on OS X and iOS (with
660   some Qt build system massaging)
661
662 - New IOSurface based memory implementation in avfvideosrc and vtdec on OS X
663   for zerocopy with OpenGL.  The previously used OpenGL extension
664   GL_APPLE_ycbcr_422 is not compatible with GL 3.x core contexts.
665
666 - New GstAppleCoreVideoMemory wrapping CVPixelBuffer's
667
668 - avfvideosrc now supports renegotiation.
669
670 ### Windows
671
672 - Various bugs with UDP and multicast were fixed on Windows, mostly related to
673   gst-rtsp-server.
674
675 - A few bugs in directsoundsrc and directsoundsink were fixed that could cause
676   the element to lock up. Also the "mute" property on the sink was fixed, and
677   a new "device" property for device selection was added to the source.
678
679 ## Known Issues
680
681 - Building GStreamer applications with the Android NDK r11 is currently not
682   supported due to incompatible changes in the NDK. This is expected to be
683   fixed for 1.8.1.
684   [Bugzilla #763999](https://bugzilla.gnome.org/show_bug.cgi?id=763999)
685
686 - vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit
687   Windows is unaffected.
688   [Bugzilla #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663)
689
690 ## Contributors
691
692 Adam Miartus, Alban Bedel, Aleix Conchillo Flaqué, Aleksander Wabik,
693 Alessandro Decina, Alex Ashley, Alex Dizengof, Alex Henrie, Alistair Buxton,
694 Andreas Cadhalpun, Andreas Frisch, André Draszik, Anthony G. Basile,
695 Antoine Jacoutot, Anton Bondarenko, Antonio Ospite, Arjen Veenhuizen,
696 Arnaud Vrac, Arun Raghavan, Athanasios Oikonomou, Aurélien Zanelli, Ben Iofel,
697 Bob Holcomb, Branko Subasic, Carlos Rafael Giani, Chris Bass, Csaba Toth,
698 Daniel Kamil Kozar, Danilo Cesar Lemes de Paula, Dave Craig, David Fernandez,
699 David Schleef, David Svensson Fors, David Waring, David Wu, Duncan Palmer,
700 Edward Hervey, Egor Zaharov, Etienne Peron, Eunhae Choi, Evan Callaway,
701 Evan Nemerson, Fabian Orccon, Florent Thiéry, Florin Apostol, Frédéric Wang,
702 George Kiagiadakis, George Yunaev, Göran Jönsson, Graham Leggett,
703 Guillaume Desmottes, Guillaume Marquebielle, Haihua Hu, Havard Graff,
704 Heinrich Fink, Holger Kaelberer, HoonHee Lee, Hugues Fruchet, Hyunil Park,
705 Hyunjun Ko, Ilya Konstantinov, James Stevenson, Jan Alexander Steffens (heftig),
706 Jan Schmidt, Jason Litzinger, Jens Georg, Jimmy Ohn, Joan Pau Beltran,
707 Joe Gorse, John Chang, John Slade, Jose Antonio Santos Cadenas, Josep Torra,
708 Julian Bouzas, Julien Isorce, Julien Moutte, Justin Kim, Kazunori Kobayashi,
709 Koop Mast, Lim Siew Hoon, Linus Svensson, Lubosz Sarnecki, Luis de Bethencourt,
710 Lukasz Forynski, Manasa Athreya, Marcel Holtmann, Marcin Kolny, Marcus Prebble,
711 Mark Nauwelaerts, Maroš Ondrášek, Martin Kelly, Matej Knopp, Mathias Hasselmann,
712 Mathieu Duponchelle, Matt Crane, Matthew Marsh, Matthew Waters, Matthieu Bouron,
713 Mersad Jelacic, Michael Olbrich, Miguel París Díaz, Mikhail Fludkov,
714 Mischa Spiegelmock, Nicola Murino, Nicolas Dufresne, Nicolas Huet,
715 Nirbheek Chauhan, Ognyan Tonchev, Olivier Crête, Pablo Anton, Pankaj Darak,
716 Paolo Pettinato, Patricia Muscalu, Paul Arzelier, Pavel Bludov, Perry Hung,
717 Peter Korsgaard, Peter Seiderer, Petr Viktorin, Philippe Normand,
718 Philippe Renon, Philipp Zabel, Philip Van Hoof, Philip Withnall, Piotr Drąg,
719 plamot, Polochon\_street, Prashant Gotarne, Rajat Verma, Ramiro Polla,
720 Ravi Kiran K N, Reynaldo H. Verdejo Pinochet, Robert Swain, Romain Picard,
721 Roman Nowicki, Ross Burton, Ryan Hendrickson, Santiago Carot-Nemesio,
722 Scott D Phillips, Sebastian Dröge, Sebastian Rasmussen, Sergey Borovkov,
723 Seungha Yang, Sjors Gielen, Song Bing, Sreerenj Balachandran, Srimanta Panda,
724 Stavros Vagionitis, Stefan Sauer, Steven Hoving, Stian Selnes, Suhwang Kim,
725 Thiago Santos, Thibault Saunier, Thijs Vermeir, Thomas Bluemel, Thomas Roos,
726 Thomas Vander Stichele, Tim-Philipp Müller, Tim Sheridan, Ting-Wei Lan,
727 Tom Deseyn, Vanessa Chipirrás Navalón, Víctor Manuel Jáquez Leal,
728 Vincent Dehors, Vincent Penquerc'h, Vineeth T M, Vivia Nikolaidou,
729 Wang Xin-yu (王昕宇), William Manley, Wim Taymans, Wonchul Lee, Xavi Artigas,
730 Xavier Claessens, Youness Alaoui,
731
732 ... and many others who have contributed bug reports, translations, sent
733 suggestions or helped testing.
734
735 ## Bugs fixed in 1.8
736
737 More than [~700 bugs][bugs-fixed-in-1.8] have been fixed during
738 the development of 1.8.
739
740 This list does not include issues that have been cherry-picked into the
741 stable 1.6 branch and fixed there as well, all fixes that ended up in the
742 1.6 branch are also included in 1.8.
743
744 This list also does not include issues that have been fixed without a bug
745 report in bugzilla, so the actual number of fixes is much higher.
746
747 [bugs-fixed-in-1.8]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=107311&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.6.1&target_milestone=1.6.2&target_milestone=1.6.3&target_milestone=1.7.0&target_milestone=1.7.1&target_milestone=1.7.2&target_milestone=1.7.3&target_milestone=1.7.4&target_milestone=1.7.90&target_milestone=1.7.91&target_milestone=1.7.92&target_milestone=1.7.x&target_milestone=1.8.0
748
749 ## Stable 1.8 branch
750
751 After the 1.8.0 release there will be several 1.8.x bug-fix releases which
752 will contain bug fixes which have been deemed suitable for a stable branch,
753 but no new features or intrusive changes will be added to a bug-fix release
754 usually. The 1.8.x bug-fix releases will be made from the git 1.8 branch, which
755 is a stable branch.
756
757 ### 1.8.0
758
759 1.8.0 was released on 24 March 2016.
760
761 ### 1.8.1
762
763 The first 1.8 bug-fix release (1.8.1) is planned for April 2016.
764
765 ## Schedule for 1.10
766
767 Our next major feature release will be 1.10, and 1.9 will be the unstable
768 development version leading up to the stable 1.10 release. The development
769 of 1.9/1.10 will happen in the git master branch.
770
771 The plan for the 1.10 development cycle is yet to be confirmed, but it is
772 expected that feature freeze will be around late July or early August,
773 followed by several 1.9 pre-releases and the new 1.10 stable release
774 in September.
775
776 1.10 will be backwards-compatible to the stable 1.8, 1.6, 1.4, 1.2 and 1.0
777 release series.
778
779 - - -
780
781 *These release notes have been prepared by Tim-Philipp Müller with
782 contributions from Sebastian Dröge, Nicolas Dufresne, Edward Hervey, Víctor
783 Manuel Jáquez Leal, Arun Raghavan, Thiago Santos, Thibault Saunier, Jan
784 Schmidt and Matthew Waters.*
785
786 *License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)*