platform/upstream/gstreamer.git
2 years agovpxenc: conver input pts to running time
Guillaume Desmottes [Wed, 11 May 2022 13:37:44 +0000 (15:37 +0200)]
vpxenc: conver input pts to running time

The input pts needs to be strictly increasing, see vpx_codec_encode() doc, so convert it to
running time as we don't want to reset the encoder for each segment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2405>

2 years agovpxenc: fix crash if encoder produces unmatching ts
Guillaume Desmottes [Wed, 11 May 2022 13:18:42 +0000 (15:18 +0200)]
vpxenc: fix crash if encoder produces unmatching ts

If for some reason the encoder produces frames with a pts higher than
the input one, we were dropping all the video encoder frames and ended
up crashing when trying to access the pts of a NULL pointer returned by
gst_video_encoder_get_oldest_frame().

I hit this scenario by feeding a decreasing timestamp to vp8enc which
seem to confuse the encoder.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2405>

2 years agomxfdemux: Handle files produced by legacy FFmpeg
Edward Hervey [Thu, 12 May 2022 05:23:29 +0000 (07:23 +0200)]
mxfdemux: Handle files produced by legacy FFmpeg

Until March 2022, the FFmpeg MXF muxer would write the various index table
segments with the same instance ID, which should only be used if it is a
duplicate/repeated table.

In order to cope with those, we first compare the other index table segment
properties (body/index SID, start position) before comparing the instance
ID. This will ensure that we don't consider them as duplicate, but can still
detect "real" duplicates (which would have the same other properties).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2407>

2 years agogl/context: disable timer queries for ARM Mali-G52
Matthew Waters [Mon, 9 May 2022 06:21:55 +0000 (16:21 +1000)]
gl/context: disable timer queries for ARM Mali-G52

Performing a timer query with a default framebuffer that is incomplete
(from using a surfaceless context) will produce GL errors.  Disable the
timer query on this platform to avoid the errors.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2396>

2 years agova: basedec: Always select first available format.
Víctor Manuel Jáquez Leal [Tue, 3 May 2022 14:23:09 +0000 (16:23 +0200)]
va: basedec: Always select first available format.

If the stream chroma doesn't match with any video format in the source
caps template (generated from va config surface formats) instead of
return unknown, return the first available format in the template,
assuming that the driver would be capable to do color conversions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2404>

2 years agotests: test fixed caps
Stéphane Cerveau [Mon, 25 Apr 2022 09:03:35 +0000 (11:03 +0200)]
tests: test fixed caps

Add a test entry to check wether a caps is fixed
or not.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2290>

2 years agocaps: warn with wrong mediatype in gst_caps_new_empty_simple
Stéphane Cerveau [Mon, 25 Apr 2022 08:59:21 +0000 (10:59 +0200)]
caps: warn with wrong mediatype in gst_caps_new_empty_simple

If passing ANY/EMPTY to gst_caps_new_empty_simple
as a mediatype, a warning will be displayed to alert
on this misuse of the API.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2290>

2 years agoh265decoder: Improve robustness against malformed NAL packets
Seungha Yang [Fri, 6 May 2022 18:15:44 +0000 (03:15 +0900)]
h265decoder: Improve robustness against malformed NAL packets

Use newly added gst_h265_parser_identify_and_split_nalu_hevc()
method to handle broken streams where packetized NAL unit
contain start code prefix in it.

It's obviously wrong stream but we know how to work around it
and even need to support such broken streams since
stateless decoder implementations are being a primary
decoder element.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2394>

2 years agoh265parser: Add a new NAL parsing API to handle malformed packets
Seungha Yang [Mon, 9 May 2022 18:32:42 +0000 (03:32 +0900)]
h265parser: Add a new NAL parsing API to handle malformed packets

Add gst_h265_parser_identify_and_split_nalu_hevc() method to
handle a case where packetized stream contains start-code prefix.
This new method behaves similar to exisiting gst_h265_parser_identify_nalu_hevc()
but it will scan start-code prefix to split given data into
NAL units.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2394>

2 years agova: basedec: Select format from template or negotiated caps.
Víctor Manuel Jáquez Leal [Wed, 30 Mar 2022 15:19:54 +0000 (17:19 +0200)]
va: basedec: Select format from template or negotiated caps.

Instead of using a hard-coded list of preferred formats according the
chroma type, now if now caps are pre-negotiated, from template caps
will choose the first format with the same chroma type. If
pre-negotiated, then it will choose the first format, with same chroma
type, from the first caps structure.

Also all the decoders will check if GST_VIDEO_FORMAT_UNKNOWN is
returned, failing the negotiation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2351>

2 years agov4l2videoenc: Setup crop rectangle if needed
Nicolas Dufresne [Thu, 28 Apr 2022 13:19:57 +0000 (09:19 -0400)]
v4l2videoenc: Setup crop rectangle if needed

Hantro H1 and Rockchip VEPU2 drivers will pad the width/height to a
multiple of 16. In order to obtain the right JPEG size, the image needs
to be cropped using the S_SELECTION API. This support is added as best
effort since older drivers may emulate this by looking at the capture
queue width/height.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2329>

2 years agolibs: va: Add O_CLOEXEC flag at opening drm device.
Víctor Manuel Jáquez Leal [Fri, 6 May 2022 15:53:51 +0000 (17:53 +0200)]
libs: va: Add O_CLOEXEC flag at opening drm device.

So any other potential subprocess won't have access to it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2386>

2 years agopcapparse: Set timestamp in DTS, not PTS
Olivier Crête [Fri, 6 May 2022 22:21:00 +0000 (18:21 -0400)]
pcapparse: Set timestamp in DTS, not PTS

This matches the behaviour of basesrc, in particular, it matches the
behaviour of udpsrc, so it's easier to use to as a replacement to test
rtpjitterbuffer and other similar elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2388>

2 years agotools: device-monitor: Print string property as-is without serialize
Seungha Yang [Fri, 6 May 2022 19:43:49 +0000 (04:43 +0900)]
tools: device-monitor: Print string property as-is without serialize

gst_value_serialize() does more than what's needed to printf-ing
especially when given GValue is already string. Just print string
value as-is without gst_value_serialize() to avoid unreadable
string print, especially for multi-bytes character encoding cases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2387>

2 years agov4l2codecs: h264: Set frame type flags
Dmitry Osipenko [Sun, 16 Jan 2022 12:51:32 +0000 (15:51 +0300)]
v4l2codecs: h264: Set frame type flags

V4L spec now requires decode_params flags to be set in accordance to the
frame's type. In particular this is required by H.264 decoder of NVIDIA
Tegra SoC to operate properly. Set the flags based on type of parsed
slices.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1757>

2 years agotests: Skip test if srtp element not built
Mengkejiergeli Ba [Fri, 6 May 2022 02:50:59 +0000 (10:50 +0800)]
tests: Skip test if srtp element not built

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2383>

2 years agoplaybin3: Cleanup and refactor combiner sourcecombine
Edward Hervey [Fri, 6 May 2022 07:10:09 +0000 (09:10 +0200)]
playbin3: Cleanup and refactor combiner sourcecombine

* Remove fields no longer used, or that can be replaced by smaller code
* Rename "channels" to a more meaningful "input pads"
* Directly handle/use combiner pads in the combiners instead of on the playbin3
  main structure

Remove the corresponding combiner sinkpad whenever a uridecodebin3 source pad
goes away
* If used, store the corresponding combiner sink pad in the SourcePad helper
  structure

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2384>

2 years agoci: update/rebuild windows image
Jordan Petridis [Tue, 26 Apr 2022 15:33:47 +0000 (18:33 +0300)]
ci: update/rebuild windows image

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2302>

2 years agoci: fix the windows-rust image builds
Jordan Petridis [Tue, 26 Apr 2022 17:00:16 +0000 (20:00 +0300)]
ci: fix the windows-rust image builds

There was a rule gated on the project name which wasn't removed
once we moved to the monorepo and this job was silently broken
since.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2302>

2 years agod3d11memory: Protect against concurrent access from GPU and CPU to staging texture
Seungha Yang [Thu, 5 May 2022 16:46:36 +0000 (01:46 +0900)]
d3d11memory: Protect against concurrent access from GPU and CPU to staging texture

Staging texture does not allow GPU access while it's CPU mapped.
But because we cannot block concurrent READ access by GstMemory design,
additional staging texture is still required.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1182
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2375>

2 years agod3d11screencapturesrc: Fix crash when d3d11 device is different from owned one
Seungha Yang [Wed, 4 May 2022 17:16:54 +0000 (02:16 +0900)]
d3d11screencapturesrc: Fix crash when d3d11 device is different from owned one

GstD3D11ScreenCapture object is pipeline-independent global object
and the object can be shared by multiple src elements,
in order to overcome a limitation of DXGI Desktop Duplication API.
Note that the API allows only single capture session in a process for
a monitor.

Therefore GstD3D11ScreenCapture object must be able to handle a case
where a src element holds different GstD3D11Device object. Which can
happen when GstD3D11Device context is not shared by pipelines.

What's changed:
* Allocates capture texture with D3D11_RESOURCE_MISC_SHARED for the
  texture to be able to copied into other device's texture
* Holds additional shader objects per src element and use it when drawing
  mouse

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1197
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2366>

2 years agoaggregator: Don't send multiple caps events with the same caps
Sebastian Dröge [Thu, 5 May 2022 17:39:52 +0000 (20:39 +0300)]
aggregator: Don't send multiple caps events with the same caps

Every time aggregator is reconfiguring it will try to negotiate new
caps. If these resulting caps are the same as the previously negotiated
caps then don't send a new caps event with the same caps again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agomp4mux: Disable aggregator's default negotiation
Sebastian Dröge [Thu, 5 May 2022 17:36:04 +0000 (20:36 +0300)]
mp4mux: Disable aggregator's default negotiation

mp4mux can't negotiate caps with upstream/downstream and always outputs
specific caps based on the input streams. This will always happen before
it produces the first buffers.

By having the default aggregator negotiation enabled the same caps
would be pushed twice in the beginning, and again every time a
reconfigure event is received.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agomxfmux: Disable aggregator's default negotiation
Sebastian Dröge [Thu, 5 May 2022 17:35:57 +0000 (20:35 +0300)]
mxfmux: Disable aggregator's default negotiation

mxfmux can't negotiate caps with upstream/downstream and always outputs
specific caps based on the input streams. This will always happen before
it produces the first buffers.

By having the default aggregator negotiation enabled the same caps
would be pushed twice in the beginning, and again every time a
reconfigure event is received.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agompegtsmux: Disable aggregator's default negotiation
Sebastian Dröge [Thu, 5 May 2022 17:35:49 +0000 (20:35 +0300)]
mpegtsmux: Disable aggregator's default negotiation

mpegtsmux can't negotiate caps with upstream/downstream and always outputs
specific caps based on the input streams. This will always happen before
it produces the first buffers.

By having the default aggregator negotiation enabled the same caps
would be pushed twice in the beginning, and again every time a
reconfigure event is received.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agoflvmux: Disable aggregator's default negotiation
Sebastian Dröge [Thu, 5 May 2022 17:24:57 +0000 (20:24 +0300)]
flvmux: Disable aggregator's default negotiation

flvmux can't negotiate caps with upstream/downstream and always outputs
specific caps based on the input streams. This will always happen before
it produces the first buffers.

By having the default aggregator negotiation enabled the same caps
would be pushed twice in the beginning, and again every time a
reconfigure event is received.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agoaggregator: Only send events up to CAPS event from gst_aggregator_set_src_caps()
Sebastian Dröge [Thu, 5 May 2022 12:05:43 +0000 (15:05 +0300)]
aggregator: Only send events up to CAPS event from gst_aggregator_set_src_caps()

Otherwise setting the srcpad caps based on the sinkpad caps event will
already push a segment event downstream before the upstream segment is
known.

If the upstream segments are just forwarded when the upstream segment
event arrives this would result in two segment events being sent
downstream, of which the first one will usually be simply wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2372>

2 years agoh264decoder: Fix for unhandled low-delay decoding case
Seungha Yang [Wed, 4 May 2022 15:24:26 +0000 (00:24 +0900)]
h264decoder: Fix for unhandled low-delay decoding case

Baseclass calls get_preferred_output_delay() in a chain of
sequence header parsing and then new_sequence() is called
with required DPB size (includes render-delay) information.
Thus latency query should happen before the sequence header
parsing for subclass to report required render-delay accordingly
via get_preferred_output_delay() method.
(e.g., zero delay in case of live pipeline)

This commit is to fix wrong liveness signalling in case of
upstream packetized format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2363>

2 years agoh265decoder: Fix for unhandled low-delay decoding case
Seungha Yang [Wed, 4 May 2022 15:49:27 +0000 (00:49 +0900)]
h265decoder: Fix for unhandled low-delay decoding case

Baseclass calls get_preferred_output_delay() in a chain of
sequence header parsing and then new_sequence() is called
with required DPB size (includes render-delay) information.
Thus latency query should happen before the sequence header
parsing for subclass to report required render-delay accordingly
via get_preferred_output_delay() method.
(e.g., zero delay in case of live pipeline)

This commit is to fix wrong liveness signalling in case of
upstream packetized format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2364>

2 years agonvh264dec,nvh265dec: Don't realloc bitstream buffer per slice
Seungha Yang [Wed, 4 May 2022 14:36:30 +0000 (23:36 +0900)]
nvh264dec,nvh265dec: Don't realloc bitstream buffer per slice

Allocated memory size has not been updated which results in
realloc per slice. Fixing it and also release bitstream buffer
on ::close(), not finalize.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2361>

2 years agomultiqueue: Increase initial interleave growth rate
Edward Hervey [Thu, 5 May 2022 07:00:17 +0000 (09:00 +0200)]
multiqueue: Increase initial interleave growth rate

In the case where not all streams have received any data, growing the interleave
by only 100ms is too restrictive and would cause some (valid) mpeg-ts streams to
hang.

Bump up the interleave growth rate for those use-cases to 500ms per input (still
up to the limit of 5s).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2370>

2 years agod3d11screencapture: Set viewport when drawing mouse cursor
Jakub Adam [Fri, 29 Apr 2022 18:28:53 +0000 (20:28 +0200)]
d3d11screencapture: Set viewport when drawing mouse cursor

If there weren't any moved/dirty regions in the captured frame, the
viewport of the ID3D11DeviceContext would be left at whatever previous
value it had, which could lead to the cursor being drawn in a wrong
position and/or in an incorrect size.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2362>

2 years agowavparse: ensure that any pending segment is sent before an EOS event is sent
Matthew Waters [Tue, 3 May 2022 07:27:32 +0000 (17:27 +1000)]
wavparse: ensure that any pending segment is sent before an EOS event is sent

Specifically fixes seqnum handling when an aggregator-based element
(audiomixer et al) is downstream and a seek is performed that
immediately causes an EOS from wavparse.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2356>

2 years agoparsebin: Don't modify inexistant GstStream
Edward Hervey [Tue, 3 May 2022 14:25:19 +0000 (16:25 +0200)]
parsebin: Don't modify inexistant GstStream

When handling exposing un-handled streams, we can only replace the GstStream for
those we are creating ourselves (i.e. the fallback collection).

Fixes assertions when the demuxer creates those streams

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2353>

2 years agoplaybin3: Don't use unknown types for default selection
Edward Hervey [Tue, 3 May 2022 14:08:39 +0000 (16:08 +0200)]
playbin3: Don't use unknown types for default selection

When creating a fallback default selection from a collection, don't attempt to
use unknown stream types

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2353>

2 years agosubprojects: Update libnice to 0.1.19
Olivier Crête [Tue, 3 May 2022 22:49:36 +0000 (18:49 -0400)]
subprojects: Update libnice to 0.1.19

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2354>

2 years agonvcodec: Add AV1 decoder
Seungha Yang [Mon, 2 May 2022 13:59:59 +0000 (22:59 +0900)]
nvcodec: Add AV1 decoder

Adding GstCodecs based AV1 decoder element

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453>

2 years agoav1decoder: Add support for render delay
Seungha Yang [Tue, 3 May 2022 14:56:12 +0000 (23:56 +0900)]
av1decoder: Add support for render delay

Sync up with other decoder baseclass implementations

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453>

2 years agoav1decoder: Hold OBU temporal and spatial id in picture struct
Seungha Yang [Wed, 27 Apr 2022 18:14:54 +0000 (03:14 +0900)]
av1decoder: Hold OBU temporal and spatial id in picture struct

NVDEC API requires the information

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453>

2 years agomeson: nvcodec: Remove unnecessary override option and fix build with non-MSVC
Seungha Yang [Tue, 3 May 2022 16:03:37 +0000 (01:03 +0900)]
meson: nvcodec: Remove unnecessary override option and fix build with non-MSVC

cpp_std=c++11 was hack for macOS build but we don't build this plugin
for Apple device anymore. And add "-Wno-deprecated-declarations"
compile option for gcc/clang

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453>

2 years agonvcodec: Bump SDK header version to 11.1
Seungha Yang [Fri, 17 Dec 2021 08:22:22 +0000 (17:22 +0900)]
nvcodec: Bump SDK header version to 11.1

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1453>

2 years agonvdecoder: Handle DPB size margin in a single place
Seungha Yang [Mon, 2 May 2022 13:46:06 +0000 (22:46 +0900)]
nvdecoder: Handle DPB size margin in a single place

... instead of each subclass

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2343>

2 years agod3d11decoder: Handle DPB size margin in a single place
Seungha Yang [Mon, 2 May 2022 13:41:53 +0000 (22:41 +0900)]
d3d11decoder: Handle DPB size margin in a single place

... instead of each subclass

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2343>

2 years agocodecs: Signal required DPB size for AV1,MPEG2,VP8, and VP9 via new_sequence()
Seungha Yang [Wed, 27 Apr 2022 19:25:05 +0000 (04:25 +0900)]
codecs: Signal required DPB size for AV1,MPEG2,VP8, and VP9 via new_sequence()

Make all codecs consistent so that subclass can know additional DPB
size requirement depending on render-delay configuration regardless
of codec. Note that render-delay feature is not implemented for AV1
yet but it's planned.

Also, consider new_sequence() is mandatory requirement, not optional

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2343>

2 years agoaudioconvert: If no channel-mask can be fixated then use a NONE channel layout
Sebastian Dröge [Tue, 3 May 2022 10:37:31 +0000 (13:37 +0300)]
audioconvert: If no channel-mask can be fixated then use a NONE channel layout

Otherwise this is generating caps without a channel-mask, which is
invalid for >1 channels and will always fail negotiation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2350>

2 years agodoc: Update cache for NV12_4L4 and NV12_16LE32 gl support
Nicolas Dufresne [Mon, 2 May 2022 18:36:03 +0000 (14:36 -0400)]
doc: Update cache for NV12_4L4 and NV12_16LE32 gl support

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agoopengl: Add NV12_4L4 conversion support
Nicolas Dufresne [Thu, 14 Apr 2022 19:02:11 +0000 (15:02 -0400)]
opengl: Add NV12_4L4 conversion support

This format is produced notably by Hantro G1/G2 HW. Using a shader instead of
the Hantro embedded converter helps reduce drastrictly the memory usage at a
relatively small GPU overhead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agoopengl: Add NV12_16L32S conversion support
Nicolas Dufresne [Tue, 12 Apr 2022 18:18:59 +0000 (14:18 -0400)]
opengl: Add NV12_16L32S conversion support

This adds a first detiling shader with initial support for
NV12_16L32S as produced by Mediatek decoders.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agoglsl: Enable GLSL 1.30 if we have OpenGL 3.0/3.1
Nicolas Dufresne [Wed, 13 Apr 2022 18:54:40 +0000 (14:54 -0400)]
glsl: Enable GLSL 1.30 if we have OpenGL 3.0/3.1

As implemented, we only support OpenGL 3 API from version 3.2. Though, there
is no issue enabling GLSL 1.30 even if we are going to restrict our API usage
to 2. This allows using texelFetch() on OpenGL 3.0 and 3.1 drivers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agoopengl: Add low level support for tiled formats
Nicolas Dufresne [Tue, 12 Apr 2022 16:24:03 +0000 (12:24 -0400)]
opengl: Add low level support for tiled formats

This adds support for tiled format in stride and plane size
code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agov4l2codecs: Port to the new tile size helper
Nicolas Dufresne [Tue, 12 Apr 2022 16:17:09 +0000 (12:17 -0400)]
v4l2codecs: Port to the new tile size helper

This will complete the scaling of width/height shift scaling
as only a partial implementation was made.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agovideo: Port video frame to the new tile size helper
Nicolas Dufresne [Tue, 12 Apr 2022 16:16:23 +0000 (12:16 -0400)]
video: Port video frame to the new tile size helper

This is now moved to the library, so it can be used in multiple
places.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agovideo: Add a helper to get the tile size information
Nicolas Dufresne [Tue, 12 Apr 2022 16:14:03 +0000 (12:14 -0400)]
video: Add a helper to get the tile size information

Since the addition of tiling format with subsampled tile size
(NV12_16L32S), getting the tile width/height shifts and tile
size have become more complex. Add a helper to extract and
scale this information for the selected plane and format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agoeglimage: Add missing NV21/61 support
Nicolas Dufresne [Tue, 12 Apr 2022 16:18:06 +0000 (12:18 -0400)]
eglimage: Add missing NV21/61 support

Caps would allow that, but selecting this format would lead to
an "no reached" assertion in the code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2190>

2 years agocuda: Fix introspection warnings
Thibault Saunier [Mon, 2 May 2022 15:46:59 +0000 (11:46 -0400)]
cuda: Fix introspection warnings

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1183

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2344>

2 years agoRevert "cuda: Fix GstCudaContext refcount bug"
Seungha Yang [Mon, 2 May 2022 12:57:07 +0000 (21:57 +0900)]
Revert "cuda: Fix GstCudaContext refcount bug"

This reverts commit df7ee0e21518ab5586e4094f2089048f3767d5f5.

We should not unref it since gst_message_new_have_context()
takes ownership of the GstContext.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2342>

2 years agofilesink: fix handling of non-existing paths with musl
Tim-Philipp Müller [Mon, 2 May 2022 10:41:52 +0000 (11:41 +0100)]
filesink: fix handling of non-existing paths with musl

Fixes #1194

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2341>

2 years agotsdemux: Demote warning to simple debug
Edward Hervey [Mon, 2 May 2022 07:15:57 +0000 (09:15 +0200)]
tsdemux: Demote warning to simple debug

That issue is actually handled, so don't pollute the logs with such warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2340>

2 years agoregistry: skip Rust dep builddirs when searching for plugins recursively
Tim-Philipp Müller [Sat, 9 Apr 2022 20:07:43 +0000 (21:07 +0100)]
registry: skip Rust dep builddirs when searching for plugins recursively

These artefacts confuse the plugin scanner and may cause noisy warnings
(and slow down things).

Fixes https://gitlab.freedesktop.org/gstreamer/gst-build/-/issues/68

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2146>

2 years agointerlace: Also handle a missing "interlace-mode" field as progressive
Sebastian Dröge [Fri, 29 Apr 2022 16:08:46 +0000 (19:08 +0300)]
interlace: Also handle a missing "interlace-mode" field as progressive

Otherwise caps negotiation will fail in situations that are supposed
to work, like:

  "video/x-raw,framerate=(fraction)60/1" ! interlace field-pattern=0 ! "video/x-raw,framerate=(fraction)30/1"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2335>

2 years agointerlace: Add some more debug output to the getcaps function
Sebastian Dröge [Fri, 29 Apr 2022 16:08:32 +0000 (19:08 +0300)]
interlace: Add some more debug output to the getcaps function

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2335>

2 years agocuda: Fix GstCudaContext refcount bug
Myles Inglis [Fri, 29 Apr 2022 15:56:54 +0000 (16:56 +0100)]
cuda: Fix GstCudaContext refcount bug

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2334>

2 years agowebrtc: Fix memory leak in icestream
Ludvig Rappe [Thu, 28 Apr 2022 15:08:11 +0000 (17:08 +0200)]
webrtc: Fix memory leak in icestream

Since both g_value_set_object() and g_weak_ref_get() takes a reference
there will be two new references to the GstWebRTCICE object when there
should be only one. g_value_take_object() has the same functionality as
g_value_set_object() but does not take a reference.

Without this change, the GstWebRTCICE object will be leaked.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2333>

2 years agocuda: Correct CUDA device id field in GstContext structure
Seungha Yang [Wed, 27 Apr 2022 13:50:37 +0000 (22:50 +0900)]
cuda: Correct CUDA device id field in GstContext structure

device id is unsigned int, not signed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2311>

2 years agortpjitterbuffer: Free CNAME/SSRC mappings on finalize and PAUSED->READY
Sebastian Dröge [Fri, 29 Apr 2022 20:33:47 +0000 (23:33 +0300)]
rtpjitterbuffer: Free CNAME/SSRC mappings on finalize and PAUSED->READY

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2336>

2 years agortpmanager: Refactor RTCP packet loops to fix control flow
Sebastian Dröge [Fri, 29 Apr 2022 20:13:15 +0000 (23:13 +0300)]
rtpmanager: Refactor RTCP packet loops to fix control flow

Mixing C loops with switch statements is a bad idea as break has a
different meaning in both. Breaking inside the switch statements wrongly
caused further loop iterations.

Instead use goto to get out of the loop and continue to do another loop
iteration, and never ever use break except for the end of a case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2336>

2 years agortpjitterbuffer: Initialize variables
Seungha Yang [Wed, 27 Apr 2022 15:58:30 +0000 (00:58 +0900)]
rtpjitterbuffer: Initialize variables

Avoid use of uninitialized variable
Fixing MSVC warning
gstrtpjitterbuffer.c(4733) : warning C4700: uninitialized local variable 'have_sdes' used

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2315>

2 years agocodecs: h265decoder: Fix documentation.
Víctor Manuel Jáquez Leal [Thu, 28 Apr 2022 11:23:39 +0000 (13:23 +0200)]
codecs: h265decoder: Fix documentation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2328>

2 years agomssdemux2: Don't expose/use streams we can't handle yet
Edward Hervey [Thu, 28 Apr 2022 08:49:55 +0000 (10:49 +0200)]
mssdemux2: Don't expose/use streams we can't handle yet

Avoids issues further down

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2319>

2 years agomssdemux2: Ensure stream/track uniqueness
Edward Hervey [Thu, 28 Apr 2022 08:46:34 +0000 (10:46 +0200)]
mssdemux2: Ensure stream/track uniqueness

If there is more than one track of the same type (say audio), we would end up
creating several stream/types with the same name.

Instead use the MSS stream name property to make them unique

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2319>

2 years agompegts: Handle "empty" PMT gracefully
Edward Hervey [Wed, 27 Apr 2022 13:24:50 +0000 (15:24 +0200)]
mpegts: Handle "empty" PMT gracefully

Some streams have 2 PMT sections in a single TS packet. The first one is "valid"
but doesn't contain/define any streams. That causes an unrecoverable issue when
we try to activate the 2nd (valid) PMT.

Instead of doing that, pre-emptively refuse to process PMT without any streams
present within. We still do post that section on the bus to inform applications.

Fixes #1181

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2310>

2 years agopythonplugin: fails silently on plugin issue
Stéphane Cerveau [Thu, 21 Apr 2022 07:51:50 +0000 (09:51 +0200)]
pythonplugin: fails silently on plugin issue

If a gst python plugin fails to load, the meta plugin
should continue to try loading the following.
If no plugin can be loaded, the meta plugin should
not be blacklisted by returning false.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2253>

2 years agosrtp: fix flaky unit test
Stéphane Cerveau [Tue, 26 Apr 2022 07:11:07 +0000 (09:11 +0200)]
srtp: fix flaky unit test

Use different port for each test to avoid other UDP
packet to be received.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2294>

2 years agovideodecoder: release stream lock after handling gap events
Philippe Normand [Wed, 27 Apr 2022 09:18:39 +0000 (10:18 +0100)]
videodecoder: release stream lock after handling gap events

The stream lock is taken before handling gap events but was not released in all
possible runtime situations. This issue was introduced in:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1274

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2307>

2 years agosubparse: don't deref a potentially NULL variable
Matthew Waters [Thu, 28 Apr 2022 05:32:27 +0000 (15:32 +1000)]
subparse: don't deref a potentially NULL variable

If the html SAMI data is malformed, then retrieving the attribute name
may fail.  We then cannot retrieve the attribute value.

Fixes: https://oss-fuzz.com/testcase-detail/4700130671984640
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2317>

2 years agod3d11h265dec: Assign PRIMARY + 1 rank
Seungha Yang [Wed, 27 Apr 2022 15:48:35 +0000 (00:48 +0900)]
d3d11h265dec: Assign PRIMARY + 1 rank

Promote d3d11h265dec to be default one if available

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2314>

2 years agonvvp9sldec: Increase DPB size to cover render delay
Seungha Yang [Wed, 27 Apr 2022 15:31:49 +0000 (00:31 +0900)]
nvvp9sldec: Increase DPB size to cover render delay

This should've included in the previous MR
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/987
already, but missed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2313>

2 years agoparsebin: Expose streams of unknown type
Edward Hervey [Wed, 27 Apr 2022 07:22:40 +0000 (09:22 +0200)]
parsebin: Expose streams of unknown type

This actually respects the existing `expose-all-streams` property by exposing
them and having them present in the stream collection (as streams of type
unknown).

Fixes #1179

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2309>

2 years agoqroverlay: Reset data_changed after we use the info
Thibault Saunier [Mon, 7 Mar 2022 15:44:04 +0000 (15:44 +0000)]
qroverlay: Reset data_changed after we use the info

It was never reset so it was always TRUE once the data was changed!

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2299>

2 years agoqroverlay: Add a GstQROverlay meta
Thibault Saunier [Fri, 4 Mar 2022 22:00:18 +0000 (22:00 +0000)]
qroverlay: Add a GstQROverlay meta

See documentation

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2299>

2 years agowavparse: Unset DISCONT buffer flag for divided into multiple buffers in push mode
dongil.park [Wed, 27 Apr 2022 03:24:23 +0000 (12:24 +0900)]
wavparse: Unset DISCONT buffer flag for divided into multiple buffers in push mode

In push mode (streaming), if the received chunk buffer size from _chain is bigger
than output buffer size, the flags of the divided-buffers are propagated to the
DISCONT flag from first received chunk buffer. This unexpected buffers contained DISCONT
flags are abnormally transformed when changing the sampling rate by audioresample element.
So unset unnecessary DISCONT flag before pad_push().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2305>

2 years agoplaybin2: Remove dead code
Edward Hervey [Wed, 27 Apr 2022 06:23:59 +0000 (08:23 +0200)]
playbin2: Remove dead code

blacklisted_mimes has been empty for ages. Remove the code "using" it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2306>

2 years agotimeoverlay: add support for reference timestamp time mode
Mathieu Duponchelle [Thu, 21 Apr 2022 00:04:57 +0000 (02:04 +0200)]
timeoverlay: add support for reference timestamp time mode

+ update date-time mode to actually use the timestamp that
  was selected with the time-mode property

Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2252>

2 years agortpjitterbuffer: add the reference timestamp meta in more situations
Sebastian Dröge [Tue, 26 Apr 2022 19:17:51 +0000 (22:17 +0300)]
rtpjitterbuffer: add the reference timestamp meta in more situations

Previously, we only added it when actually performing synchronization
based on the NTP time.

The information can be useful downstream in other situations too, and
we can compute a NTP time as soon as we get a sender report with the
relevant information.

Co-authored-by: Mathieu Duponchelle <mathieu@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2252>

2 years agortpgstpay: Don't push packets before the first input buffer is received
Sebastian Dröge [Wed, 20 Apr 2022 14:35:29 +0000 (17:35 +0300)]
rtpgstpay: Don't push packets before the first input buffer is received

It's not possible to create a valid RTP timestamp for them, which would
cause a potentially very big RTP timestamp discontinuity between those
first packets (created from initial events) and the packet based on the
first input buffer.

As a side-effect, also simplify the packet aggregation code a bit and
work with only a single level of buffer lists.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1157

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2250>

2 years agortpbasepayload: always store input buffer meta before negotiation
Mathieu Duponchelle [Wed, 27 Apr 2022 00:08:00 +0000 (02:08 +0200)]
rtpbasepayload: always store input buffer meta before negotiation

The decision to store the input buffer depends on whether extensions
are to be added to the output buffer, I assume as an optimization.

This creates an issue for subclasses that call negotiate(), where
header_exts is actually populated, from their handle_buffer()
implementation: at chain time, no header extension has been negotiated
yet, which means that we don't add extensions to the first batch of
buffers that comes out.

Keep track of whether negotiate has been called (this is different
from the negotiated field) and always store the input buffer until
then. This fixes the issue while largely preserving the optimization.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2304>

2 years agotests/onvif: improve robustness
Mathieu Duponchelle [Tue, 26 Apr 2022 23:13:11 +0000 (01:13 +0200)]
tests/onvif: improve robustness

The previous iteration of the code was inferring the type of the
frame by looking at the overall size of the gst-payloaded packet.

It is more robust to actually parse the payload and look at the
actual data buffers it contains.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2303>

2 years agotests/onvif: don't push buffers outside segment
Mathieu Duponchelle [Tue, 26 Apr 2022 23:10:46 +0000 (01:10 +0200)]
tests/onvif: don't push buffers outside segment

segment->stop is exclusive, so in reverse playback mode we do not
need to output a buffer at that position as it will simply get
clipped in basesink.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2303>

2 years agortponviftimestamp: add extension data to all packets ..
Mathieu Duponchelle [Tue, 26 Apr 2022 22:27:06 +0000 (00:27 +0200)]
rtponviftimestamp: add extension data to all packets ..

regardless of whether they are input as individual buffers or
buffer lists.

The ONVIF specification requires all packets to hold the extension,
it makes no sense to behave differently when handling buffer lists.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2303>

2 years agocudaconvert: Enhance debugging when setting video info fails
Thibault Saunier [Tue, 8 Mar 2022 21:26:16 +0000 (21:26 +0000)]
cudaconvert: Enhance debugging when setting video info fails

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2300>

2 years agocodecparsers: bitwriter: Calculate PicSizeInCtbsY when writing slice header.
He Junyan [Tue, 26 Apr 2022 14:35:30 +0000 (22:35 +0800)]
codecparsers: bitwriter: Calculate PicSizeInCtbsY when writing slice header.

 The slice->pps->PicWidthInCtbsY/PicHeightInCtbsY values are calculated when
 we parse the slice header. But they are not calculated in bitwriter and so
 may not have valid value when writing slice header.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2287>

2 years agocodecparsers: bitwriter: Fix some coverity issues of H265 bitwriter.
He Junyan [Sun, 24 Apr 2022 09:26:03 +0000 (17:26 +0800)]
codecparsers: bitwriter: Fix some coverity issues of H265 bitwriter.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2287>

2 years agovideoscale: Fix the src video info error in transfer_colorimetry_from_input()
He Junyan [Sun, 24 Apr 2022 15:19:00 +0000 (23:19 +0800)]
videoscale: Fix the src video info error in transfer_colorimetry_from_input()

Pipeline such as:
gst-launch-1.0 -vf videotestsrc ! video/x-raw,format=NV12,colorimetry=\(string\)bt709 \
 ! videoscale ! video/x-raw,format=I420 ! fakesink
Always trigger a error:
ERROR             video-info video-info.c:556:gst_video_info_from_caps: no width property given

Because it is called before the fixate_size(), the src caps' resolution
may be absent or not fixed. That causes that the src video info can not
be created correctly and we can not inherit the colorimetry and chroma-site
from the input caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2289>

2 years agovideorate: fix assertion when pushing last and only buffer without duration
Guillaume Desmottes [Tue, 26 Apr 2022 08:58:08 +0000 (10:58 +0200)]
videorate: fix assertion when pushing last and only buffer without duration

Fixing this pipeline:
  gst-launch-1.0 filesrc location=sample.png ! pngdec ! videorate ! fakesink

- videorate receives a single buffer with pts = 0, duration = invalid;
- then it receives eos triggering this buffer to be pushed downstream;
- the pushing code was assuming that a duration was set, which is
  impossible as we received a single buffer and no output framerate was
  set either. So the best we can do is to push the buffer without
  duration.

Fix #1177

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2296>

2 years agova: dec: Use gst_buffer_pool_config_set_va_alignment() to set alignment.
He Junyan [Sat, 23 Apr 2022 16:02:18 +0000 (00:02 +0800)]
va: dec: Use gst_buffer_pool_config_set_va_alignment() to set alignment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2282>

2 years agova: pool: Replace all tabs with spaces in header file.
He Junyan [Sat, 23 Apr 2022 15:59:08 +0000 (23:59 +0800)]
va: pool: Replace all tabs with spaces in header file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2282>

2 years agova: pool: Delete the GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.
He Junyan [Sat, 23 Apr 2022 15:52:34 +0000 (23:52 +0800)]
va: pool: Delete the GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.

The va pool is used for GPU side surface/image, its alignment should
not be changed arbitrarily by others. So we decide not to expose the
GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT flag anymore.
Instead, user can call gst_buffer_pool_config_set_va_alignment() to
set its surface/image alignment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2282>

2 years agova: pool: Add set_va_alignment() API.
He Junyan [Sat, 23 Apr 2022 15:40:14 +0000 (23:40 +0800)]
va: pool: Add set_va_alignment() API.

We want to use gst_buffer_pool_config_set_va_alignment() to replace
gst_buffer_pool_config_get_video_alignment(). The later one is specific
for GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT option.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2282>

2 years agortptwcc: don't map the buffer twice
Havard Graff [Fri, 22 Apr 2022 10:19:03 +0000 (12:19 +0200)]
rtptwcc: don't map the buffer twice

...and use the pt extracted rather than the one from RTPPacketInfo
when logging.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2271>

2 years agortpsession: Emit "notify::stats" when we update stats from RR or SR
Thibault Saunier [Fri, 22 Apr 2022 02:41:16 +0000 (02:41 +0000)]
rtpsession: Emit "notify::stats" when we update stats from RR or SR

Sensibily optimizing caching the pspecs and using them directly

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2266>