Overview of changes in GStreamer 0.20
=====================================
* GStreamer.pm: Announce/link to new GStreamer1 module
* README: Add note for and link to new GStreamer1 module
* copyright.pod: updated copyright year
* perl-GStreamer.doap: update project short description
Overview of changes in GStreamer 0.19
=====================================
* Avoid misusing the macro PL_na, thus preventing potential issues when
GStreamer is used in conjunction with certain XS modules, among them
XML::Parser and String::Approx.
Overview of changes in GStreamer 0.18
=====================================
* Add GStreamer::Buffer::data_ptr() to access the buffer's data without copying
it. (RT#82826)
∗ Make a few tests more robust
* Created %meta_merge which follows v2 of CPAN Meta Spec
- %meta_merge is used for generating metadata via
ExtUtils::MakeMaker/CPAN::Meta
Version 15.0.0 "Duel with the Devil":
Important notes
* mkvmerge, mkvpropedit, GUI's header and chapter editors: the programs will
no longer add most missing Matroska elements that are mandatory but have a
default value in the Matroska specification (e.g. the `TagLanguage` element
with a value of `und` if it isn't present in its `SimpleTag` parent). Due to
this change libEBML v1.3.5 is now required.
New features and enhancements
* MKVToolNix GUI: multiplex tool: added a new entry to the "source files"
context menu labeled "Set destination file name from selected file's
name". It will force the GUI to consider the selected file to be the
reference for automatically setting the file name, no matter which file was
originally added as the first file. It will also force setting the
destination file name once if automatic destination file name generation is
turned off in the preferences. Implements part of 2058.
* MKVToolNix GUI: multiplex tool: added an option in the preferences on
"Multiplexer" → "Output" labeled "Only use the first source file that
contains a video track". If enabled, only source files containing video
tracks will be used for setting the destination file name. Other files that
are added are ignore. Implements the rest of 2058.
* MKVToolNix GUI: header editor: added support for editing the video colour
attributes. Implements the second half of 2038.
* MKVToolNix GUI: header editor: added support for the "video projection"
track header attributes. Part of the implementation of 2064.
* MKVToolNix GUI: job queue: selected jobs can now be move up and down by
pressing the `Ctrl+Up` and `Ctrl+Down` keys. Additionally, push buttons to
move them up & down are shown if the corresponding option is enabled in the
preferences. Implements 2060.
* mkvmerge: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
* mkvinfo: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
* mkvpropedit: added support for editing the video colour
attributes. Implements one half of 2038.
* mkvpropedit: added support for the "video projection" track header
attributes. Part of the implementation of 2064.
Bug fixes
* all: selecting the program's language (e.g. via the `--ui-language`
command-line option or via the GUI's preferences) did not work on Linux &
Unix if the `LANGUAGE` environment variable was set and didn't include the
desired language. Fixes 2070.
* MKVToolNix GUI: removed the keyboard shortcuts for switching between the
different tools (e.g. `Ctrl+Alt+1` for the multiplexer). They overlapped
with basic functionality on keyboards that use an `AltGr` key, e.g. German
ones, where `AltGr+7` emits `{`. As `AltGr+key` is implemented as
`Ctrl+Alt+key` under the hood, this means that `AltGr+7` is really
`Ctrl+Alt+7` which the GUI now took to mean "switch to the job queue"
instead of "insert `{`". Fixes 2056.
* MKVToolNix GUI: header editor: after saving the file the GUI wasn't updating
its internal file modification timestamp. That lead to the GUI wrongfully
claiming that the file had been modified externally when the user wanted to
save the file once more, requiring a reload of the file losing all
modifications made since saving the first time.
* mkvmerge: DTS handling: some source files provide timestamps for audio
tracks only once every `n` audio frames. In such situations mkvmerge was
buffering too much data resulting in a single gap in the timestamps of one
frame duration after frame number `n - 1` (the second audio timestamp read
from the source file was used one output frame too early). Fixes 2071.
* mkvinfo: fixed a null pointer dereference if an `EbmlBinary` element's data
pointer is a null pointer. Fixes 2072.
Build system changes
* configure: added option `--disable-update-check`. If given, the code
checking online for available updates will be disabled. The update check is
enabled and included in the GUI by default.
* libEBML v1.3.5 is now required.
Other changes
* mkvmerge: the option `--colour-matrix` has been renamed to
`--colour-matrix-coefficients` in order to match the specification more
closely. The old option name will continue to be recognized as well.
It looks adobe flash player 27 now requires udev support to play sound,
but at least NetBSD/i386 7.1 with nspluginwrapper can't handle it.
XXX: old vulnerable binaries on upstream will be removed soon
Changes 1.8.3:
Fix build issue on Android
Remove the dummy driver
Add traces for MB rate control / temporal layer
Set verbosity level between {0, 1, 2} by setting the variable LIBVA_MESSAGING_LEVEL
in /etc/libva.conf or by setting the environment variable LIBVA_MESSAGING_LEVEL.
pkgsrc changes:
- Delete 2nd hunk of patches/patch-audio_out_ao__oss.c, it was fixed uptsream
and it is no more needed for 0.27.0.
Changes:
0.27.0
======
Features
--------
Added
~~~~~
- Windows: handle media keys
- libmpv: options: add a thread-safe way to notify option updates
- vd_lavc/vo_opengl: support embedded ICC profiles
- vo: rendering API abstraction for future non-GL video outputs
- vo_opengl: add a gamut warning feature to highlight out-of-gamut colors (--gamut-warning)
- vo_opengl: add direct rendering support (--vd-lavc-dr)
- vo_opengl: implement (faster) compute shader based EWA kernel
- vo_opengl: implement HLG OOTF inverse
- vo_opengl: support HDR peak detection (--hdr-compute-peak)
- vo_opengl: support float input pixel formats
- vo_opengl: support loading custom user textures (#4586)
- vo_opengl: support user compute shaders
Removed
~~~~~~~
- Remove video equalizer handling from vo_direct3d, vo_sdl, vo_vaapi, and vo_xv (GPL, not worth the effort to support legacy VOs)
Options and Commands
--------------------
Added
~~~~~
- macOS: add --no-native-fs option to disable the native macOS fullscreen (#4014)
- player: add --track-auto-selection option
Changed
~~~~~~~
- input: use mnemonic names for mouse buttons, same as Qt: https://doc.qt.io/qt-5/qt.html#MouseButton-enum
- options: change --loop semantics
- player: make --lavfi-complex changeable at runtime
- vf_eq: remove this filter (GPL; uses libavfilter’s eq filter now, with changed semantics)
- video: change --deinterlace behavior
- vo_opengl: generalize HDR tone mapping to gamut mapping, --hdr-tone-mapping → --tone-mapping
Removed
~~~~~~~
- --field-dominance (GPL-only author, no chance of relicensing)
- input: drop deprecated "osd" command
- options: drop --video-aspect-method=hybrid (GPL-only)
Fixes and Minor Enhancements
----------------------------
- TOOLS/autocrop.lua: fix cropdetect black limit for 10-bit videos
- TOOLS/lua/autodeint: update to lavfi-bridge
- TOOLS/lua/status-line: improve and update
- af_lavrresample: don't call swr_set_compensation() unless necessary (#4716)
- ao_oss: fix period_size calculation (#4642)
- ao_rsound: allow setting the host
- audio: fix spdif mode
- filter_kernels: correct spline64 kernel
- macOS: fix media keys input when other Apps steal the priority (#4834)
- macOS: fix the support of multiple renderers (GPU switch) (#2371)
- macOS: remove the standard "Show Tab Bar" menu item
- options: fix --include (#4673)
- player: fix --end with large values (#4650)
- player: fix confusion in audio resync code (#4688)
- player: make refresh seeks slightly more robust (#4757)
- player: readd smi subtitle extension (#4626)
- vd_lavc: change auto-probe order to prefer cuda over vdpau-copy
- vd_lavc: fix device leak with copy-mode hwaccels (#4735)
- vd_lavc: fix hwdec compatibility with yuvj420p formats
- vd_lavc: fix mid-stream hwdec fallback
- vf_vapoursynth: fix inverted sign and restore 10 bit support (#4720)
- video: increase --monitorpixelaspect range
- vo_opengl: adjust the rules for linearization (#4631)
- vo_opengl: scale deband-grain to the signal range
- vo_opengl: tone map on the maximum signal component
- x11: fix that window could be resized when using embedding (#4784)
- ytdl_hook: resolve relative paths when joining segment urls (#4827)
- ytdl_hook: support fragments with relative paths, fixes segmented DASH
Version 1.8.2 - 22.May.2017
* Bump libva to 1.8.2
Version 1.8.1 - 10.Apr.2017
* Bump libva to 1.8.1
Version 1.8.0 - 31.March.2017
* Bump VA API version to 0.40
* API: Change vaRenderPicture semantics that vaRenderPicture no longer deletes the passed buffer automatically.
* API: Add VA_FOURCC_I010 for 10bit surface
* API: Add vaSetErrorCallback and vaSetInfoCallback for error and info message.
* va/drm: Update the support for Mesa Gallium driver
* va/drm: Fix authentication check for /dev/dri/card0
* Move all utilities and tests to libva-utils (https://github.com/01org/libva-utils)
Highlights
new msdk plugin for Intel's Media SDK for hardware-accelerated
video encoding and decoding on Intel graphics hardware on Windows
or Linux.
x264enc can now use multiple x264 library versions compiled for
different bit depths at runtime, to transparently provide support
for multiple bit depths.
videoscale and videoconvert now support multi-threaded scaling
and conversion, which is particularly useful with higher
resolution video.
h264parse will now automatically insert AU delimiters if needed
when outputting byte-stream format, which improves standard
compliance and is needed in particular for HLS playback on
iOS/macOS.
rtpbin has acquired bundle support for incoming streams
Major new features and changes Noteworthy new API
The video library gained support for a number of new video
formats:
GBR_12LE, GBR_12BE, GBRA_12LE, GBRA_12BE (planar 4:4:4
RGB/RGBA, 12 bits per channel) GBRA_10LE, GBRA_10BE (planar
4:4:4:4 RGBA, 10 bits per channel) GBRA (planar 4:4:4:4
ARGB, 8 bits per channel) I420_12BE, I420_12LE (planar 4:2:0
YUV, 12 bits per channel) I422_12BE,I422_12LE (planar 4:2:2
YUV, 12 bits per channel) Y444_12BE, Y444_12LE (planar 4:4:4
YUV, 12 bits per channel) VYUY (another packed 4:2:2 YUV
format)
The high-level GstPlayer API was extended with functions for
taking video snapshots and enabling accurate seeking. It can
optionally also use the still-experimental playbin3 element
now.
New Elements
msdk: new plugin for Intel's Media SDK for hardware-accelerated
video encoding and decoding on Intel graphics hardware on Windows
or Linux. This includes an H.264 encoder/decoder (msdkh264dec,
msdkh264enc), an H.265 encoder/decoder (msdkh265dec, msdkh265enc),
an MJPEG encoder/encoder (msdkmjpegdec, msdkmjpegenc), an MPEG-2
video encoder (msdkmpeg2enc) and a VP8 encoder (msdkvp8enc).
iqa is a new Image Quality Assessment plugin based on DSSIM,
similar to the old (unported) videomeasure element.
The faceoverlay element, which allows you to overlay SVG graphics
over a detected face in a video stream, has been ported from
0.10.
our ffmpeg wrapper plugin now exposes/maps the ffmpeg Opus audio
decoder (avdec_opus) as well as the GoPro CineForm HD / CFHD
decoder (avdec_cfhd), and also a parser/writer for the IVF
format (avdemux_ivf and avmux_ivf).
audiobuffersplit is a new element that splits raw audio buffers
into equal-sized buffers
audiomixmatrix is a new element that mixes N:M audio channels
according to a configured mix matrix.
The timecodewait element got renamed to avwait and can operate
in different modes now.
The opencv video processing plugin has gained a new dewarp
element that dewarps fisheye images.
ttml is a new plugin for parsing and rendering subtitles in
Timed Text Markup Language (TTML) format. For the time being
these elements will not be autoplugged during media playback
however, unless the GST_TTML_AUTOPLUG=1 environment variable
is set. Only the EBU-TT-D profile is supported at this point.
New element features and additions
x264enc can now use multiple x264 library versions compiled for
different bit depths at runtime, to transparently provide support
for multiple bit depths. A new configure parameter
--with-x264-libraries has been added to specify additional paths
to look for additional x264 libraries to load. Background is
that the libx264 library is always compile for one specific bit
depth and the x264enc element would simply support the depth
supported by the underlying library. Now we can support multiple
depths.
x264enc also picks up the interlacing mode automatically from
the input caps now and passed interlacing/TFF information
correctly to the library.
videoscale and videoconvert now support multi-threaded scaling
and conversion, which is particularly useful with higher
resolution video. This has to be enabled explicitly via the
"n-threads" property.
videorate's new "rate" property lets you set a speed factor on
the output stream
splitmuxsink's buffer collection and scheduling was rewritten
to make processing and splitting deterministic; before it was
possible for a buffer to end up in a different file chunk in
different runs. splitmuxsink also gained a new "format-location-full"
signal that works just like the existing "format-location"
signal only that it is also passed the primary stream's first
buffer as argument, so that it is possible to construct the
file name based on metadata such as the buffer timestamp or any
GstMeta attached to the buffer. The new "max-size-timecode"
property allows for timecode-based splitting. splitmuxsink will
now also automatically start a new file if the input caps change
in an incompatible way.
fakesink has a new "drop-out-of-segment" property to not drop
out-of-segment buffers, which is useful for debugging purposes.
identity gained a "ts-offset" property.
both fakesink and identity now also print what kind of metas
are attached to buffers when printing buffer details via the
"last-message" property used by gst-launch-1.0 -v.
multiqueue: made "min-interleave-time" a configurable property.
video nerds will be thrilled to know that videotestsrc's snow
is now deterministic. videotestsrc also gained some new properties
to make the ball pattern based on system time, and invert colours
each second ("animation-mode", "motion", and "flip" properties).
oggdemux reverse playback should work again now. You're welcome.
playbin3 and urisourcebin now have buffering enabled by default,
and buffering message aggregation was fixed.
tcpclientsrc now has a "timeout" property
appsink has gained support for buffer lists. For backwards
compatibility reasons users need to enable this explicitly with
gst_app_sink_set_buffer_list_support(), however. Once activated,
a pulled GstSample can contain either a buffer list or a single
buffer.
splitmuxsrc reverse playback was fixed and handling of sparse
streams, such as subtitle tracks or metadata tracks, was improved.
matroskamux has acquired support for muxing G722 audio; it also
marks all buffers as keyframes now when streaming only audio,
so that tcpserversink will behave properly with audio-only
streams.
qtmux gained support for ProRes 4444 XQ, HEVC/H.265 and CineForm
(GoPro) formats, and generally writes more video stream-related
metadata into the track headers. It is also allows configuration
of the maximum interleave size in bytes and time now. For
fragmented mp4 we always write the tfdt atom now as required
by the DASH spec.
qtdemux supports FLAC, xvid, mp2, S16L and CineForm (GoPro)
tracks now, and generally tries harder to extract more video-related
information from track headers, such as colorimetry or interlacing
details. It also received a couple of fixes for the scenario
where upstream operates in TIME format and feeds chunks to
qtdemux (e.g. DASH or MSE).
audioecho has two new properties to apply a delay only to certain
channels to create a surround effect, rather than an echo on
all channels. This is useful when upmixing from stereo, for
example. The "surround-delay" property enables this, and the
"surround-mask" property controls which channels are considered
surround sound channels in this case.
webrtcdsp gained various new properties for gain control and
also exposes voice activity detection now, in which case it
will post "voice-activity" messages on the bus whenever the
voice detection status changes.
The decklink capture elements for Blackmagic Decklink cards
have seen a number of improvements:
decklinkvideosrc will post a warning message on "no signal"
and an info message when the signal lock has been (re)acquired.
There is also a new read-only "signal" property that can
be used to query the signal lock status. The GAP flag will
be set on buffers that are captured without a signal lock.
The new drop-no-signal-frames will make decklinkvideosrc
drop all buffers that have been captured without an input
signal. The "skip-first-time" property will make the source
drop the first few buffers, which is handy since some devices
will at first output buffers with the wrong resolution
before they manage to figure out the right input format and
decide on the actual output caps.
decklinkaudiosrc supports more than just 2 audio channels
now.
The capture sources no longer use the "hardware" timestamps
which turn out to be useless and instead just use the
pipeline clock directly.
srtpdec now also has a readonly "stats" property, just like
srtpenc.
rtpbin gained RTP bundle support, as used by e.g. WebRTC. The
first rtpsession will have a rtpssrcdemux element inside splitting
the streams based on their SSRC and potentially dispatch to a
different rtpsession. Because retransmission SSRCs need to be
merged with the corresponding media stream the ::on-bundled-ssrc
signal is emitted on rtpbin so that the application can find
out to which session the SSRC belongs.
rtprtxqueue gained two new properties exposing retransmission
statistics ("requests" and "fulfilled-requests")
kmssink will now use the preferred mode for the monitor and
render to the base plane if nothing else has set a mode yet.
This can also be done forcibly in any case via the new
"force-modesetting" property. Furthermore, kmssink now allows
only the supported connector resolutions as input caps in order
to avoid scaling or positioning of the input stream, as kmssink
can't know whether scaling or positioning would be more appropriate
for the use case at hand.
waylandsink can now take DMAbuf buffers as input in the presence
of a compatible Wayland compositor. This enables zero-copy
transfer from a decoder or source that outputs DMAbuf. It will
also set surface opacity hint to allow better rendering
optimization in the compositor.
udpsrc can be bound to more than one interface when joining a
multicast group, this is done by giving a comma separate list
of interfaces such as multicast-iface="eth0,eth1".
Plugin moves
dataurisrc moved from gst-plugins-bad to core
The rawparse plugin containing the rawaudioparse and rawvideoparse
elements moved from gst-plugins-bad to gst-plugins-base. These
elements supersede the old videoparse and audioparse elements.
They work the same, with just some minor API changes. The old
legacy elements still exist in gst-plugins-bad, but may be
removed at some point in the future.
timecodestamper is an element that attaches time codes to video
buffers in form of GstVideoTimeCodeMetas. It had a "clock-source"
property which has now been removed because it was fairly useless
in practice. It gained some new properties however: the
"first-timecode" property can be used to set the inital timecode;
alternatively "first-timecode-to-now" can be set, and then the
current system time at the time the first buffer arrives is
used as base time for the time codes.
Plugin removals
The mad mp1/mp2/mp3 decoder plugin was removed from gst-plugins-ugly,
as libmad is GPL licensed, has been unmaintained for a very
long time, and there are better alternatives available. Use the
mpg123audiodec element from the mpg123 plugin in gst-plugins-ugly
instead, or avdec_mp3 from the gst-libav module which wraps the
ffmpeg library. We expect that we will be able to move mp3
decoding to gst-plugins-good in the next cycle seeing that most
patents around mp3 have expired recently or are about to expire.
The mimic plugin was removed from gst-plugins-bad. It contained
a decoder and encoder for a video codec used by MSN messenger
many many years ago (in a galaxy far far away). The underlying
library is unmaintained and no one really needs to use this
codec any more. Recorded videos can still be played back with
the MIMIC decoder in gst-libav.
Miscellaneous API additions
Request pad name templates passed to gst_element_request_pad()
may now contain multiple specifiers, such as e.g. src_%u_%u.
gst_buffer_iterate_meta_filtered() is a variant of
gst_buffer_iterate_meta() that only returns metas of the requested
type and skips all other metas.
gst_pad_task_get_state() gets the current state of a task in a
thread-safe way.
gst_uri_get_media_fragment_table() provides the media fragments
of an URI as a table of key=value pairs.
gst_print(), gst_println(), gst_printerr(), and gst_printerrln()
can be used to print to stdout or stderr. These functions are
similar to g_print() and g_printerr() but they also support all
the additional format specifiers provided by the GStreamer
logging system, such as e.g. GST_PTR_FORMAT.
a GstParamSpecArray has been added, for elements who want to
have array type properties, such as the audiomixmatrix element
for example. There are also two new functions to set and get
properties of this type from bindings:
gst_util_set_object_array() gst_util_get_object_array()
various helper functions have been added to make it easier to
set or get GstStructure fields containing caps-style array or
list fields from language bindings (which usually support
GValueArray but don't know about the GStreamer specific fundamental
types):
gst_structure_get_array() gst_structure_set_array()
gst_structure_get_list() gst_structure_set_list()
a new 'dynamic type' registry factory type was added to register
dynamically loadable GType types. This is useful for automatically
loading enum/flags types that are used in caps, such as for
example the GstVideoMultiviewFlagsSet type used in multiview
video caps.
there is a new GstProxyControlBinding for use with GstController.
This allows proxying the control interface from one property
on one GstObject to another property (of the same type) in
another GstObject. So e.g. in parent-child relationship, one
may need to call gst_object_sync_values() on the child and have
a binding (set elsewhere) on the parent update the value. This
is used in glvideomixer and glsinkbin for example, where
sync_values() on the child pad or element will call sync_values()
on the exposed bin pad or element.
Note that this doesn't solve GObject property forwarding, that
must be taken care of by the implementation manually or using
GBinding.
gst_base_parse_drain() has been made public for subclasses to
use.
`gst_base_sink_set_drop_out_of_segment()' can be used by
subclasses to prevent GstBaseSink from dropping buffers that
fall outside of the segment.
gst_calculate_linear_regression() is a new utility function to
calculate a linear regression.
gst_debug_get_stack_trace is an easy way to retrieve a stack
trace, which can be useful in tracer plugins.
allocators: the dmabuf allocator is now sub-classable, and there
is a new GST_CAPS_FEATURE_MEMORY_DMABUF define.
video decoder subclasses can use the newly-added function
gst_video_decoder_allocate_output_frame_with_params() to pass
a GstBufferPoolAcquireParams to the buffer pool for each buffer
allocation.
the video time code API has gained a dedicated GstVideoTimeCodeInterval
type plus related API, including functions to add intervals to
timecodes.
There is a new libgstbadallocators-1.0 library in gst-plugins-bad,
which may go away again in future releases once the
GstPhysMemoryAllocator interface API has been validated by more
users and was moved to libgstallocators-1.0 from gst-plugins-base.
GstPlayer
New API has been added to:
get the number of audio/video/subtitle streams:
gst_player_media_info_get_number_of_streams()
gst_player_media_info_get_number_of_video_streams()
gst_player_media_info_get_number_of_audio_streams()
gst_player_media_info_get_number_of_subtitle_streams()
enable accurate seeking: gst_player_config_set_seek_accurate()
and gst_player_config_get_seek_accurate()
get a snapshot image of the video in RGBx, BGRx, JPEG, PNG or
native format: gst_player_get_video_snapshot()
selecting use of a specific video sink element
(gst_player_video_overlay_video_renderer_new_with_sink())
If the environment variable GST_PLAYER_USE_PLAYBIN3 is set,
GstPlayer will use the still-experimental playbin3 element and
the GstStreams API for playback.
Miscellaneous changes
video caps for interlaced video may contain an optional
"field-order" field now in the case of interlaced-mode=interleaved
to signal that the field order is always the same throughout
the stream. This is useful to signal to muxers such as mp4mux.
The new field is parsed from/to GstVideoInfo of course.
video decoder and video encoder base classes try harder to proxy
interlacing, colorimetry and chroma-site related fields in caps
properly.
The buffer stored in the PROTECTION events is now left unchanged.
This is a change of behaviour since 1.8, especially for the
mssdemux element which used to decode the base64 parsed data
wrapped in the protection events emitted by the demuxer.
PROTECTION events can now be injected into the pipeline from
the application; source elements deriving from GstBaseSrc will
forward those downstream now.
The DASH demuxer is now correctly parsing the MSPR-2.0
ContentProtection nodes and emits Protection events accordingly.
Applications relying on those events might need to decode the
base64 data stored in the event buffer before using it.
The registry can now also be disabled by setting the environment
variable GST_REGISTRY_DISABLE=yes, with similar effect as the
GST_DISABLE_REGISTRY compile time switch.
Seeking performance with gstreamer-vaapi based decoders was
improved. It would recreate the decoder and surfaces on every
seek which can be quite slow.
more robust handling of input caps changes in videoaggregator-based
elements such as compositor.
Lots of adaptive streaming-related fixes across the board (DASH,
MSS, HLS). Also:
mssdemux, the Microsoft Smooth Streaming demuxer, has seen
various fixes for live streams, duration reporting and
seeking.
The DASH manifest parser now extracts MS PlayReady
ContentProtection objects from manifests and sends them
downstream as PROTECTION events. It also supports multiple
Period elements in external xml now.
gst-libav was updated to ffmpeg 3.3 but should still work with
any 3.x version.
GstEncodingProfile has been generally enhanced so it can, for
example, be used to get possible profiles for a given file
extension. It is now possible to define profiles based on element
factory names or using a path to a .gep file containing a
serialized profile.
audioconvert can now do endianness conversion in-place. All
other conversions still require a copy, but e.g. sign conversion
and a few others could also be implemented in-place now.
The new, experimental playbin3 and urisourcebin elements got
many bugfixes and improvements and should generally be closer
to a full replacement of the old elements.
interleave now supports > 64 channels.
OpenCV elements, grabcut and retinex has been ported to use
GstOpencvVideoFilter base class, increasing code reuse and
fixing buffer map/unmap issues. Redundant copie of images has
been removed in edgedetect, cvlaplace and cvsobel. This comes
with various cleanup and Meson support.
OpenGL integration
As usual the GStreamer OpenGL integration library has seen
numerous fixes and performance improvements all over the place,
and is hopefully ready now to become API stable and be moved
to gst-plugins-base during the 1.14 release cycle.
The GStreamer OpenGL integration layer has also gained support
for the Vivante EGL FB windowing system, which improves performance
on platforms such as Freescale iMX.6 for those who are stuck
with the proprietary driver. The qmlglsink element also supports
this now if Qt is used with eglfs or wayland backend, and it
works in conjunction with gstreamer-imx of course.
various qmlglsrc improvements
Tracing framework and debugging improvements
New tracing hooks have been added to track GstMiniObject and
GstObject ref/unref operations.
The memory leaks tracer can optionally use this to retrieve
stack traces if enabled with e.g.
GST_TRACERS=leaks(filters="GstEvent,GstMessage",stack-traces-flags=full)
The GST_DEBUG_FILE environment variable, which can be used to
write the debug log output to a file instead of printing it to
stderr, can now contain a name pattern, which is useful for
automated testing and continuous integration systems. The
following format specifiers are supported:
%p: will be replaced with the PID %r: will be replaced with
a random number, which is useful for instance when running
two processes with the same PID but in different containers.
Tools
gst-inspect-1.0 can now list elements by type with the new
--types command-line option, e.g. gst-inspect-1.0 --types=Audio/Encoder
will show a list of audio encoders.
gst-launch-1.0 and gst_parse_launch() have gained a new operator
(:) that allows linking all pads between two elements. This is
useful in cases where the exact number of pads or type of pads
is not known beforehand, such as in the uridecodebin : encodebin
scenario, for example. In this case, multiple links will be
created if the encodebin has multiple profiles compatible with
the output of uridecodebin.
gst-device-monitor-1.0 now shows a gst-launch-1.0 snippet for
each device that shows how to make use of it in a gst-launch-1.0
pipeline string.
GStreamer RTSP server
The RTSP server now also supports Digest authentication in
addition to Basic authentication.
The GstRTSPClient class has gained a pre-*-request signal and
virtual method for each client request type, emitted in the
beginning of each rtsp request. These signals or virtual methods
let the application validate the requests, configure the
media/stream in a certain way and also generate error status
codes in case of an error or a bad request.
GStreamer VAAPI
GstVaapiDisplay now inherits from GstObject, thus the VA display
logging messages are better and tracing the context sharing is
more readable.
When uploading raw images into a VA surfaces now VADeriveImages
are tried fist, improving the upload performance, if it is
possible.
The decoders and the post-processor now can push dmabuf-based
buffers to downstream under certain conditions. For example:
GST_GL_PLATFORM=egl gst-play-1.0 video-sample.mkv
--videosink=glimagesink
Refactored the wrapping of VA surface into gstreamer memory,
adding lock when mapping and unmapping, and many other fixes.
Now vaapidecodebin loads vaapipostproc dynamically. It is
possible to avoid it usage with the environment variable
GST_VAAPI_DISABLE_VPP=1.
Regarding encoders: they have primary rank again, since they
can discover, in run-time, the color formats they can use for
upstream raw buffers and caps renegotiation is now possible.
Also the encoders push encoding info downstream via tags.
About specific encoders: added constant bit-rate encoding mode
for VP8 and H265 encoder handles P010_10LE color format.
Regarding decoders, flush operation has been improved, now the
internal VA encoder is not recreated at each flush. Also there
are several improvements in the handling of H264 and H265
streams.
VAAPI plugins try to create their on GstGL context (when
available) if they cannot find it in the pipeline, to figure
out what type of VA Display they should create.
Regarding vaapisink for X11, if the backend reports that it is
unable to render correctly the current color format, an internal
VA post-processor, is instantiated (if available) and converts
the color format.
GStreamer Editing Services and NLE
Enhanced auto transition behaviour
Fix some races in nlecomposition
Allow building with msvc
Added a UNIX manpage for ges-launch
API changes:
Added ges_deinit (allowing the leak tracer to work properly)
Added ges_layer_get_clips_in_interval Finally hide internal
symbols that should never have been exposed
GStreamer validate
Port gst-validate-launcher to python 3
gst-validate-launcher now checks if blacklisted bugs have been
fixed on bugzilla and errors out if it is the case
Allow building with msvc
Add ability for the launcher to run GStreamer unit tests
Added a way to activate the leaks tracer on our tests and fix
leaks
Make the http server multithreaded
New testsuite for running various test scenarios on the DASH-IF
test vectors
GStreamer Python Bindings
Overrides has been added for IntRange, Int64Range, DoubleRange,
FractionRange, Array and List. This finally enables Python
programmers to fully read and write GstCaps objects.
Build and Dependencies
Meson build files are now disted in tarballs, for jhbuild and
so distro packagers can start using it. Note that the Meson-based
build system is not 100% feature-equivalent with the autotools-based
one yet.
Some plugin filenames have been changed to match the plugin
names: for example the file name of the encoding plugin in
gst-plugins-base containing the encodebin element was
libgstencodebin.so and has been changed to libgstencoding.so.
This affects only a handful of plugins across modules.
Developers who install GStreamer from source and just do make
install after updating the source code, without doing make
uninstall first, will have to manually remove the old installed
plugin files from the installation prefix, or they will get
'Cannot register existing type' critical warnings.
Most of the docbook-based documentation (FAQ, Application
Development Manual, Plugin Writer's Guide, design documents)
has been converted to markdown and moved into a new gst-docs
module. The gtk-doc library API references and the plugins
documentation are still built as part of the source modules
though.
GStreamer core now optionally uses libunwind and libdw to
generate backtraces. This is useful for tracer plugins used
during debugging and development.
There is a new libgstbadallocators-1.0 library in gst-plugins-bad
(which may go away again in future releases once the
GstPhysMemoryAllocator interface API has been validated by more
users).
gst-omx and gstreamer-vaapi modules can now also be built using
the Meson build system.
The qtkitvideosrc element for macOS was removed. The API is
deprecated since 10.9 and it wasn't shipped in the binaries
since a few releases.
Platform-specific improvements Android
androidmedia: add support for VP9 video decoding/encoding and
Opus audio decoding (where supported)
OS/X and iOS
avfvideosrc, which represents an iPhone camera or, on a Mac, a
screencapture session, so far allowed you to select an input
device by device index only. New API adds the ability to select
the position (front or back facing) and device-type (wide angle,
telephoto, etc.). Furthermore, you can now also specify the
orientation (portrait, landscape, etc.) of the videostream.
Bugs fixed in 1.12
More than 635 bugs have been fixed during the development of 1.12.
This list does not include issues that have been cherry-picked into
the stable 1.10 branch and fixed there as well, all fixes that ended
up in the 1.10 branch are also included in 1.12.
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.12 branch
After the 1.12.0 release there will be several 1.12.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.12.x bug-fix releases
will be made from the git 1.12 branch, which is a stable branch.
1.12.0
1.12.0 was released on 4th May 2017.
1.12.1
The first 1.12 bug-fix release (1.12.1) was released on 20 June
2017. This release only contains bugfixes and it should be safe to
update from 1.12.x. Major bugfixes in 1.12.1
Various fixes for crashes, assertions, deadlocks and memory
leaks Fix for regression when seeking to the end of ASF files
Fix for regression in (raw)videoparse that caused it to omit
video metadata Fix for regression in discoverer that made it
show more streams than actually available Numerous bugfixes to
the adaptive demuxer base class and the DASH demuxer Various
playbin3/urisourcebin related bugfixes Vivante DirectVIV (imx6)
texture uploader works with single-plane (e.g. RGB) video formats
now Intel Media SDK encoder now outputs valid PTS and keyframe
flags OpenJPEG2000 plugin can be loaded again on MacOS and
correctly displays 8 bit RGB images now Fixes to DirectSound
source/sink for high CPU usage and wrong latency/buffer size
calculations gst-libav was updated to ffmpeg n3.3.2 ... and
many, many more!
1.12.2
The second 1.12 bug-fix release (1.12.2) was released on 14 July
2017. This release only contains bugfixes and it should be safe to
update from 1.12.x. Major bugfixes in 1.12.2
Various fixes for crashes, assertions, deadlocks and memory
leaks Regression fix for playback of live HLS streams Regression
fix for crash when playing back a tunneled RTSP stream Regression
fix for playback of RLE animations in MOV containers Regression
fix for RTP GSM payloading producing corrupted output Major
bugfixes to the MXF demuxer, mostly related to seeking and fixes
to the frame reordering handling in the MXF muxer and demuxer
Fix for playback of mono streams on MacOS More fixes for index
handling of ASF containers Various fixes to adaptivedemux, DASH
and HLS demuxers Fix deadlock in gstreamer-editing-services
during class initialization ... and many, many more!
- avcodec/hevc_ps: improve check for missing default display window bitstream
- avcodec/hevc_ps: Fix c?_qp_offset_list size
- avcodec/shorten: Move buffer allocation and offset init to end of read_header()
- avcodec/jpeg2000dsp: Fix multiple integer overflows in ict_int()
- avcodec/hevcdsp_template: Fix undefined shift in put_hevc_pel_bi_w_pixels
- avcodec/diracdec: Fix overflow in DC computation
- avcodec/scpr: optimize shift loop.
- avcodec/dirac_vlc: limit res_bits in APPEND_RESIDUE()
- libavcodec/h264_parse: don't use uninitialized value when chroma_format_idc==0
- avformat/asfdec: Fix DoS in asf_build_simple_index()
- avformat/mov: Fix DoS in read_tfra()
- avcodec/dirac_vlc: Fix invalid shift in ff_dirac_golomb_read_32bit()
- avcodec/dirac_dwt: Fix multiple overflows in 9/7 lifting
- avcodec/diracdec: Fix integer overflow in INTRA_DC_PRED()
- avformat/mxfdec: Fix Sign error in mxf_read_primer_pack()
- avformat/mxfdec: Fix DoS issues in mxf_read_index_entry_array()
- avformat/nsvdec: Fix DoS due to lack of eof check in nsvs_file_offset loop.
- avcodec/snowdec: Fix integer overflow in decode_subband_slice_buffered()
- avcodec/hevc_ps: Fix undefined shift in pcm code
- avcodec/sbrdsp_fixed: Fix undefined overflows in autocorrelate()
- avformat/mvdec: Fix DoS due to lack of eof check
- avformat/rl2: Fix DoS due to lack of eof check
- avformat/rmdec: Fix DoS due to lack of eof check
- avformat/cinedec: Fix DoS due to lack of eof check
- avformat/asfdec: Fix DoS due to lack of eof check
- avformat/hls: Fix DoS due to infinite loop
- ffprobe: Fix NULL pointer handling in color parameter printing
- ffprobe: Fix null pointer dereference with color primaries
- avcodec/hevc_ps: Check delta_pocs in ff_hevc_decode_short_term_rps()
- avformat/rtpdec_h264: Fix heap-buffer-overflow
- avformat/aviobuf: Fix signed integer overflow in avio_seek()
- avformat/mov: Fix signed integer overflows with total_size
- avcodec/utils: Fix signed integer overflow in rc_initial_buffer_occupancy initialization
- avcodec/aacdec_template: Fix running cleanup in decode_ics_info()
- avcodec/me_cmp: Fix crashes on ARM due to misalignment
- avcodec/pixlet: Fixes: undefined shift in av_mod_uintp2()
- avcodec/dirac_dwt_template: Fix integer overflow in vertical_compose53iL0()
- avcodec/fic: Fixes signed integer overflow
- avcodec/snowdec: Fix off by 1 error
- avcodec/pixlet: fixes integer overflow in read_highpass()
- avcodec/zmbv: Check decomp_size
- avcodec/diracdec: Fixes integer overflow
- avcodec/diracdec: Check perspective_exp and zrs_exp.
- avcodec/ffv1dec_template: Fix undefined shift
- avcodec/mpeg4videodec: Clear mcsel before decoding an image
- avcodec/dirac_dwt: Fixes integer overflows in COMPOSE_DAUB97*
- avcodec/aacdec_fixed: fix invalid shift in predict()
- avcodec/h264_slice: Fix overflow in slice offset
- avformat/utils: fix memory leak in avformat_free_context
- swscale: fix gbrap16 alpha channel issues
- avcodec/h264idct_template: Fix integer overflow in ff_h264_idct_add()
- avcodec/diracdsp: fix integer overflow
- avcodec/diracdec: Check weight_log2denom
- avcodec/nvenc: only push cuda context on encoder close if encoder exists
- avfilter/vf_ssim: fix temp size calculation
- avcodec/dirac_dwt: Fix multiple integer overflows in COMPOSE_DD97iH0()
- avcodec/diracdec: Fix integer overflow in divide3()
- avcodec/takdec: Fix integer overflow in decode_subframe()
- avformat/rtmppkt: Convert ff_amf_get_field_value() to bytestream2
- avformat/rtmppkt: Convert ff_amf_tag_size() to bytestream2
- avcodec/diracdec: Fix integer overflow in signed multiplication in UNPACK_ARITH()
- avcodec/pixlet: Simplify nbits computation
- avcodec/dnxhddec: Move mb height check out of non hr branch
- avcodec/hevc_ps: fix integer overflow in log2_parallel_merge_level_minus2
- avformat/oggparsecelt: Do not re-allocate os->private
- avcodec/ylc: Fix shift overflow
- avcodec/aacps: Fix multiple integer overflow in map_val_34_to_20()
- avcodec/aacdec_fixed: fix: left shift of negative value -1
- avcodec/dirac_vlc: Fix undefined shift
- doc/filters: typo in frei0r
- avcodec/cfhd: Fix decoding regression due to height check
- avcodec/aacdec_template (fixed point): Check gain in decode_cce() to avoid undefined shifts later
- avcodec/ffv1dec_template: Fix signed integer overflow
- avcodec/aacdec_template: Fix undefined integer overflow in apply_tns()
- avcodec/magicyuv: Check that vlc len is not too large
- avcodec/mjpegdec: Clip DC also on the negative side.
- avcodec/aacps (fixed point): Fix multiple signed integer overflows
- avcodec/ylc: Fix vlc of 31 bits
- avcodec/sbrdsp_fixed: Fix integer overflow in sbr_hf_apply_noise()
- avcodec/hevcdec: do not let updated extradata corrupt state
- avcodec/wavpack: Fix invalid shift
- avcodec/h264_slice: Fix signed integer overflow
- avcodec/hevc_ps: Fix integer overflow with beta/tc offsets
- avcodec/cfhd: Fix invalid left shift of negative value
- avcodec/vb: Check vertical GMC component before multiply
- avcodec/hevcdec: do basic validity check on delta_chroma_weight and offset
- avcodec/jpeg2000dwt: Fix integer overflow in dwt_decode97_int()
- avcodec/apedec: Fix integer overflow
- avcodec/wavpack: Fix integer overflow in wv_unpack_stereo()
- avcodec/hevc_ps: Fix max_dec_buffer check
- avcodec/mpeg4videodec: Fix GMC with videos of dimension 1
- avcodec/wavpack: Fix integer overflow
- avcodec/takdec: Fix integer overflow
- avcodec/tiff: Update pointer only when the result is used
- avcodec/cfhd: Check bpc before setting bpc in context
- avcodec/cfhd: Fix undefined shift
- avcodec/hevc_filter: Fix invalid shift
- avcodec/mpeg4videodec: Fix overflow in virtual_ref computation
- avcodec/lpc: signed integer overflow in compute_lpc_coefs() (aacdec_fixed)
- avcodec/wavpack: Fix undefined integer negation
- avcodec/aacdec_fixed: Check s for being too small
- avcodec/htmlsubtitles: Replace very slow redundant sscanf() calls by cleaner and faster code
- avcodec/h264: Fix mix of lossless and lossy MBs decoding
- avcodec/h264_mb: Fix 8x8dct in lossless for new versions of x264
- avcodec/h264_cabac: Fix CABAC+8x8dct in 4:4:4
- avcodec/takdec: Fixes: integer overflow in AV_SAMPLE_FMT_U8P output
- avcodec/jpeg2000dsp: Reorder operations in ict_int() to avoid 2 integer overflows
- avcodec/hevcpred_template: Fix left shift of negative value
- avcodec/hevcdec: Fix signed integer overflow in decode_lt_rps()
- avcodec/jpeg2000dec: Check nonzerobits more completely
- avcodec/shorten: Sanity check maxnlpc
- avcodec/truemotion2: Move skip computation after checks
- avcodec/jpeg2000: Fixes integer overflow in ff_jpeg2000_ceildivpow2()
- avcodec/dnxhd_parser: Do not return invalid value from dnxhd_find_frame_end() on error
- avcodec/hevcdec: Check nb_sps
- avcodec/hevc_refs: Check nb_refs in add_candidate_ref()
- avcodec/mpeg4videodec: Check sprite delta upshift against overflowing.
- avcodec/mpeg4videodec: Fix integer overflow in num_sprite_warping_points=2 case
- avcodec/aacsbr_fixed: Check shift in sbr_hf_assemble()
- avcodec/sbrdsp_fixed: Return an error from sbr_hf_apply_noise() if operations are impossible
- avcodec/libvpxdec: Check that display dimensions fit in the storage dimensions
- avcodec/jpeg2000dwt: Fix runtime error: left shift of negative value -123
- avcodec/wavpack: Fix runtime error: signed integer overflow: 1886191616 + 277872640 cannot be represented in type 'int'
- avcodec/snowdec: Fix runtime error: left shift of negative value -1
- avcodec/aacdec_fixed: Fix runtime error: left shift of negative value -1297616
- avcodec/tiff: Fix leak of geotags[].val
- avcodec/ra144: Fix runtime error: signed integer overflow: -2200 * 1033073 cannot be represented in type 'int'
- avcodec/flicvideo: Fix runtime error: signed integer overflow: 4864 * 459296 cannot be represented in type 'int'
- avcodec/cfhd: Check band parameters before storing them
- avcodec/h264_parse: Check picture structure when initializig weight table
- avcodec/indeo4: Check remaining data in Pic hdr extension parsing code
- avcodec/ac3dec_fixed: Fix multiple runtime error: signed integer overflow: -39271008 * 59 cannot be represented in type 'int'
- lavc/aarch64/simple_idct: fix idct_col4_top coefficient
pkgsrc changes:
- Adjust SUBST `audio' class after recent ao_oss changes
- Backport a patch to fix issue #4642 (`ao_oss: fix a dumb calculation').
Changes:
Release 0.26.0
==============
VA-API/VDPAU hardware decoding now requires FFmpeg > 3.2.
DVB support is disabled by default since it does not work with some older kernels.
Built-in V4L TV support is disabled by default. av://v4l2 can be used instead.
Support for C plugins is now enabled by default (#4491).
Many more parts of the player are now licensed under LGPL, see Copyright file.
Thanks to all contributors who have agreed to relicensing of their changes!
See #2033 for details.
Features
--------
Added
~~~~~
- Universal Windows Plaform (UWP) support (libmpv only)
- csputils: implement sony s-gamut
- js: add javascript scripting support using MuJS
See DOCS/man/javascript.rst for more details
- vo_opengl: add new HDR tone mapping algorithm (mobius, now default)
- vo_opengl: hwdec_cuda: Support separate decode and display devices
- vo_opengl: implement sony s-log1 and s-log2 trc
- vo_opengl: implement support for OOTFs and non-display referred content
Removed
~~~~~~~
- vf_dlopen: remove this filter
Options and Commands
--------------------
Added
~~~~~
- vo_opengl: add --tone-mapping-desaturate
- vo_opengl: support tone-mapping-param for `clip`
- ytdl_hook: add option to exclude URLs from being parsed
Changed
~~~~~~~
- allow setting profile option with libmpv
- audio: move replaygain control to top-level options
- external_files: parse ~ in --{sub,audio}-paths
- options: change --sub-fix-timing default to no (#4484)
- options: expose string list actions for --sub-file option
- options: slight cleanup of --sub-ass-style-override
* signfs → scale
* --sub-ass-style-override → --sub-ass-override
- renamed the HDR TRCs `st2084` and `std-b67` to `pq` and `hlg` respectively
- replace vf_format's `peak` suboption by `sig-peak`, which is relative to the reference white level instead of in cd/m^2
- the following options change to append-by-default (and possibly separator):
* --script
- video: change --video-aspect-method default value to `container`
Deprecated
~~~~~~~~~~
- m_option: deprecate multiple items for -add etc.
- player: deprecate "osd" command
- --audio-file-paths => --audio-file-path
- --sub-paths => --sub-file-path
- --opengl-shaders => --opengl-shader
- --sub-paths => --sub-file-paths
- the following options are deprecated for setting via API:
* "script" (use "scripts")
* "sub-file" (use "sub-files")
* "audio-file" (use "audio-files")
* "external-file" (use "external-files")
(the compatibility hacks for this will be removed after this release)
Removed
~~~~~~~
- chmap: remove misleading "downmix" channel layout name (#4545)
- demux_lavf: remove --demuxer-lavf-cryptokey option (#4579)
- input.conf: drop TV/DVB bindings
- options: remove remaining deprecated audio device selection options
* --alsa-device
* --oss-device
* --coreaudio-exclusive
* --pulse-sink
* --rsound-host/--rsound-port
* --ao-sndio-device
* --ao-wasapi-exclusive
* --ao-wasapi-device
- remove option --target-brightness
- remove property "video-params/nom-peak"
Fixes and Minor Enhancements
----------------------------
- TOOLS/lua/autoload.lua: actually sort files case insensitive (#4398)
- TOOLS/lua/autoload.lua: ignores all files starting with "."
- ao_openal: kill off device listing (#4311)
- ao_pulse: reorder format choice to prefer float and S32 over S16 as fallback format
- ao_wasapi: try correct initial format (#4582)
- command: add missing change notification for playlist-shuffle (#4573)
- demux_disc: fix bluray subtitle language retrieval (#4611)
- demux_mkv: fix alpha with vp9 + libvpx
- demux_mkv: support FFmpeg A_MS/ACM extensions
- ipc-unix: don’t truncate the message on EAGAIN (#4452)
- ipc: raise json nesting limit (#4394)
- macOS: fix mpv-wrapper.sh when used with csh or tcsh shell
- macOS: properly unhide Dock when quitting during System fs animation
- mpv_identify: replace deprecated fps property (#4550)
- options/path: fallback to USERPROFILE if HOME isn't set
- player: close audio device on no audio track
- player: fix potential segfault when playing dvd:// with DVD disabled (#4393)
- player: prevent seek position to jump around adjacent keyframes, e.g. when dragging the OSC bar on short videos (#4183)
- vo_opengl: bump up SHADER_MAX_HOOKS and MAX_TEXTURE_HOOKS to 64
- vo_opengl: correct off-by-one in scale=oversample
- vo_opengl: do not use vaapi-over-GLX (#4555)
- vo_opengl: fall back to ordered dither instead of blowing up (#4519)
- vo_opengl: tone map in linear XYZ instead of RGB
- x11: add 128x128 sized icon support
- ytdl_hook: add a header to support geo-bypass
- ytdl_hook: don't override start time set by saved state
- ytdl_hook: don't override user-set start time
- ytdl_hook: treat single-entry playlists as a single video