Commit graph

7932 commits

Author SHA1 Message Date
Matthew Waters
33c60bdbf9 gl/display: remove choosing egl fallback from GST_GL_PLATFORM
If GST_GL_WINDOW is unset but GST_GL_PLATFORM=egl, then we were choosing
to create an GstGLDisplayEGL directly instead of going through the any
more specific windowing system implementation (X11, Wayland).

The 'create an GstGLDisplayEGL when GST_GL_PLATFORM=egl' was a fallback
as we did not have entries for all EGL-using window systems previously.
Now that we do, the fallback can be removed.  An EGLDisplay can still
be created by setting GST_GL_WINDOW=egl or as one option.

Fixup of https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1154

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1169>
2021-06-03 02:58:10 +00:00
Tim-Philipp Müller
577dabf7b1 Use g_memdup2() where available and add fallback for older GLib versions
g_memdup() is deprecated since GLib 2.68 and we want to avoid
deprecation warnings with recent versions of GLib.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1171>
2021-06-02 14:21:02 +00:00
Nicolas Dufresne
cd31689ced glcontext: Ask for an alpha channel and fallback
While this was already possible through the GLContext machinary, this simply
request an alpha channel by default and fallback if this is not possible. This
obsolete some RPi Dispmanx hack, since this is near equivalent will allow see
through when playgin WebM Alpha or other transparent files.

Application are still free to pass their own EGLContext attribute, this is
specially for the case the application let GStreamer chose (e.g. gst-launch).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1176>
2021-05-31 13:17:37 +00:00
Olivier Crête
fd73fd05ca audioaggregator: Don't overwrite already written samples
On re-sync, don't forget what has already been written. Instead, just
drop any samples that overlap with parts that were already filled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1180>
2021-05-27 16:33:00 -04:00
Seungha Yang
5ad59ce725 audiobasesrc: Fix divide by zero assertion
GstAudioRingBufferSpec can be cleared from other thread, then
rate value will be zero

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1179>
2021-05-27 07:51:48 +00:00
Marijn Suijten
9a502c15c6 audio,video-format: Make generate_raw_formats idempotent for assertions
When compiling without assertions `g_assert` and its contents disappear
resulting in no list being deserialized at all and the
`gst_{audio,video}_formats_raw` functions to return an empty collection.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1177>
2021-05-26 23:35:16 +02:00
Nicolas Dufresne
0df31ae9d4 video: Update video-orc-dist
This adds the new symbols needed for AV12 support.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1152>
2021-05-21 21:16:24 -04:00
Daniel Almeida
3a3385f35c gl: add support for AV12
AV12 is an internally conceived format that is actually the
combination of NV12 and an alpha plane.

This format is to add to gstreamer's webM transparency support for
vp8 and vp9. To this end, two I420 streams are independently decoded
simultaneously for the actual content and the alpha plane respectively
and these are then combined into A420.

This patch adds GL conversion support so that it is possible to convert
from AV12 to RGBA for the purposes of rendering it on a display.

The reverse conversion is also supplied.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1152>
2021-05-21 21:16:24 -04:00
Daniel Almeida
6760c7fd76 video: add support for AV12
AV12 is an internally conceived format that is actually
the combination of NV12 and an alpha plane.

This format is to add to gstreamer's webM
transparency support for vp8 and vp9. To this end, two
I420 streams are independently decoded simultaneously for
the actual content and the alpha plane respectively
and these are then combined into A420.

Since most hardware decoders output NV12, this patch adds
NV12+A to make the same workflow possible.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1152>
2021-05-21 21:16:24 -04:00
Daniel Almeida
038ba1bffe video: video-orc: remove trailing spaces
Remove unnecessary trailing spaces at the end of some orc functions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1152>
2021-05-21 21:16:24 -04:00
Thibault Saunier
d77d5669d4 meson: Fix the name of the sdp_deps variable
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1167>
2021-05-21 18:54:22 +00:00
Matthew Waters
512160a1c8 gl/context/wgl: implement a better get_proc_address()
Look in opengl32.dll first, then wglGetProcAddress(), and only then
possibly from any linked in libraries.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1165>
2021-05-21 14:12:11 +10:00
Matthew Waters
f8510ae3c8 gl/context: add opengl32.dll as a library to dlopen() on windows
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1165>
2021-05-21 14:12:11 +10:00
Daniel Almeida
195981767c gl: add support for A420 conversion
A420 is a four planar format similar to I420 but with an extra buffer
for alpha values.

A common use of the gl stack is for GPU format conversions using
shaders, in which case one can use glupload, glcolorconvert and
gldownload elements to upload their buffer to the GPU context, perform
the conversion on the GPU itself and then retrieve the data to CPU
context.

A420 was not supported. This patch adds said support mainly by adding
the corresponding shader to perform the conversion and updating the
supported caps.

Both A420->RGBA and RGBA->A420 conversions are supported.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1153>
2021-05-20 15:06:26 +00:00
Nicolas Dufresne
3897b24f69 video: Pass component index not plane index
While so far it worked, we are about to introduce a format that break this
assuming. We have a format which consist of NV12 with alpha, and this format
does not have a direct mapping of the component against their plane indexes.

Fix this by using gst_video_format_info_component() introduced in 1.18 for
this purpose.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1151>
2021-05-19 15:17:56 +00:00
Matthew Waters
42512c92de gl/context: move egl creation lower in priority on _new()
e.g. if running a dual wgl/egl built library, then egl will always
succeed in creating the GstGLContext because almost anything could
support egl, as long as eglGetDisplay() works.

wgl, however has a check for the correct display type so should move
earlier in the tried list.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1154>
2021-05-19 10:15:56 +00:00
Matthew Waters
f0eca69a14 gl/display: provide a gst_gl_display_new_with_type()
Allows more fine-grained control over the exact display type that is
created.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1154>
2021-05-19 10:15:56 +00:00
Seungha Yang
87327110c2 videoaggregator: Don't try to return void
warning C4098: 'gst_video_aggregator_parallel_convert_pad_finalize':
'void' function returning a value

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1155>
2021-05-19 16:23:43 +09:00
Tim-Philipp Müller
48c0a6dd1e Revert video HDR10+ support
This reverts commit f76b731cbf.
This reverts commit 631489de23.
This reverts commit a1ed7a8f49.
This reverts commit 7d6f72e956.

Back this out again for now for the release. Needs more discussion.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/865

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1148>
2021-05-17 15:54:15 +00:00
Tim-Philipp Müller
57578529a0 meson: fix up wrong escaping of variables in gl and plugins-base .pc file
Workaround for pkg.generate() escaping spaces in pc variables
that shouldn't be escaped. Perhaps going back to configure_file()
would be a better option though. Really needs a fix in Meson.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/884

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1150>
2021-05-17 14:49:38 +00:00
Tim-Philipp Müller
5bc1a632e4 meson: add custom pkg-config variables also to uninstalled .pc files
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1150>
2021-05-17 14:49:38 +00:00
Matthew Waters
8a5e5ddeeb video/aggregator: add parallel convert pad class
Each required conversion will be performed concurrently

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1129>
2021-05-17 19:20:57 +10:00
Matthew Waters
c30534122e video/converter: add support for async conversion operation
Allows for users to start up multiple conversions concurrently.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1129>
2021-05-17 19:20:57 +10:00
Matthew Waters
7066c849e4 glcontext: add support for influencing the backing configuration
New API:
- gst_gl_context_get_config()
- gst_gl_context_request_config()

A GL context configuration is a GstStructure that has some well-known
names for common values that can also be extended in platform-specific
ways if necessary.

Wrapped OpenGL contexts may be able to retrieve the GL context
configuration depending on the platform.  If that information is
available, GstGLContext will attempt to create an context that matches
the shared OpenGL context config unless gst_gl_context_request_config()
has been called.

A new environment variable 'GST_GL_CONFIG' will be read to influence the
configuration chosen.  The environment variable will only be used as a
fallback if gst_gl_context_request_config() has not been called.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/809>
2021-05-13 16:44:28 +10:00
Matthew Waters
dfd749c5da gl/context/egl: change header guard to be unique
The header guard in gst/gl/egl/gstglcontext_egl.h was the same as
gst/gl/egl/egl.h

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/809>
2021-05-13 16:19:42 +10:00
Matthew Waters
f03071439f gl/api: improve the to/from string for GstGLAPI/GstGLPlatform
With unit tests now!

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/809>
2021-05-13 15:35:23 +10:00
Matthew Waters
3c3d978578 gl/framebuffer: expand documentation on valid usage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/809>
2021-05-12 16:51:25 +10:00
Haihao Xiang
74129211e4 gl: add support for RGBP and BGRP formats
gst-launch-1.0 videotestsrc ! video/x-raw,format=RGBP ! glimagesink
gst-launch-1.0 videotestsrc ! video/x-raw,format=BGRP ! glimagesink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1141>
2021-05-11 12:24:41 +08:00
Haihao Xiang
ca046ca73c video: add support for RGBP and BGRP formats
The two RGB planar formats are used in OpenVino [1]

gst-launch-1.0 videotestsrc ! video/x-raw,format=BGRP ! fakesink
gst-launch-1.0 videotestsrc ! video/x-raw,format=RGBP ! fakesink

[1] https://docs.openvinotoolkit.org/latest/openvino_docs_optimization_guide_dldt_optimization_guide.html

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1141>
2021-05-11 12:24:41 +08:00
Nicolas Dufresne
d3ac7bfcbf codec: Introduce GstVideoCodecAlphaMeta
This meta hold one buffer of the same codec data as the parent memory. This
extra frame luma will be used as the alpha values for the final combined
frame. This is notably used to support VP8/VP9 alpha as defined in WebM and
matroska specification.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1128>
2021-05-10 16:33:11 -04:00
Nicolas Dufresne
ac54f073d8 video: Sort includes in video.h
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1128>
2021-05-05 16:20:37 -04:00
Sebastian Dröge
02530e9d3e appsrc: Implement a leaky property similar to the queue element
This allows dropping the newest or oldest buffer when the internal queue
is full instead of blocking or continuing to grow.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1133>
2021-05-05 15:13:33 +00:00
Sebastian Dröge
d987ec21f2 appsrc: Add new max-buffers / max-time / current-level-buffers / current-level-time properties
These work the same way as the corresponding properties on queue and
allow to control the internal buffer size of the appsrc in a more
flexible way.

Unlike in queue the max-buffers and max-time properties are 0 (i.e.
disabled) by default for backwards compatibility reasons.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1133>
2021-05-05 15:13:33 +00:00
Matthew Waters
a77c316590 rtp/hdrext: correct gst_rtp_get_header_extension_list() docs
The return value is a list of GstElementFactory's that when
gst_element_factory_create()ed will create a GstRTPHeaderExtension.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/897

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1136>
2021-05-04 15:40:30 +10:00
Sebastian Dröge
da9a3da8aa appsrc: Don't leak buffer list while wrongly unreffing buffer on EOS/flushing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1134>
2021-05-03 05:42:07 +00:00
Sebastian Dröge
fc7d65b107 app: Add gstappsrc.h to the enum headers in meson.build
It's already indirectly included but let's better be explicit here.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1134>
2021-05-03 05:42:07 +00:00
Matthew Waters
1ca747436f sdp/caps: support translating transport-cc rtcp-fb from caps to sdp attributes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1130>
2021-04-29 21:16:57 +10:00
Doug Nazar
7725c90d5c rtp: Fix request-extension signal call
Signal is registered as taking a guint however was being passed a
guint64 which fails on 32-bit.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1102>
2021-04-28 22:50:53 -04:00
Matthew Waters
c16412dd63 gl/download: add support for output memory:NVMM buffers
Currently RGBA-only.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1071>
2021-04-28 12:44:38 +10:00
Matthew Waters
94f0d9c69b gl/bufferpool: add api for retrieving the configure gl allocation params
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1071>
2021-04-28 12:44:38 +10:00
Matthew Waters
2f35aeca8c glupload: add support for uploading memory:NVMM buffers
Currently RGBA-only.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1071>
2021-04-28 12:42:15 +10:00
Matthew Waters
f770982635 glupload: guard against glEGLImageTexture2D not existing
e.g. if targetting EGL/opengl, we would attempt to use this GLES
function when wrapping EGLImage's.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1071>
2021-04-28 12:42:15 +10:00
Xavier Claessens
4ef5c91697 gstgl: Fix build when Meson >= 0.58.0rc1
"implicit_include_directories: false" now also means that current build
directory is not added to include paths by default any more. We have to
add it manually because we have some custom_target() that generate
headers in current build directory.

See https://github.com/mesonbuild/meson/issues/8700.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1125>
2021-04-27 08:26:18 +00:00
Doug Nazar
b14c2e6fb0 opengl: Silence macOS OpenGL deprecations
As of macOS 10.14 the entire OpenGL system is deprecated. No need to
log the general warnings about it. Specific warnings are still enabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1123>
2021-04-24 22:26:36 -04:00
Jakub Adam
538e2ef1d0 rtpbasedepay: fix locking of GstRTPHeaderExtension
'ext' object unlocked if gst_rtp_header_extension_read() fails was never
locked in the first place.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1118>
2021-04-21 17:34:18 +02:00
Jordan Petridis
df88b10c7f gstvideoencoder: make sure the buffer is writable before modifying metadata
Similar to ae8d0cf3ac

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1112>
2021-04-20 16:01:15 +00:00
Stéphane Cerveau
ada8b07be2 videodecoder: use DTS if PTS unknown
The buffer should be set according to DTS if exists
when we are guessin the PTS instead of segment start.
The decoder can receive buffers which are before the segment
in case of seek for example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1111>
2021-04-19 13:28:39 +02:00
Marijn Suijten
33167573e1 Drop @ documentation references from functions and external types
`@` references are used to reference function parameters, struct members
or enum variants _within_ the current type/function.  It cannot and
should not be used to reference to types outside that.

Since C has no notion of member functions it makes little sense to
prefix these with `@`; most of the documentation here was referencing
functions on _different_ types anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1090>
2021-04-15 15:49:39 +02:00
Tim-Philipp Müller
5b754c381c gl: fix up Since markers for newly-added _get_type() functions
Follow-up to !999 which wasn't backported into 1.18 in the end
after all.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/857

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1101>
2021-04-11 23:50:35 +01:00
Doug Nazar
1d5ad7d1da audio/alsa: Exit write loop if underlying device is already paused.
If the alsasink thread starts the write loop but another thread pauses
the underlying alsa device, the sink thread will endlessly loop.

snd_pcm_writei() will return 0 if the state is SND_PCM_STATE_PAUSED
and the loop will never make any progress.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1097>
2021-04-08 07:28:21 +00:00