Commit graph

20812 commits

Author SHA1 Message Date
Thibault Saunier
5ad727f9ee compositor: Frames where we introduce alpha can't obscure anything
When a pad has alpha != 1.0 it means that the resulting frames will
contain alpha and thus can't fully obscure with a lower zorder.

Also simplifies the other checks as blending with an OVER or on a
transparent is not a no-op as previously assumed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/764>
2020-07-31 15:52:14 -04:00
Mathieu Duponchelle
2faeb7d394 videoaggregator: implement samples selection API
Call gst_aggregator_selected_samples() after filling the queues
(but before preparing frames).

Implement GstAggregator.peek_next_sample.

Add an example that demonstrates usage of the new API in combination
with the existing buffer-consumed signal.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/728>
2020-07-31 07:54:56 +00:00
Thibault Saunier
718122a9bf encoding: Support more topologies in profile_from_discoverer()
Previous implementation was only working when the stream was inside a
container, this refactoring allows using virtually any stream as input.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/766>
2020-07-31 00:15:58 +00:00
Seungha Yang
c2b9be5c94 glwindow/winrt: Increase timeout value to 15 seconds
5 seconds might not be enough value for timeout in case an application
is running on a device with very limited computing power.
Note that ANGLE uses 10 seconds timeout value. So even if a timeout
happens here, it's also ANGLE's timeout condition as well
(meaning that bad things will happen either way)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/769>
2020-07-30 21:05:54 +09:00
Sebastian Dröge
f5a02639e1 audioaggregator: Only check downstream caps when handling CAPS events if we didn't negotiate with downstream yet
If we already negotiated with downstream there is not point in checking
if the caps are supported. We already know that this is the case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/768>
2020-07-28 10:59:25 +03:00
Sebastian Dröge
607dc1d135 audioaggregator: Check all downstream allowed caps structures if they support the upstream rate
Otherwise it might happen that downstream prefers a different rate (i.e.
puts it into the first structure) and also supports other rates, but
audioaggregator would then fail negotiation.

Also this now correctly handles downstream returning a range of
supported rates.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/768>
2020-07-27 18:49:48 +03:00
Stéphane Cerveau
22827e8f9e meson: add a plugin summary
This summary displays a list of plugins which
have been enabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/765>
2020-07-23 15:09:17 +00:00
Thibault Saunier
1cead20777 encodebin: Fix and refactor smart encoding
It was not working properly and the implementation of the smartencoder
element was weird. This introduce a number of changes (which are all
in one single commit because they basically all work together and lead
to basically reimplementing the element):

* Make smartencoder a bin so that the reencoding chain of elements are
  inside of it instead of not having any parent. Those elements were not
  be visible when dumping the pipeline which was very confusing.
* Make encodebin create the right encoder with a capsfilter (and parser)
  to properly enforce the format specified by the user, and so that the
  encoder properties specified in the encoding profile are respected.
* Use `decodebin` to do the decoding instead of selecting a decoder
  ourself and not plug any parser etc...
* Ensure that negotiated format in the sinkpad of smart encoder is fixed
  through time when the user requested a non dynamic output
* Add a parser at the beginning of the smart encoder
* Handle errors when reencoding

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/751>
2020-07-22 16:01:25 +00:00
Thibault Saunier
d10929da7c streamsplitter: Forward STREAM_START to all branchs
Otherwise the branch that get selected later won't receive it ever.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/751>
2020-07-22 16:01:25 +00:00
Thibault Saunier
871fa29639 streamsplitter/combiner: Drain encoder before switching branch
Otherwise we miht have frames queued in the encoder from the old branch
that do not get encoded/muxed when they should.

The implementation is a bit 'weird' but the rational and solution
is documented in the code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/751>
2020-07-22 16:01:25 +00:00
Thibault Saunier
a31158012b encodebin: Rebuilt internal state when swicthing to avoid-reencoding
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/751>
2020-07-22 16:01:25 +00:00
Matthew Waters
a1e9f4e37b rtpbasepayload: place twcc-ext-id behind environment variable
Adding properties for each and every rtp header extension is not
scalable and a new interface will be implemented for the general case
(https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/777).

Set the environment variable "GST_RTP_ENABLE_EXPERIMENTAL_TWCC_PROPERTY"
to any value to reenable the short-lived twcc-ext-id property.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/761

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/756>
2020-07-21 11:57:55 +00:00
Olivier Crête
cb6edaf6f8 videorate: Error out on streams with no way to guess framerate
This is better than going into an infinite loop.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/761>
2020-07-20 22:05:57 +00:00
Olivier Crête
90ff086a43 videorate: Assert on invalid result from internal code
Letting this through instead results in an infinite loop where
the exact same buffer gets pushed out ad infinitum.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/761>
2020-07-20 22:05:57 +00:00
Olivier Crête
323554a31a videorate: Add test that reproduces infinite loop
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/761>
2020-07-20 22:05:57 +00:00
Olivier Crête
2de70ed7c5 alsadeviceprovider: Remove redundant start function
The ALSA provider doesn't provider live monitoring, so don't
pretend otherwise.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/735>
2020-07-20 21:12:54 +00:00
Matthew Waters
e762f1b376 Revert "gstgldisplay: Add public foreign_display property"
This introduced a possible regression where the EGL display connection
could be leaked when a foreign native display (x11, wayland, etc) could
create a non-foreign EGL display that would never be destroyed.

The underlying problem needed to be solved in a different way.  See
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/640
for more details.

This reverts commit 2e686b0dad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/758>
2020-07-20 05:59:14 +00:00
Silvio Lazzeretti
aa4bea913b audioutilsprivate: restore thread priority before ending
The priority of the thread that executes audioringbuffer_thread_func
is incremented on Windows by the usage of the AvSetMmThreadCharacteristics
API. This change has to be restored, as described on the documentation
of the API (https://docs.microsoft.com/en-us/windows/win32/api/avrt/nf-avrt-avsetmmthreadcharacteristicsw#remarks),
with a call to the AvRevertMmThreadCharacteristics. If this is not done,
a handle will be leaked.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/760>
2020-07-18 13:00:00 +02:00
Seungha Yang
f0a9907097 audioutilsprivate: Don't try to load avrt for UWP application
All APIs in avrt.h are desktop only.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/763>
2020-07-17 18:55:31 +09:00
Matthew Waters
26a88fdb7a build/gl: remove unused cocoa/win32 header variables
We don't install any cocoa/win32 specific headers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/759>
2020-07-16 08:12:53 +00:00
Havard Graff
36fec290a3 test/rtp: use the proper _INIT for initializing rtp/rtcp buffer structs.
Fixes -Wmissing-field-initializers in Clang.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/757>
2020-07-15 16:57:01 +02:00
Havard Graff
c488fd74a0 rtpbasedepayload: test warning fixes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/757>
2020-07-15 16:57:01 +02:00
Nicolas Dufresne
9a6730eee6 doc: Update cache with new raw pixel format
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/754>
2020-07-14 22:03:39 -04:00
Nicolas Dufresne
98b44fdb46 video: Add support for linear 32x32 NV12 tiles
This adds linear 32x32 NV12 based tiles. This format is notably used by
Allwinner VCU and exposed in V4L2 as being "SUNXI Tiled" format. In this
patch we generalize the plane info calculation so we can share this part
with the 4L4 variant.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/754>
2020-07-14 21:43:56 -04:00
Nicolas Dufresne
29497285d7 doc: Update cache after adding a new pixel format
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/753>
2020-07-14 17:33:31 +00:00
Nicolas Dufresne
02c10e5bab rawvideoparse: Fix tiling support
When using tile format, the stride has a different meaning. It used
the MSB and LSB 16bits to encode respectively the width and height in
number of tiles.

This issue was introduce with commit e5b70d384c which was fixing
missing size recalculation when strides and offset is updated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/753>
2020-07-14 17:33:31 +00:00
Nicolas Dufresne
7d1028424c video: Add NV12_4L4 tile format
This format is produced by Verisillicon VC8000D VPU decoder, it is a simple 4x4
tiling layout in a linear way.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/753>
2020-07-14 17:33:31 +00:00
Aaron Boxer
c770f0b68e video: allow frame copy destination to have dimensions smaller than source
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/707>
2020-07-14 16:39:05 +00:00
Matthew Waters
e6823576ce examples/gl/qt: silence compiler warnings
-Waggregate-return: used by some Qt clases extensively and not super
useful for this example. Supress it.

warning: "GL_GLEXT_VERSION" redefined: Perform the same workaround as
qmlglsink by defining the old gl/GL.h header guard if the new GL/gl.h
guard exists.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/752>
2020-07-14 17:07:54 +10:00
Santiago Carot-Nemesio
93cb325fa1 rtcpbuffer: Notify error in case packet can not be added to an RTCP compound packet
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/476>
2020-07-10 14:16:10 +00:00
Sebastian Dröge
81e7cd1fca video-converter: Add scaling fast-path for GBRA format
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/684

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/749>
2020-07-10 12:25:56 +00:00
Seungha Yang
579db691ed glwindow/winrt: Add warning message if window is being closed from a UI thread
All UI elements will follow Single-Threaded Apartments (STA) model.
As a result, we should access them from dedicated UI thread.
Due to the nature of the threading model, ANGLE will wait the UI
thread while closing internal window/swapchain objects.

A problem here is that when destroying GstGLWindow from the UI thread,
it will wait GstGLContext's internal thread. Meanwhile, the GstGLContext's
internal thread will be blocked because ANGLE wants to access the UI thread.
That will cause a deadlock or exceptions.

In short, application should not try to call
gst_element_set_state(pipeline, GST_STATE_NULL) from a UI thread.
That's a limitation of current implementation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/745>
2020-07-10 11:46:56 +00:00
Seungha Yang
bdf73569f8 glwindow/winrt: Add window resize event handler
GstGLWindow implmentaion should be able to report native window size
and also it need to handle resize event for glimagesink.

Note that GstD3D11Window implementation was referenced for this change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/745>
2020-07-10 11:46:56 +00:00
Seungha Yang
ab89746f55 glwindow/winrt: Move to c++
For native window size query, c++ API is much convenient than c API

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/745>
2020-07-10 11:46:56 +00:00
Seungha Yang
061e195e01 appsrc: Fix annotations
Don't put double ':' there

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/663>
2020-07-10 07:52:53 +00:00
Seungha Yang
cb34faaa17 tests: appsrc: Add unit test for custom segment
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/663>
2020-07-10 07:52:53 +00:00
Seungha Yang
64e768e836 appsrc: Add support for custom GstSegment
Add property "handle-segment-change" for user to allow pushing
custom segment event. For now, this property can work only for
time format GstSegment.
This property can be useful in case application controls timeline
of stream such as there is timestamp discontinuity but playback is
expected to be continuous. Multi-period scenario of MPEG-DASH is an
example of this use case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/663>
2020-07-10 07:52:53 +00:00
Thibault Saunier
9412e61150 pbutils: Do not restrict number of similar profiles in a container
We have the notion of presence, and when the user want to be in control
it is totally legitimate for him to have several occurrences of a
similar profile

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/746>
2020-07-09 21:59:54 +00:00
Nicolas Dufresne
dcc7242ba5 videoconverter: Relax frame size checks
Since we are using VideoMeta, the converter (similarly to the video_frame_copy
utility) should have no issue dealing with frames that are slightly larger.
This situation occure as some element will use padded width/height for
allocation, which results in a VideoMeta width/height being larger then the
display width/height found in the negotiated caps.

Fixes #790

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/747>
2020-07-09 20:35:05 +00:00
Sebastian Dröge
f94c7ae3c9 audioaggregator: Fix negotiation with downstream if there is no peer yet
get_allowed_caps() will return NULL, which is not a problem in itself.
Just take the template caps for negotiation in that case instead of
erroring out.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/744>
2020-07-09 16:48:02 +00:00
Tim-Philipp Müller
64712fa7eb meson: set release date from .doap file for releases
And fix up DOAP file XML. Parser would complain about
unknown entity &excl; here.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/743>
2020-07-08 16:48:30 +01:00
Tim-Philipp Müller
dcce44f295 pkgconfig: fix gstreamer-plugins-base-1.0 .pc files for no OpenGL case
Don't put gl into the libraries list if the gst-gl library isn't
being built, and also don't include it in the list of linker flags
then.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/742>
2020-07-08 15:22:58 +01:00
Seungha Yang
55f10f31d4 glwindow/win32: Fix possible deadlock around key/mouse event handling
Calling gst_gl_window_send_{key,mouse}_event() from GstGLContext
thread might cause a deadlock. Instead, use the dedicated event handling
thread in GstGLDisplay.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/721>
2020-07-08 13:41:07 +00:00
Seungha Yang
595ca46301 examples: win32-videooverlay: Add test for fullscreen mode switch
Add test option "--fullscreen" for testing fullscreen mode switch.
When enabled, user can switch fullscreen mode via SPACE key or
right mouse button click.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/721>
2020-07-08 13:41:07 +00:00
Tim-Philipp Müller
53320460cb pkgconfig: fix meson warnings about GL_CFLAGS in gstreamer-gl .pc files
We added GL_CFLAGS in autotools because we unconditionally included OpenGL
headers. We do not do that anymore for a standard #include <gst/gl/gl.h>.
OpenGL headers are only included for the platform specific files
e.g. #include <gst/gl/x11/gstgldisplay_x11.h> which must always be hidden
behind a #if GST_GL_HAVE_WINDOW_X11, or #include <gst/gl/gstglfuncs.h> to
gain access to the contents of the GstGLFuncs object.

Users of our headers must include the necessary include paths for the
platforms they are intending to support.

We might introduce extra .pc files for what GstGL was built against though.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/741>
2020-07-08 09:53:42 +01:00
Seungha Yang
ed573ff1f9 examples/gl/qt: Don't include GL/glx.h unconditionally
The header file might not be available on non-*nix platform.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/740>
2020-07-07 23:12:47 +00:00
Tim-Philipp Müller
c38b6cc305 tests: validate: fix meson warning
meson.build:4: WARNING: Trying to compare values of different types (ExecutableHolder, bool) using ==.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/739>
2020-07-07 19:03:56 +00:00
Edward Hervey
6abc6f33da docs: Update cache for removed properties
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/738>
2020-07-07 15:53:23 +02:00
Edward Hervey
50be315a1a playback: Clarify flag usage for playbin3
Forcing software-decoder has no effect on playbin3 now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/738>
2020-07-07 15:53:23 +02:00
Edward Hervey
1e596cb33f Revert "playbin3: handle GST_PLAY_FLAG_FORCE_SW_DECODERS"
This reverts commit f4bcf8290b.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/738>
2020-07-07 15:53:23 +02:00