Android 10 (API 29) added support for isHardwareAccelerated() to
MediaCodecInfo to detect whether a particular MediaCodec is backed by
hardware or not. We can now use that to ensure that the video hw-codec
is PRIMARY+1 on Android, since using a software codec for video is
simply not feasible most of the time.
If we're not able to detect isHardwareAccelerated(), perhaps because
the Android API version is too old, we try to use the codec name as
a fallback.
Also rank PRIMARY+1 the c2.android c2.exynos and c2.amlogic audio
codecs alongside OMX.google, because they are known-good.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9225>
Most of the messages can be printed with INFO threshold since they are
only printed on plugin registration.
Fix printing of codec caps, since GST_PTR_FORMAT truncates the output
in almost every case that I saw.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9225>
We never implemented correctly the selection of memories in a buffer given the
plane.
This patch uses gst_buffer_find_memory() for that. The offset is checked via the
video meta either in the input and output buffers, or the default offset given
the format and size.
This patch also requests the video meta option for the output buffers.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9219>
This patch adds the possibility to attach video metas to allocated buffers if
API users request that option.
The main reason to add this meta is for the future usage of
gst_buffer_find_memory(), where the requested offset determines the memory
index.
In the case of multi-memory Vulkan images the offset of every component is
larger than the default offset determined by the format and frame size, because
of the buffer minimum size and memory alignment determined by the used driver.
Then, the offset is set in the buffer video meta.
In the case of single memory Vulkan images, the default offset is set in the
video meta.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9219>
It is entirely possible that the in progress may still provide some state
updates until the ICE object is destroyed, these state updates should
not really be done when webrtcbin is in the process of destroying itself
and access freed data.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9216>
This proved to be helpful for previous protocol experiments, so let's
upstream it. Inspired by the corresponding code in Weston.
Protocols need to be placed in a `protocols` subdirectory and can be
declared in the following way in `meson.build`:
```
['color-management-v1', 'internal' ],
```
Note the `v1` being part of the name.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9186>
Using the Wayland color-management and color-representation protocols.
The implementation queries supported values from the compositors and tries
to convert them into GstVideoColorimetry values. It currently *does not*
pass these upstream to decoders etc. as GstCaps for negotiation.
On the Wayland side it uses named transfer functions, named primaries,
matrices and ranges. The straight alpha mode is also set if supported
by the compositor.
On setting caps it translates the GstVideoColorimetry from the GstVideoInfo
back to into a Wayland parametric image description and color representation
for the video surface if possible. If a colorimetry is not fully
support, we bail out and if wayland objects already exist they get reset or
deleted.
Note that not all GstVideoColorimetry values are implemented yet.
Useful debug options: GST_DEBUG=wlwindow:4,wldisplay:4
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6830>
Merge request !5651 introduced a regression for uploading VulkanBuffer. It can
be verified by
gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12 ! vulkanupload ! \
video/x-raw\(memory:VulkanBuffer\) ! fakesink
Nobody has complained about this regression, so we assume it's a very niche
use-case.
This patch solve the regression by instantiating a different buffer pool
depending on the output cap features, and configuring it accordingly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9218>
Change so that the handling of NAL unit that can't be parsed when using
AU alignment is the same as when using NAL alignment, ie drop the data
if it can't be parsed.
If the AU contains more than one NAL unit any correctly parsed NAL unit
in the AU is kept.
Fixes#4436
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8976>
If using NAL aligment and only dropping part of the AU, the size
argument given to gst_base_parse_finish_frame was wrong and this assert
in gst_base_parse_finish_frame hit
'gst_adapter_available (parse->priv->adapter) >= size' failed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8976>
The LCEVC_ReceiveDecoderBase() and LCEVC_ReceiveDecoderPicture() APIs from the
LCEVCdec SDK can return LCEVC_Error if the enhancement data is wrong. This
change improves the lcevcdec element to check for those errors and stop the
pipeline when that happens.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9057>