GStreamer 1.8 Release NotesGStreamer 1.8.0 was originally released on 24 March 2016. The latest bug-fix release in the 1.8 series is 1.8.3 and was released on 19 August 2016. See https://gstreamer.freedesktop.org/releases/1.8/ for the latest version of this document. Last updated: Friday 19 August 2016, 08:00 UTC (log) IntroductionThe GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite cross-platform multimedia framework! As always, this release is again packed with new features, bug fixes and other improvements. Highlights
Major new features and changesNoteworthy new API, features and other changes
New Elements
Noteworthy element features and additions
Plugin moves
New tracing tools for developersA new tracing subsystem API has been added to GStreamer, which provides external tracers with the possibility to strategically hook into GStreamer internals and collect data that can be evaluated later. These tracers are a new type of plugin features, and GStreamer core ships with a few example tracers (latency, stats, rusage, log) to start with. Tracers can be loaded and configured at start-up via an environment variable (GST_TRACER_PLUGINS). Background: While GStreamer provides plenty of data on what's going on in a pipeline via its debug log, that data is not necessarily structured enough to be generally useful, and the overhead to enable logging output for all data required might be too high in many cases. The new tracing system allows tracers to just obtain the data needed at the right spot with as little overhead as possible, which will be particularly useful on embedded systems. Of course it has always been possible to do performance benchmarks and debug memory leaks, memory consumption and invalid memory access using standard operating system tools, but there are some things that are difficult to track with the standard tools, and the new tracing system helps with that. Examples are things such as latency handling, buffer flow, ownership transfer of events and buffers from element to element, caps negotiation, etc. For some background on the new tracing system, watch Stefan Sauer's GStreamer Conference talk "A new tracing subsystem for GStreamer" and for a more specific example how it can be useful have a look at Thiago Santos's lightning talk "Analyzing caps negotiation using GstTracer" and his "GstTracer experiments" blog post. There was also a Google Summer of Code project in 2015 that used tracing system for a graphical GStreamer debugging tool "gst-debugger". This is all still very much work in progress, but we hope this will provide the foundation for a whole suite of new debugging tools for GStreamer pipelines. GstPlayer: a new high-level API for cross-platform multimedia playbackGStreamer has had reasonably high-level API for multimedia playback in the form of the playbin element for a long time. This allowed application developers to just configure a URI to play, and playbin would take care of everything else. This works well, but there is still way too much to do on the application-side to implement a fully-featured playback application, and too much general GStreamer pipeline API exposed, making it less accessible to application developers. Enter GstPlayer. GstPlayer's aim is to provide an even higher-level abstraction of a fully-featured playback API but specialised for its specific use case. It also provides easy integration with and examples for Gtk+, Qt, Android, OS/X, iOS and Windows. Watch Sebastian's GstPlayer talk at the GStreamer Conference for more information, or check out the GstPlayer API reference and GstPlayer examples. Adaptive streaming: DASH, HLS and MSS improvements
Audio library improvements
GStreamer OpenGL support improvementsBetter OpenGL Shader supportGstGLShader has been revamped to allow more OpenGL shader types by utilizing a new GstGLSLStage object. Each stage holds an OpenGL pipeline stage such as a vertex, fragment or a geometry shader that are all compiled separately into a program that is executed. The glshader element has also received a revamp as a result of the changes in the library. It does not take file locations for the vertex and fragment shaders anymore. Instead it takes the strings directly leaving the file management to the application. A new example was added utilizing the new shader infrastructure showcasing live shader edits. OpenGL GLMemory reworkGstGLMemory was extensively reworked to support the addition of multiple texture targets required for zero-copy integration with the Android MediaCodec elements. This work was also used to provide IOSurface based GLMemory on OS X for zero-copy with OS X's VideoToolbox decoder (vtdec) and AV Foundation video source (avfvideosrc). There are also patches in bugzilla for GstGLMemoryEGL specifically aimed at improving the decoding performance on the Raspberry Pi. A texture-target field was added to video/x-raw(memory:GLMemory) caps to signal the texture target contained in the GLMemory. Its values can be 2D, rectangle or external-oes. glcolorconvert can convert between the different formats as required and different elements will accept or produce different targets. e.g. glimagesink can take and render external-oes textures directly as required for effecient zero-copy on android. A generic GL allocation framework was also implemented to support the generic allocation of OpenGL buffers and textures which is used extensively by GstGLBufferPool. OpenGL DMABuf import uploaderThere is now a DMABuf uploader available for automatic selection that will attempt to import the upstream provided DMABuf. The uploader will import into 2D textures with the necesarry format. YUV to RGB conversion is still provided by glcolorconvert to avoid the laxer restrictions with external-oes textures. OpenGL queriesQueries of various aspects of the OpenGL runtime such as timers, number of samples or the current timestamp are now possible. The GstGLQuery object uses a delayed debug system to delay the debug output to later to avoid expensive calls to the glGet* family of functions directly after finishing a query. It is currently used to output the time taken to perform various operations of texture uploads and downloads in GstGLMemory. New OpenGL elementsglcolorbalance has been created mirroring the videobalance elements. glcolorbalance provides the exact same interface as videobalance so can be used as a GPU accelerated replacement. glcolorbalance has been added to glsinkbin so usage with playsink/playbin will use it automatically instead of videobalance where possible. glvideoflip, which is the OpenGL equiavalant of videoflip, implements the exact same interface and functionality as videoflip. EGL implementation now selects OpenGL 3.xThe EGL implementation can now select OpenGL 3.x contexts. OpenGL API removalThe GstGLDownload library object was removed as it was not used by anything. Everything is performed by GstGLMemory or in the gldownloadelement. The GstGLUploadMeta library object was removed as it was not being used and we don't want to promote the use of GstVideoGLTextureUploadMeta. OpenGL: Other miscellaneous changes
Initial GStreamer Vulkan supportSome new elements, vulkansink and vulkanupload have been implemented utilizing the new Vulkan API. The implementation is currently limited to X11 platforms (via xcb) and does not perform any scaling of the stream's contents to the size of the available output. A lot of infrasctructure work has been undertaken to support using Vulkan in GStreamer in the future. A number of GstMemory subclasses have been created for integrating Vulkan's GPU memory handling along with VkBuffer's and VkImage's that can be passed between elements. Some GStreamer refcounted wrappers for global objects such as VkInstance, VkDevice, VkQueue, etc have also been implemented along with GstContext integration for sharing these objects with the application. GStreamer VAAPI support for hardware-accelerated video decoding and encoding on Intel (and other) platformsGStreamer VAAPI is now part of upstream GStreamerThe GStreamer-VAAPI module which provides support for hardware-accelerated video decoding, encoding and post-processing on Intel graphics hardware on Linux has moved from its previous home at the Intel Open Source Technology Center to the upstream GStreamer repositories, where it will in future be maintained as part of the upstream GStreamer project and released in lockstep with the other GStreamer modules. The current maintainers will continue to spearhead the development at the new location: http://cgit.freedesktop.org/gstreamer/gstreamer-vaapi/ GStreamer-VAAPI relies heavily on certain GStreamer infrastructure API that is still in flux such as the OpenGL integration API or the codec parser libraries, and one of the goals of the move was to be able to leverage new developments early and provide tighter integration with the latest developments of those APIs and other graphics-related APIs provided by GStreamer, which should hopefully improve performance even further and in some cases might also provide better stability. Thanks to everyone involved in making this move happen! GStreamer VAAPI: Bug trackingBugs had already been tracked on GNOME bugzilla but will be moved from the gstreamer-vaapi product into a new gstreamer-vaapi component of the GStreamer product in bugzilla. Please file new bugs against the new component in the GStreamer product from now on. GStreamer VAAPI: Pending patchesThe code base has been re-indented to the GStreamer code style, which affected some files more than others. This means that some of the patches in bugzilla might not apply any longer, so if you have any unmerged patches sitting in bugzilla please consider checking if they still apply cleany and refresh them if not. Sorry for any inconvenience this may cause. GStreamer VAAPI: New versioning scheme and supported GStreamer versionsThe version numbering has been changed to match the GStreamer version numbering to avoid confusion: there is a new gstreamer-vaapi 1.6.0 release and a 1.6 branch that is roughly equivalent to the previous 0.7.0 version. Future releases 1.7.x and 1.8.x will be made alongside GStreamer releases. While it was possible and supported by previous releases to build against a whole range of different GStreamer versions (such as 1.2, 1.4, 1.6 or 1.7/1.8), in the future there will only be one target branch, so that git master will track GStreamer git master, 1.8.x will target GStreamer 1.8, and 1.6.x will target the 1.6 series. GStreamer VAAPI: Miscellaneous changesAll GStreamer-VAAPI functionality is now provided solely by its GStreamer elements. There is no more public library exposing GstVaapi API, this API was only ever meant for private use by the elements. Parts of it may be resurrected again in future if needed, but for now it has all been made private. GStreamer-VAAPI now unconditionally uses the codecparser library in gst-plugins-bad instead of shipping its own internal copy. Similarly, it no longer ships its own codec parsers but relies on the upstream codec parser elements. The GStreamer-VAAPI encoder elements have been renamed from vaapiencode_foo to vaapifooenc, so encoders are now called vaapih264enc, vaapih265enc, vaapimpeg2enc, vaapijpegenc, and vaapivp8enc. With this change we now follow the standard names in GStreamer, and the plugin documentation is generated correctly. In the case of the decoders, only the jpeg decoder has been split from the general decoding element vaapidecode: vaapijpegdec. This is the first step to split per codec each decoding element. The vaapijpegdec has also been given marginal rank for the time being. GStreamer VAAPI: New features in 1.8: 10-bit H.265/HEVC decoding supportSupport for decoding 10-bit H.265/HEVC has been added. For the time being this only works in combination with vaapisink though, until support for the P010 video format used internally is added to GStreamer and to the vaGetImage()/vaPutimage() API in the vaapi-intel-driver. Several fixes for memory leaks, build errors, and in the internal video parsing. Finally, vaapisink now posts the unhandled keyboard and mouse events to the application. GStreamer Video 4 Linux SupportColorimetry support has been enhanced even more. It will now properly select default values when not specified by the driver. The range of color formats supported by GStreamer has been greatly improved. Notably, support for multi-planar I420 has been added along with all the new and non-ambiguous RGB formats that got added in recent kernels. The device provider now exposes a variety of properties as found in the udev database. The video decoder is now able to negotiate the downstream format. Elements that are dynamically created from /dev/video* now track changes on these devices to ensure the registry stay up to date. All this and various bug fixes that improve both stability and correctness. GStreamer Editing ServicesAdded APIs to handle asset proxying support. Proxy creation is not the responsibility of GES itself, but GES provides all the needed features for it to be cleanly handled at a higher level. Added support for changing playback rate. This means that now, whenever a user adds a 'pitch' element (as it is the only known element to change playback rate through properties), GES will handle everything internally. This change introduced a new media-duration-factor property in NleObject which will lead to tweaking of seek events so they have the proper playback range to be requested upstream. Construction of NLE objects has been reworked making copy/pasting fully functional and allowing users to set properties on effects right after creating them. Rework of the title source to add more flexibility in text positioning, and letting the user get feedback about rendered text positioning. Report nlecomposition structural issues (coming from user programming mistakes) into ERROR messages on the bus. Add GI/pythyon testsuite in GES itself, making sure the API is working as expected in python, and allowing writing tests faster. The GES validate integration testsuite is now run as part of the GStreamer continuous integration effort. GstValidate
Miscellaneous
Build and Dependencies
Platform-specific improvementsAndroid
OS/X and iOS
Windows
ContributorsAdam Miartus, Alban Bedel, Aleix Conchillo Flaqué, Aleksander Wabik, Alessandro Decina, Alex Ashley, Alex Dizengof, Alex Henrie, Alistair Buxton, Andreas Cadhalpun, Andreas Frisch, André Draszik, Anthony G. Basile, Antoine Jacoutot, Anton Bondarenko, Antonio Ospite, Arjen Veenhuizen, Arnaud Vrac, Arun Raghavan, Athanasios Oikonomou, Aurélien Zanelli, Ben Iofel, Bob Holcomb, Branko Subasic, Carlos Rafael Giani, Chris Bass, Csaba Toth, Daniel Kamil Kozar, Danilo Cesar Lemes de Paula, Dave Craig, David Fernandez, David Schleef, David Svensson Fors, David Waring, David Wu, Duncan Palmer, Edward Hervey, Egor Zaharov, Etienne Peron, Eunhae Choi, Evan Callaway, Evan Nemerson, Fabian Orccon, Florent Thiéry, Florin Apostol, Frédéric Wang, George Kiagiadakis, George Yunaev, Göran Jönsson, Graham Leggett, Guillaume Desmottes, Guillaume Marquebielle, Haihua Hu, Havard Graff, Heinrich Fink, Holger Kaelberer, HoonHee Lee, Hugues Fruchet, Hyunil Park, Hyunjun Ko, Ilya Konstantinov, James Stevenson, Jan Alexander Steffens (heftig), Jan Schmidt, Jason Litzinger, Jens Georg, Jimmy Ohn, Joan Pau Beltran, Joe Gorse, John Chang, John Slade, Jose Antonio Santos Cadenas, Josep Torra, Julian Bouzas, Julien Isorce, Julien Moutte, Justin Kim, Kazunori Kobayashi, Koop Mast, Lim Siew Hoon, Linus Svensson, Lubosz Sarnecki, Luis de Bethencourt, Lukasz Forynski, Manasa Athreya, Marcel Holtmann, Marcin Kolny, Marcus Prebble, Mark Nauwelaerts, Maroš Ondrášek, Martin Kelly, Matej Knopp, Mathias Hasselmann, Mathieu Duponchelle, Matt Crane, Matthew Marsh, Matthew Waters, Matthieu Bouron, Mersad Jelacic, Michael Olbrich, Miguel París Díaz, Mikhail Fludkov, Mischa Spiegelmock, Nicola Murino, Nicolas Dufresne, Nicolas Huet, Nirbheek Chauhan, Ognyan Tonchev, Olivier Crête, Pablo Anton, Pankaj Darak, Paolo Pettinato, Patricia Muscalu, Paul Arzelier, Pavel Bludov, Perry Hung, Peter Korsgaard, Peter Seiderer, Petr Viktorin, Philippe Normand, Philippe Renon, Philipp Zabel, Philip Van Hoof, Philip Withnall, Piotr Drąg, plamot, Polochon_street, Prashant Gotarne, Rajat Verma, Ramiro Polla, Ravi Kiran K N, Reynaldo H. Verdejo Pinochet, Robert Swain, Romain Picard, Roman Nowicki, Ross Burton, Ryan Hendrickson, Santiago Carot-Nemesio, Scott D Phillips, Sebastian Dröge, Sebastian Rasmussen, Sergey Borovkov, Seungha Yang, Sjors Gielen, Song Bing, Sreerenj Balachandran, Srimanta Panda, Stavros Vagionitis, Stefan Sauer, Steven Hoving, Stian Selnes, Suhwang Kim, Thiago Santos, Thibault Saunier, Thijs Vermeir, Thomas Bluemel, Thomas Roos, Thomas Vander Stichele, Tim-Philipp Müller, Tim Sheridan, Ting-Wei Lan, Tom Deseyn, Vanessa Chipirrás Navalón, Víctor Manuel Jáquez Leal, Vincent Dehors, Vincent Penquerc'h, Vineeth T M, Vivia Nikolaidou, Wang Xin-yu (王昕宇), William Manley, Wim Taymans, Wonchul Lee, Xavi Artigas, Xavier Claessens, Youness Alaoui, ... and many others who have contributed bug reports, translations, sent suggestions or helped testing. Bugs fixed in 1.8More than ~700 bugs have been fixed during the development of 1.8. This list does not include issues that have been cherry-picked into the stable 1.6 branch and fixed there as well, all fixes that ended up in the 1.6 branch are also included in 1.8. This list also does not include issues that have been fixed without a bug report in bugzilla, so the actual number of fixes is much higher. Stable 1.8 branchAfter the 1.8.0 release there will be several 1.8.x bug-fix releases which will contain bug fixes which have been deemed suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.8.x bug-fix releases will be made from the git 1.8 branch, which is a stable branch. 1.8.01.8.0 was released on 24 March 2016. 1.8.1The first 1.8 bug-fix release (1.8.1) was released on 20 April 2016. This release only contains bugfixes and it should be safe to update from 1.8.0. Major bugfixes in 1.8.1
For a full list of bugfixes see Bugzilla. Note that this is not the full list of changes. For the full list of changes please refer to the GIT logs or ChangeLogs of the particular modules. 1.8.2The first 1.8 bug-fix release (1.8.2) was released on 9 June 2016. This release only contains bugfixes and it should be safe to update from 1.8.0. Major bugfixes in 1.8.2
For a full list of bugfixes see Bugzilla. Note that this is not the full list of changes. For the full list of changes please refer to the GIT logs or ChangeLogs of the particular modules. Known Issues
1.8.3The third 1.8 bug-fix release (1.8.3) was released on 19 August 2016. This release only contains bugfixes and it should be safe to update from 1.8.x. Major bugfixes in 1.8.3
For a full list of bugfixes see Bugzilla. Note that this is not the full list of changes. For the full list of changes please refer to the GIT logs or ChangeLogs of the particular modules. Known Issues
Schedule for 1.10Our next major feature release will be 1.10, and 1.9 will be the unstable development version leading up to the stable 1.10 release. The development of 1.9/1.10 will happen in the git master branch. The plan for the 1.10 development cycle is yet to be confirmed, but it is expected that feature freeze will be around late July or early August, followed by several 1.9 pre-releases and the new 1.10 stable release in September. 1.10 will be backwards-compatible to the stable 1.8, 1.6, 1.4, 1.2 and 1.0 release series. These release notes have been prepared by Tim-Philipp Müller with contributions from Sebastian Dröge, Nicolas Dufresne, Edward Hervey, Víctor Manuel Jáquez Leal, Arun Raghavan, Thiago Santos, Thibault Saunier, Jan Schmidt and Matthew Waters. License: CC BY-SA 4.0 |
Report a problem on this page. |